1 负载均衡器的原理与功能

单台Chatserver可以容纳大约两万台客户端同时在线聊天,为了提升并发量最直观的办法需要水平扩展服务器的数量,三台服务器可以容纳六万左右的客户端。
负载均衡器的作用:
- **把client的请求按照负载均衡算法分发到具体业务服务器chatserver上面:**保证server与client的长连接,依据轮询算法/权重算法等将不同client连接到不同server上面,提升client的容量
- **能够和chatserver保持心跳机制,监测chatserver故障:**nginx能够实时监测server是否由于网络故障无法为client提供服务,可以引入心跳计数器进行判断
- **能够发现新添加的chatserver设备,方便扩展服务器数量:**能够在不关闭原有服务器的基础上平滑添加新的server供nginx调度分配
2 nginx的tcp负载均衡配置和功能验证
选择nginx的tcp负载均衡模块需要解决的问题:
- 如何进行nginx源码编译,包括tcp负载均衡模块
- nginx.conf配置文件中如何配置负载均衡
- nginx的平滑加载配置文件启动
配置参考:Nginx负载均衡实践-CSDN博客
安装好nginx之后位于usr/local/nginx之下:

配置文件位于conf文件夹下的nginx.conf,可执行文件位于sbin下。
nginx提供了应用层(http web)和传输层(tcp)的负载均衡,在nginx.conf中修改即可。
cpp
#nginx tcp loadbalance config
stream{
upstream MyServer{
/*
weight:设置服务器权重,加权轮询算法中权重大的优先分配客户端
max_fails:与server的心跳机制,超过3次未响应则认为故障
fail_timeout:每次心跳监测的时长为30s
添加新的服务器无需停止nginx服务,只需要修改此配置文件即可
*/
server 127.0.0.1 6000 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1 6002 weight=1 max_fails=3 fail_timeout=30s;
}
server{
proxy_connect_timeout 1s;
#proxy_timeout 3s;
//客户端统一连接nginx的8000端口,由nginx进行负载均衡
listen 8000;
//反向代理对象为MyServer
proxy_pass MyServer;
tcp_nodelay on;
}
}
./nginx -s reload:平滑重启配置文件
./nginx -s stop:停止nginx服务
结果测试:
(1)启动nginx

(2)测试连接



两台客户端访问8000端口的nginx分别被分配到了两台服务器。