nginx四层负载均衡:redis和mysql

如果编译安装,需要指定 --with-stream 选项才能支持ngx_stream_proxy_module模块

负载均衡:redis

后端服务器安装redis

#安装两台redis服务器
[root@cent8_yzl_10 ~]# yum -y install redis
[root@cent8_yzl_10 ~]# grep '^bind' /etc/redis.conf
bind 127.0.0.1
[root@cent8_yzl_10 ~]# sed -i '/^bind /c bind 0.0.0.0' /etc/redis.conf
[root@cent8_yzl_10 ~]# grep '^bind' /etc/redis.conf
bind 0.0.0.0
[root@cent8_yzl_10 ~]# systemctl enable --now redis
Created symlink /etc/systemd/system/multi-user.target.wants/redis.service → /usr/lib/systemd/system/redis.service.
[root@cent8_yzl_10 ~]# ss -ntl |grep 6379
LISTEN    0         128                0.0.0.0:6379             0.0.0.0:*       
[root@cent8_yzl_10 ~]# 

nginx配置

[root@nginx ~]# vim /apps/nginx/conf/nginx.conf

include /apps/nginx/conf/tcp/tcp.conf; #注意此处的include与http模块平级
[root@nginx ~]# mkdir /apps/nginx/conf/tcp
[root@nginx ~]# cat /apps/nginx/conf/tcp/tcp.conf 
stream {
 upstream redis_server {
   server 10.0.0.10:6379 max_fails=3 fail_timeout=30s;
   server 10.0.0.20:6379 max_fails=3 fail_timeout=30s;
 }
  server {
    listen 10.0.0.30:6379;
    proxy_connect_timeout 3s;
    proxy_timeout 3s;
    proxy_pass redis_server;
 }
}
[root@nginx ~]# 

#重启nginx并访问测试
[root@nginx ~]# systemctl restart nginx
[root@nginx ~]# ss -ntl |grep 6379
LISTEN    0         128              10.0.0.30:6379             0.0.0.0:*       
[root@nginx ~]# 

#测试通过nginx负载连接redis
[root@cent8_yzl_10 ~]# redis-cli
127.0.0.1:6379> set class yzl_10
OK
127.0.0.1:6379> get class
"yzl_10"
127.0.0.1:6379> exit
[root@cent8_yzl_10 ~]# 
[root@web ~]# redis-cli -h 10.0.0.30 get class
"yzl_10"
[root@web ~]# redis-cli -h 10.0.0.30 get class
(nil)
[root@web ~]# redis-cli -h 10.0.0.30 get class
"yzl_10"
[root@web ~]# 

负载均衡:mysql

后端服务器安装mysql

#先修改后端两个服务器的主机名,方便测试
[root@cent8_yzl_10 ~]# hostnamectl set-hostname mysql-server1.example.com
[root@cent8_yzl_20 ~]# hostnamectl set-hostname mysql-server2.example.com

#安装mysql服务
[root@mysql-server1 ~]# yum install -y mysql-server
[root@mysql-server1 ~]# systemctl enable --now mysqld
[root@mysql-server1 ~]# mysql
mysql> create user yzl@'10.0.0.%' identified by 'redhat';
mysql> flush privileges;
mysql> exit;
Bye
[root@mysql-server1 ~]# 

nginx配置

[root@nginx ~]# cat /apps/nginx/conf/tcp/tcp.conf 
stream {
 upstream redis_server {
   server 10.0.0.10:6379 max_fails=3 fail_timeout=30s;
   server 10.0.0.20:6379 max_fails=3 fail_timeout=30s;
}
 upstream mysql_server {
   server 10.0.0.10:3306 max_fails=3 fail_timeout=30s;
   server 10.0.0.20:3306 max_fails=3 fail_timeout=30s;
}
  server {
    listen 10.0.0.30:6379;    
    proxy_connect_timeout 3s;
    proxy_timeout 3s;
    proxy_pass redis_server;
 }

   server {
     listen 10.0.0.30:3306;
     proxy_pass mysql_server;
}
}
[root@nginx ~]# 

#重启nginx并访问测试
[root@nginx ~]# systemctl restart nginx

#测试通过nginx负载连接mysql
[root@web ~]# mysql -uyzl -predhat -h 10.0.0.30 -e 'show variables like "hostname"'
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| hostname      | mysql-server1.example.com |
+---------------+---------------------------+
[root@web ~]# mysql -uyzl -predhat -h 10.0.0.30 -e 'show variables like "hostname"'
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| hostname      | mysql-server2.example.com |
+---------------+---------------------------+
[root@web ~]# 

#在10.0.0.20上停止mysql服务
[root@mysql-server2 ~]# systemctl stop mysqld

#再次测试访问,只会看到mysql-server1.example.com进行响应
[root@web ~]# mysql -uyzl -predhat -h 10.0.0.30 -e 'show variables like "hostname"'
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| hostname      | mysql-server1.example.com |
+---------------+---------------------------+
[root@web ~]# mysql -uyzl -predhat -h 10.0.0.30 -e 'show variables like "hostname"'
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| hostname      | mysql-server1.example.com |
+---------------+---------------------------+
[root@web ~]# 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

y_zilong

一分钱的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值