实现Nginx tcp负载均衡

混江龙づ霸主 提交于 2020-01-11 22:58:59

实现Nginx tcp负载均衡

1. 模块ngx_stream_core_module

Nginx在1.9.0版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载,udp主要用于DNS的域名解析,其配置方式和指令和http 代理类似,其基于ngx_stream_proxy_module模块实现tcp负载,另外基于模块ngx_stream_upstream_module实现后端服务器分组转发、权重分配、状态监测、调度算法等高级功能。

官方文档:https://nginx.org/en/docs/stream/ngx_stream_core_module.html
默认情况下未构建此模块,应使用--with-stream 配置参数启用它

1.1 Directives (指令)

1.1.1 listen
Syntax:	listen address:port [ssl] [udp] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
Default:	—
Context:	server

为服务器将接受连接的套接字 设置address和port。可以仅指定端口。该地址也可以是主机名,例如:

listen 127.0.0.1:12345;
listen *:12345;
listen 12345;     # same as *:12345
listen localhost:12345;

UNIX域套接字使用“ unix:”前缀指定:

listen unix:/var/run/nginx.sock;

指定端口范围(1.15.10),第一个和最后一个端口用连字符分隔:

listen 127.0.0.1:12345-12399;
listen 12345-12399;
1.1.2tcp负载均衡配置参数
stream { #定义stream
 upstream backend { #定义后端服务器
   hash $remote_addr consistent; #定义调度算法
   server backend1.example.com:12345 weight=5; #定义具体server
   server 127.0.0.1:12345    max_fails=3 fail_timeout=30s;
   server unix:/tmp/backend3;
 }
 upstream dns {  #定义后端服务器
   server 192.168.0.1:53535;  #定义具体server
   server dns.example.com:53;
 }
 server { #定义server
   listen 12345; #监听IP:PORT
   proxy_connect_timeout 1s; #连接超时时间
   proxy_timeout 3s; #转发超时时间
   proxy_pass backend; #转发到具体服务器组
 }
 server {
   listen 127.0.0.1:53 udp reuseport;
   proxy_timeout 20s;
   proxy_pass dns;
 }
 server {
   listen [::1]:12345;
   proxy_pass unix:/tmp/stream.socket;
 }
}

2. 负载均衡实例:MySQL

  1. 服务器安装MySQL
# 为了方便快捷 故yum安装
[root@s4 ~]# yum install mariadb mariadb-server -y
[root@s4 ~]# systemctl start mariadb
[root@s4 ~]# mysql_secure_installation #安全初始化
[root@s4 ~]# systemctl enable mariadb
[root@s4 ~]# mysql -uroot -p123456
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH
GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
  1. nginx配置
[root@s2 ~]# cat /apps/nginx/conf/tcp/tcp.conf
stream {
	upstream mysql_server {
 	  least_conn;
 	  server 192.168.7.104:3306 max_fails=3 fail_timeout=30s;
	}
	server {
	 listen 192.168.7.102:3306;
	 proxy_connect_timeout 6s;
	 proxy_timeout 15s;
	 proxy_pass mysql_server;
 	}
}	
#重启nginx并访问测试:
[root@s2 ~]# systemctl restart nginx	
#测试通过nginx负载连接MySQL:
[root@s4 ~]# mysql -uroot -p123456 -h 192.168.7.102
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!