七层代理和三层代理的配置文件结构
http { #ngx_http_core_module模块
upstream httpdsrvs {
server 192.168.80.120 weight=3 ;
}
server {
listen 80;
server_name www.magedu.net; #监听域名和端口
location / {
proxy_pass http://httpdsrvs; #ngx_http_upstream_module模块
}
}
}
-----------------------------------------------------------------------------------------------------------
stream { #ngx_stream_core_module模块
upstream mysqlsrvs {
server 192.168.80.120:3306 weight=3 ;
}
server {
listen 172.16.100.100:3306; #监听IP和端口
proxy_pass mysqlsrvs; #ngx_stream_proxy_module模块
}
}
实现Nginx tcp负载均衡
Nginx在1.9.0版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载,udp主要用于DNS的域名解析,其配置式和指令和http代理类似,
其基于ngx_stream_proxy_module模块实现tcp负载,另外基于模块ngx_stream_upstream_module实现后端服务器分组转发、权重分配、状态监测、调度算法等高级功能。
ngx_stream_core_module模块: 模拟反代基于tcp或udp的服务连接,即工作于传输层的反代或调度器,定义在main区,与http平级,一个七层,一个四层。
stream { ... } 定义stream相关的服务;Context:main
#定义调度算法
hash $remote_addr consistent; 源地址hash调度方法,基于的客户端的remote_addr
least_conn; 最少连接调度算法
ngx_stream_proxy_module模块 :可实现代理基于TCP,UDP (1.9.13), UNIX-domain sockets的数据流
proxy_pass address; 指定后端服务器地址或socket
proxy_timeout timeout; 无数据传输时,保持连接状态的超时时长,默认为10m
proxy_connect_timeout time; 设置nginx与被代理的服务器尝试建立连接的超时时长,默认为60s
stream {
#redis服务器
upstream redis_server {
#hash $remote_addr consistent;
server 192.168.80.130:6379 max_fails=3 fail_timeout=30s;
}
server {
listen 192.168.80.110:6379;
proxy_connect_timeout 3s;
proxy_timeout 3s;
proxy_pass redis_server;
}
#数据库服务器
upstream mysql_server {
least_conn;
server 192.168.80.140:3306 max_fails=3 fail_timeout=30s;
}
server {
listen 192.168.80.110:3306;
proxy_connect_timeout 3s;
proxy_timeout 3s;
proxy_pass mysql_server;
}
}
[root@ ]# vim /apps/nginx/conf/nginx.conf
21 include /apps/nginx/conf/tcp/tcp.conf; #注意此处的include与http模块平级
[root@localhost7B ~]# netstat -antlp | grep 6379
tcp 0 0 192.168.80.110:6379 0.0.0.0:* LISTEN 96215/nginx: master
[root@localhost7B ~]#
[root@localhost7B ~]# netstat -antlp | grep 3306
tcp 0 0 192.168.80.110:3306 0.0.0.0:* LISTEN 96215/nginx: master
redis服务器配置
yum install redis -y
vim /etc/redis.conf
bind 0.0.0.0
systemctl start redis
systemctl enable redis
netstat -antlp | grep 6379
#测试成功
# redis-cli -h 192.168.80.110
192.168.80.110:6379> set name zzhz
OK
192.168.80.110:6379> get name
"zzhz"
数据库服务器配置
yum install mariadb mariadb-server -y
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation
mysql -uroot -p123456
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
#测试成功
mysql -uroot -p123456 -h 192.168.80.110