×

首页>讲师原创专区

教师图片

李晓辉老师

10文章总数

36079总阅读数

查看Ta的文章>>

Nginx负载均衡之TCP端口高可用(二)

发布于:2019年06月18日 浏览:3437次 20

    在前面我们实现了基本的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 端口的高可用配置,下一篇我们重点来讲一下在常规的负载均衡背后的技术,会话保持、健康检查、场景的负载均衡策略都会在下一篇讲到。

本周热文

推荐专题

专栏图标 专栏图标 专栏图标 专栏图标 专栏图标 专栏图标

PMI, PMP, Project Management Professional, CAPM, PgMP, PfMP, PMI-ACP, PMI-RMP, PMI-SP, PMI-PBA and PMBOK are registered marks of the Project Management Institute, Inc.

ITIL® is a registered trade mark of AXELOS Limited, used under permission of AXELOS Limited. All rights reserved.

PRINCE2® is a registered trade mark of AXELOS Limited, used under permission of AXELOS Limited. All rights reserved.

Copyright © 2006-2019 东方瑞通(北京)咨询服务有限公司版权所有

京ICP备 13009094号 京公网安备 11010802031185号