sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
cd /usr/local/src/
sudo wget http://nginx.org/download/nginx-1.25.2.tar.gz
sudo tar -zxvf nginx-1.25.2.tar.gz
cd ./nginx-1.25.2/
sudo ./configure --with-stream \
--with-http_ssl_module
sudo make
sudo make install
cd /usr/local/nginx/conf/
sudo nano nginx.conf
在nginx.conf输入以下内容以配置tcp负载均衡
stream{
upstream ClusterServer {
server 127.0.0.1:9527 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:9528 weight=1 max_fails=3 fail_timeout=30s;
}
server {
proxy_connect_timeout 1s;
listen 9000;
proxy_pass ClusterServer;
tcp_nodelay on;
}
}
upstream
:定义了一个后端服务器组,名为 ClusterServer,用于负载均衡。包括两台服务器server 127.0.0.1:9527
,server 127.0.0.1:9528
。weight=1
:指定该服务器的权重。权重越大,Nginx 选择该服务器的概率就越高。在这里,两台服务器的权重相同,意味着轮询分配。max_fails=3 fail_timeout=30s
: 在心跳机制中,如果一个服务器在 30 秒内失败了 3 次(根据 max_fails),则它将被视为不可用,并在 30 秒内该服务器不会再被选中处理请求。每30s都会尝试测试。proxy_connect_timeout 1s
:设置nginx代理连接到后端服务器的超时时间。即 Nginx 在连接后端服务器(如 127.0.0.1:9527 或 127.0.0.1:9528)时,若超过 1 秒无法建立连接,则认为连接超时。listen 9000
:指定 Nginx 监听的端口。客户端发起的 TCP 连接将通过localhost:9000
连接到 Nginx,随后由 Nginx 将流量代理到后端服务器。proxy_pass ClusterServer
:将客户端连接通过nginx代理到定义在 upstream ClusterServer 中的服务器组。tcp_nodelay on
:启用或禁用 tcp_nodelay 选项。启用后,Nginx 将关闭 Nagle 算法,保证数据包能立即发送而不等待
。这个选项通常用于降低延迟,适用于实时
应用场景。
cd /usr/local/nginx/sbin/
sudo ./nginx # 启动nginx
ps aux | grep nginx # 查看nginx启动进程
sudo ./nginx -s reload # 重新加载nginx.conf
sudo ./nginx -s stop # 停止nginx
测试
(1)开启两个服务器127.0.0.1:9527和127.0.0.1:9528,客户端连接到nginx代理127.0.0.1:9000,9527服务器响应。
(2)再将一个客户端连接到nginx代理,9528服务器响应。接下来再开一个客户端,9527服务器响应了。确实是以Round-Robin(轮询)方式进行负载均衡,和配置预想一致。
参考
Bilibili-C++项目-集群聊天服务器