Linux系统通过keepalived配置nginx高可用(单播和多播配置)

先准备两台机器,用于测试,这里使用 192.168.1.168192.168.1.146 两台机器测试。

默认你的nginx已经搭建好了,我这里使用的是docker方式搭建的,只是一个简单的模拟

 docker run -p 8123:80 \
 -dit \
 --name nginx-web \
 -v /opt/project/apps/nginx-web/nginx.conf:/etc/nginx/nginx.conf \
 -v /opt/project/apps/web/:/usr/share/nginx/html \
 --privileged=true \
 --restart=always nginx

 

先决条件

禁用SElinux、清除iptables规则、关闭防火墙。就算因某种原因不能清除iptables规则,那么你需要增加一条规则放行多播

各个节点时间同步,启用时间同步服务systemctl start chronyd

确保Keepalive使用的网卡开启了多播

如果没有开启,可以使用该命令打开ip link set multicast on dev ens33,ens33是网卡名称。

 

怎么查看网卡和子网掩码等信息,执行 ifconfig 命令

找到上面的ip 192.168.1.168 ,这个就是我们要找的网卡信息, netmask 是子网掩码信息 esn192 是网卡信息。

 

多播配置

先在 192.168.1.168 主机上进行操作。

第一步,安装keepalived

 yum install -y keepalived

第二步,配置keepalived

 # 进入keepalived.conf所在目录:
 cd /etc/keepalived
 
 # 清除掉keepalived原有配置
 > keepalived.conf

第三步,复制下面的配置文件,根据需要修改相关配置。比如网卡名等

 global_defs {
     # 邮件通知配置,发生故障时候通知的人员
     notification_email {
         740610314@qq.com # 定义收件人
     }
     notification_email_from sns-lvs@gmail.com # 定义发件人
     smtp_server 192.168.1.114 # SMTP服务器地址
     smtp_connection_timeout 30
     router_id LVS_MASTER         # 设置lvs的id,在一个网络应该是唯一的,一般不用改,也可以写成每个主机自己的主机名
 }
 vrrp_instance VI_1 {
     state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备
     interface ens192            # 当前进行vrrp通讯的网络接口卡(当前centos的网卡),不知道就用 ifconfig 查一下
     virtual_router_id 66        # 虚拟路由编号,主从要一致
     priority 100            # 优先级,数值越大,获取处理请求的优先级越高
     advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
     authentication { # 通信认证机制,这里是明文认证还有一种是加密认证
         auth_type PASS
         auth_pass 1111 #密钥
     }
     virtual_ipaddress { # 设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了
         192.168.1.21        # 定义虚拟ip(VIP),可多设,每行一个
         # IP/掩码 dev 配置在哪个网卡
         # 192.168.200.16/24 dev eth1
     }
 }
 # 定义LVS集群服务,可以是IP+PORT;也可以是fwmark 数字,也就是防火墙规则
 virtual_server 192.168.1.21 8123 {
     delay_loop 6             # 设置健康检查时间,单位为秒
     lb_algo wrr            # 设置负载调度的算法为wrr
     lb_kind DR            # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
     nat_mask 255.255.255.0 # 子网掩码,这个掩码是VIP的掩码
     persistence_timeout 0        # 同一IP 0秒内的请求都发到同个real server
     protocol TCP # 定义协议
     
     # 后端应用服务器 IP PORT
     real_server 192.168.1.168 8123 { # 指定real server1的ip地址
         weight 3        # 配置节点权值,数值越大权重越高
         TCP_CHECK {
             connect_timeout 10
             nb_get_retry 3
             delay_before_retry 3
         }
     }
 
     # 后端应用服务器 IP PORT
     real_server 192.168.1.146 8123 {
         weight 3
         TCP_CHECK {
             connect_timeout 10
             nb_get_retry 3
             delay_before_retry 3
         }
     }
 }  

第四步,在另外一台 192.168.1.146 上进行操作,

