07.Nginx高可用

1.Keepalived高可用概述

1.什么是高可用

什么是高可用, 一般指2台机器启动着相同的业务系统,当有一台机器down机了, 另外一台服务器能快速的接管, 对于访问的用户是无感知的。

2.高可用使用场景

那么高可用使用在什么场景,业务系统需要保证7x24小时不DOWN机, 作为业务来说随时都可用, 让你的业务系统更顽强。

2.Keepalived高可用安装

1.环境准备

服务器系统角色外网IP内网IP
CentOS 7.5keepalived-mastereth0:10.0.0.5eth1:172.16.1.5
CentOS 7.5keepalived-slaveeth0:10.0.0.6eth1:172.16.1.6

2.在lb01lb02上分别安装keepalived软件

[root@lb01 ~]# yum install keepalived -y[root@lb02 ~]# yum install keepalived -y

3.配置lb01keepalived-master

[root@lb01 ~]# cat /etc/keepalived/keepalived.confglobal_defs {               
         router_id lb01          
      }
      
vrrp_instance VI_1 {
    state MASTER    interface eth0
    virtual_router_id 51    priority 150    advert_int 1    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {        10.0.0.3/24 dev eth0
    }
}

4.配置lb02keepalived-backup

[root@lb02 ~]# cat /etc/keepalived/keepalived.confglobal_defs {
    router_id lb02
}
      
    vrrp_instance VI_1 {
    state BACKUP    interface eth0
    virtual_router_id 51    priority 100    advert_int 1    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {        10.0.0.3/24 dev eth0
    }
}

5.对比keepalivedmasterbackup配置的区别

Keepalived配置区别Master配置Backup节配置
route_id(唯一标识)route_id lb01route_id lb02
state(角色状态)state Masterstate Backup
priority(竞选优先级)priority 150priority 100

6.启动keepalived

#lb01[root@lb01 ~]# systemctl enable keepalived[root@lb01 ~]# systemctl start keepalived#lb02[root@lb02 ~]# systemctl enable keepalived[root@lb02 ~]# systemctl start keepalived

7.检查keepalived的虚拟IP地址是否漂移

lb01上进行如下操作

# lb01存在vip地址[root@lb01 ~]# ip addr |grep 10.0.0.3
    inet 10.0.0.3/24 scope global secondary eth0# 停止lb01上的keepalived, 检测vip已不存在[root@lb01 ~]# systemctl stop keepalived[root@lb01 ~]# ip addr |grep 10.0.0.3

lb02上进行如下操作

[root@lb02 ~]# ip addr|grep 10.0.0.3
    inet 10.0.0.3/24 scope global secondary eth0

lb01重新启动keepalived,发现地址被重新接管

[root@lb01 ~]# systemctl start keepalived[root@lb01 ~]# ip addr |grep 10.0.0.3
    inet 10.0.0.3/24 scope global secondary eth0

3.Keepalived高可用配置

4.keepalived高可用列脑

由于某些原因,导致两台keepalived高可用服务器在指定时间内,无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器又都还活着。

服务器网线松动等网络故障
服务器硬件故障发生损坏现象而崩溃
备节点开启firewalld防火墙
Nginx服务死掉等

1.可以ping通主,备节点还有VIP就认为列脑

[root@lb02 ~]# cat check_split_brain.sh#!/bin/shlb01_vip=10.0.0.3lb01_ip=10.0.0.5while true;do
    ping -c 2 -W 3 $lb01_ip &>/dev/null    if [ $? -eq 0 -a `ip add|grep "$lb01_vip"|wc -l` -eq 1 ];then
        echo "ha is split brain.warning."
    else
        echo "ha is ok"
    fisleep 5done

2.如果Nginx宕机Keepalived是不会进行切换, 需要写一个脚本检测Nginx的存活状态, 如果不存活则kill nginxkeepalived.

# 编写配置文件[root@lb01 ~]# mkdir /server/scripts[root@lb01 ~]# vim /server/scripts/check_web.sh#!/bin/shwhile true;donginxpid=$(ps -C nginx --no-header|wc -l)if [ $nginxpid -eq 0 ];then
    systemctl start nginx
    sleep 5
    nginxpid=$(ps -C nginx --no-header|wc -l)        
    if [ $nginxpid -eq 0 ];then
        systemctl stop keepalived        exit 1
   fifi
     sleep 5done[root@lb01 ~]# chmod +x /server/scripts/check_web.sh

keepalived配置文件中调用此脚本,lb01lb02都需操作

[root@lb01 ~]# cat /etc/keepalived/keepalived.confglobal_defs {
         router_id LVS_01
      }
vrrp_script check_web {
   script "/server/scripts/check_web.sh"
   interval 2
   weight 50}

vrrp_instance VI_1 {
    state MASTER    interface ens33
    virtual_router_id 51    priority 150    advert_int 1    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {        10.0.0.3/24 dev ens33
    }
    track_script {
    check_web
    }
}

5.keepalived高可用日志

[root@lb01 ~]#sed -i '14 s#KEEPALIVED_OPTIONS="-D"#KEEPALIVED_OPTIONS="-D -d -S 0"#g' /etc/sysconfig/keepalived #指定文件接收Keepalived服务日志[root@lb-node1 conf]# echo -e "local0.* \t /var/log/keepalived.log" >>/etc/rsyslog.conf  #配置至rsyslog[root@lb-node1 conf]# tail -1 /etc/rsyslog.conf  #检查是否配置成功local0.*/var/log/keepalived.log
[root@lb-node1 conf]# /etc/init.d/rsyslog restart  #重新启动rsyslogShutting down system logger:                               [  OK  ]
Starting system logger:                                [  OK  ]


本文 暂无 评论

Top