在前面我们实现了基本的HTTP反向代理,从互联网过来的请求已经可以分发到后端多台网站服务器上,但不是所有的业务都是网络类型的,此篇文章我们主要讨论的是TCP 端口的负载均衡做法,昨天也有小伙伴提到了,在HTTP反向代理中,我们并没有讨论会话保持和健康检查,我们将会在这篇文章结束后,专门写一篇关于会话保持和检查检查的文章,来分析他们的做法。
我们正式开始此篇的重点,我们要实现的是用户通过Nginx来访问一个或多个端口,这种场景还是蛮多的,例如OpenStack的控制节点等无状态的服务就需要一个统一的访问入口,例如对外的API接口、MySQL服务器等,但凡是需要对外提供一个高可用端口的场景,都用的上。
TCP 负载均衡
目标: 通过Nginx来实现后端两台服务器的负载均衡,且以轮询的方式将请求分发到不同的服务器上,此处我们就以SSH的22号端口来演示。
角色 | 机器名 | IP地址 |
Nginx | Host1 | 192.168.30.130 |
TCP 端口服务器 | Host2 | 192.168.30.131 |
TCP 端口服务器 | Host3 | 192.168.30.132 |
备用TCP 端口服务器 | Host4 | 192.168.30.133 |
新建一个port.conf的配置文件,我们将用这些文件来实现此实验目标,但是我们要注意位置,配置文件不要新建到conf.d目录中,因为如下图所示,这个位置是包含在HTTP这个块中的,我们需要新建一个,例如port.conf.d的目录,并在nginx主配置文件中,包括此目录
查看不能放在conf.d的原因
包含port.conf.d目录
vim /etc/nginx/nginx.conf
在此文件中的最后一行,添加如下所示的内容
include /etc/nginx/port.conf.d/*.conf;
新建配置文件
mkdir /etc/nginx/port.conf.d
vim /etc/nginx/port.conf.d/port.conf
将以下内容复制粘贴到配置文件中
stream {
upstream sshport {
server 192.168.30.131:22 weight=10;
server 192.168.30.132:22 weight=10;
server 192.168.30.133:22 backup;
}
server {
listen 2000;
proxy_pass sshport;
}
}
配置文件效果如下
开启nginx服务器的TCP 2000端口防火墙
firewall-cmd --add-port=2000/tcp
firewall-cmd --add-port=2000/tcp --permanent
如果你的服务器开启了selinux,可能会启动失败,由于selinux不在讨论范围内,你可以使用以下命令临时关闭selinux
setenforce 0
重启Nginx服务
systemctl restart nginx.service
查看侦听
netstat -tunlp | grep 2000
高可用验证
在ssh时,指定端口为2000,我们可以看到,输入密码后,直接登录了host2,也就是说代理成功
我们来测试一下,如果host2关机会怎么样,你可以在host2上执行以下命令关机
systemctl poweroff
再次登录的时候报错SSH,这是因为host2已经关机,尝试链接host3,发现指纹不对,可以执行rm -rf /root/.ssh/known_hosts删除
此时我们可以看到,host2关机后,再次连接,就会有host3为你提供服务
结合上一篇和本篇文章,我们已经可以简单完成HTTP类型的网站和TCP 端口的高可用配置,下一篇我们重点来讲一下在常规的负载均衡背后的技术,会话保持、健康检查、场景的负载均衡策略都会在下一篇讲到。
转载于:https://blog.51cto.com/ucweb/2410631