服务器负载均衡
1. 安装 EPEL 仓库
EPEL(Extra Packages for Enterprise Linux)仓库提供了额外的软件包,安装 HAProxy 前需要先启用 EPEL 仓库。
sudo yum install epel-release -y
2. 安装 HAProxy
通过 EPEL 仓库安装 HAProxy。
sudo yum install haproxy -y
注意:如果服务器上已安装 Docker,可能会干扰 HAProxy 的安装。建议先关闭或卸载 Docker。
3. 验证 HAProxy 安装
安装完成后,验证 HAProxy 版本以确保安装成功。
haproxy -v
4. 下载 HAProxy 最新版本(可选)
如果需要安装最新版本的 HAProxy,可以从官网下载源代码并编译安装。
wget http://www.haproxy.org/download/2.5/src/haproxy-2.5.0.tar.gz
5. 安装 Node.js
Node.js 是运行 JavaScript 应用程序的环境,以下是安装步骤。
5.1 下载 Node.js
下载指定版本的 Node.js 二进制包。
wget https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.xz
5.2 解压并设置环境变量
将下载的包解压,并将其路径添加到环境变量中。
tar -xvf node-v16.14.2-linux-x64.tar.xz
export PATH=$PATH:/root/node-v16.14.2-linux-x64/bin
5.3 重新加载环境变量
确保环境变量生效。
source ~/.bashrc # 如果使用 .bashrc
# 或者
source ~/.bash_profile # 如果使用 .bash_profile
5.4 验证 Node.js 安装
检查 Node.js 是否安装成功。
node -v
6. 配置 HAProxy
HAProxy 的配置文件位于 /etc/haproxy/haproxy.cfg
,以下是配置示例。
6.1 编辑配置文件
使用文本编辑器打开配置文件。
sudo vi /etc/haproxy/haproxy.cfg
6.2 配置文件内容
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
default_backend nodes_backend
backend nodes_backend
balance roundrobin
server node1 xxx.xxx.xxx.xxx:3000 check
server node2 yyy.yyy.yyy.yyy:3000 check
7. 配置解释
7.1 global
和 defaults
部分
- global:定义全局参数,如日志路径、用户权限等。
- defaults:定义默认选项,如日志格式、超时时间等。
7.2 frontend http_front
部分
- *bind :80:监听 80 端口,接收 HTTP 请求。
- default_backend nodes_backend:将请求转发到后端服务器组
nodes_backend
。
7.3 backend nodes_backend
部分
- balance roundrobin:使用轮询算法分发请求。
- server node1 xxx.xxx.xxx.xxx:3000 check:定义后端服务器
node1
,IP 地址为xxx.xxx.xxx.xxx
,端口为 3000,并启用健康检查。 - server node2 yyy.yyy.yyy.yyy:3000 check:定义后端服务器
node2
,IP 地址为yyy.yyy.yyy.yyy
,端口为 3000,并启用健康检查。
8. 总结
通过以上步骤,您可以成功安装并配置 HAProxy 和 Node.js。HAProxy 作为负载均衡器,可以将流量分发到多个后端服务器,而 Node.js 则为应用程序提供了运行环境。确保配置文件中的 IP 地址和端口与实际环境一致,并根据需要调整参数。