先安装 keepalived ,然后也是进入到配置,修改配置文件。

 global_defs {
     notification_email {
         740610314@qq.com
     }
     notification_email_from sns-lvs@gmail.com
     smtp_server 192.168.1.112
     smtp_connection_timeout 30
     router_id LVS_BACKUP         # 设置lvs的id,在一个网络应该是唯一的
 }
 vrrp_instance VI_1 {
     state BACKUP            # 指定keepalived的角色,MASTER为主,BACKUP为备
     interface eno16780032            # 当前进行vrrp通讯的网络接口卡(当前进行vrrp通讯的网络接口卡)
     virtual_router_id 66        # 虚拟路由编号,主从要一致
     priority 99            # 优先级,数值越大,获取处理请求的优先级越高
     advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         192.168.1.21        # 定义虚拟ip(VIP),可多设,每行一个
     }
 }
 # 定义对外提供的LVS的VIP以及port
 virtual_server 192.168.1.21 8123 {
     delay_loop 6             # 设置健康检查时间,单位为秒
     lb_algo wrr            # 设置负载调度的算法为wrr
     lb_kind DR            # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
     nat_mask 255.255.255.0
     persistence_timeout 0        # 同一IP 0秒内的请求都发到同个real server
     protocol TCP
     real_server 192.168.1.168 8123 { # 指定real server1的ip地址
         weight 3        # 配置节点权值,数值越大权重越高
         TCP_CHECK {
             connect_timeout 10
             nb_get_retry 3
             delay_before_retry 3
         }
     }
     real_server 192.168.1.146 8123 {
         weight 3
         TCP_CHECK {
             connect_timeout 10
             nb_get_retry 3
             delay_before_retry 3
         }
     }
 }    

第五步,主从都启动服务service keepalived start

 

单播配置

如果跨网段了,很可能无法访问到这个IP,比如我的网段是23,这个时候就需要关闭多播,因为数据未返回。一般情况下,上面的配置就已经支持nginx的高可用了。

192.168.1.168 使用如下配置:

 global_defs {
     # 邮件通知配置,发生故障时候通知的人员
     notification_email {
         740610314@qq.com # 定义收件人
     }
     notification_email_from sns-lvs@gmail.com # 定义发件人
     smtp_server 192.168.1.114 # SMTP服务器地址
     smtp_connection_timeout 30
     router_id LVS_MASTER         # 设置lvs的id,在一个网络应该是唯一的,一般不用改,也可以写成每个主机自己的主机名
 }
 vrrp_instance VI_1 {
     state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备
     interface ens192            # 当前进行vrrp通讯的网络接口卡(当前centos的网卡),不知道就用 ifconfig 查一下
     virtual_router_id 66        # 虚拟路由编号,主从要一致
     priority 100            # 优先级,数值越大,获取处理请求的优先级越高
     advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
     authentication { # 通信认证机制,这里是明文认证还有一种是加密认证
         auth_type PASS
         auth_pass 1111 #密钥
     }
     unicast_src_ip 192.168.1.168   #单播的源地址,写本机上的ip即可
     unicast_peer {
         192.168.1.146   #如果有多个主机组成集群,把其它主机ip都写上
     }
     virtual_ipaddress { # 设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了
         192.168.1.21        # 定义虚拟ip(VIP),可多设,每行一个
         # IP/掩码 dev 配置在哪个网卡
         # 192.168.200.16/24 dev eth1
     }
 }

192.168.1.146 上将配置修改为如下:

 global_defs {
     notification_email {
         740610314@qq.com
     }
     notification_email_from sns-lvs@gmail.com
     smtp_server 192.168.1.112
     smtp_connection_timeout 30
     router_id LVS_BACKUP         # 设置lvs的id,在一个网络应该是唯一的
 }
 vrrp_instance VI_1 {
     state BACKUP            # 指定keepalived的角色,MASTER为主,BACKUP为备
     interface eno16780032            # 当前进行vrrp通讯的网络接口卡(当前进行vrrp通讯的网络接口卡)
     virtual_router_id 66        # 虚拟路由编号,主从要一致
     priority 99            # 优先级,数值越大,获取处理请求的优先级越高
     advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     unicast_src_ip 192.168.1.146   #单播的源地址,写本机上的ip即可
     unicast_peer {    #注意:花括号前有空格
         192.168.1.163   #如果有多个主机组成集群,把其它主机ip都写上
     }
     virtual_ipaddress {
         192.168.1.21        # 定义虚拟ip(VIP),可多设,每行一个
     }
 } 

 

常用命令

 // 启动
 service keepalived start (建议用这个)
 systemctl start keepalived
 
 // 停止
 service keepalived stop (备用,有时候关闭不了)
 systemctl stop keepalived (建议用这个)
 
 // 重启
 systemctl restart keepalived
 
 // 查看日志
 tail -f /var/log/messages

至此,nginx的高可用配置完成,注意,当测试的时候,关闭了 keepalived 也可能会有一会负载还生效,但过一会就不行了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章