Nginx在1.9.0版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载,udp主要用于DNS的域名解析,其配置方式
和指令和http 代理类似,其基于ngx_stream_proxy_module模块实现tcp负载,另外基于模块ngx_stream_upstream_module实现后
端服务器分组转发、权重分配、状态监测、调度算法等高级功能。如果编译安装,需要指定 --with-stream 选项才能支持
ngx_stream_proxy_module模块官方文档:
https://nginx.org/en/docs/stream/ngx_stream_proxy_module.html
http://nginx.org/en/docs/stream/ngx_stream_upstream_module.html
模拟实验负载均衡实例 : Redis及MySQL
先修改后端两个服务器的主机名,方便测试
[root@centos8 ~]#hostnamectl set-hostname centos8.web1
[root@centos8 ~]#hostnamectl set-hostname centos8.web2
后端服务器安装 Redis和MySQL(redis和mysql装在了同一台机器上,懒得画图了)
安装两台redis服务器
[root@centos8 ~]# yum -y install redis mysql-server
[root@centos8 ~]# sed -i '/^bind /c bind 0.0.0.0' /etc/redis.conf #进行修改redis的bind地址,默认是本地回环地址
[root@centos8 ~]# systemctl enable --now redis
[root@centos8 ~]# systemctl enable --now mysqld
[root@centos8 ~]#mysql
mysql > create user bo@'10.0.0.%' identified by '123456'; #创建账户密码
mysql> FLUSH PRIVILEGES; #刷新权限
mysql > exit
[root@centos8 ~]# ss -tnl #进行端口查看是否成功
扩展知识:
远程登录测试,远程客户端也需要安装redis,不需要开启
[root@centos803 ~]# redis-cli -h 10.0.0.16
添加内容看的跟为直观 (info:可以看到详细信息)
10.0.0.16:6379> set class redis12
查看(class:编辑的名字)
10.0.0.16:6379> get class
nginx 配置,配置前先进行安装nginx, #注意此处的stream与http模块平级
root@centos8 ~]# vim /apps/nginx/conf/nginx.conf
stream {
upstream mysql {
server 10.0.0.10:3306;
server 10.0.0.16:3306;
}
upstream redis {
server 10.0.0.10:6379;
server 10.0.0.16:6379;
}
server {
listen 3306;
proxy_pass mysql;
}
server {
listen 6379;
proxy_pass redis;
}
}
进行查询,默认轮询算法
[root@centosClient ~]# redis-cli -h 10.0.0.15 get class
(nil)
[root@centosClient ~]# redis-cli -h 10.0.0.15 get class
"redis12"
测试通过nginx连接MySQL,轮询
[root@centosClient ~]# mysql -utest -p123456 -h10.0.0.15 -e 'select @@hostname'
+--------------+
| @@hostname |
+--------------+
| centos8.web1 |
+--------------+
+--------------+
| @@hostname |
+--------------+
| centos8.web2 |
+--------------+
简单实现了一下四层负载,如果想要了解更多,可以查看官方文档