linux下nginx+keepalived主从双机热备

keepalive,是在TCP中一个可以检测死连接的机制。

keepalive原理很简单,TCP会在空闲了一定时间后发送数据给对方:

1.如果主机可达,对方就会响应ACK应答,就认为是存活的。

2.如果可达,但应用程序退出,对方就发RST应答,发送TCP撤消连接。

3.如果可达,但应用程序崩溃,对方就发FIN消息。

4.如果对方主机不响应ack, rst,继续发送直到超时,就撤消连接。这个时间就是默认的二个小时。

我们这里提供一个VIP来对外提供访问,这个VIP是192.168.100.100,主机192.168.100.61,从机192.168.100.62

首先关闭selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

关闭防火墙并停用开机启动

systemctl stop firewalld.service
systemctl disable firewalld.service

更换阿里云yum源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

更新yum缓存

yum makecache

1.我们直接使用yum安装keepalived

yum install -y keepalived

2.安装Nginx 

tar zxvf  nginx-1.2.5.tar.gz
cd nginx-1.2.5

安装一下相关组件.

yum install -y pcre-devel
./configure --prefix=/usr/local/nginx --user=www --group=www  --with-http_stub_status_module --with-http_ssl_module
make && make install

3.配置keepalive

配置文件位置在/etc/keepalived/keepalived.conf

keepalived的master配置如下

global_defs {
   router_id R1
}
#nginx检测脚本
vrrp_script chk_nginx {
    script "/data/tool/check_nginx.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state MASTER  #master,slave填写BACKUP
    interface eth0  #VIP绑定的网卡名
    virtual_router_id 51 #主从填写一致 VRID
    mcast_src_ip 192.168.100.62 #本机IP
    priority 100 #优先级,主大于从
    advert_int 1 #心跳间隔
    authentication {
        auth_type PASS #主从验证方式
        auth_pass 1111 #主从验证密码
    }
    virtual_ipaddress {
        192.168.100.100/24 #VIP地址
    }
    track_script {
        chk_nginx #调用检测脚本
    }
}

keepalive的从节点配置如下

global_defs {
   router_id R1
}
#nginx检测脚本
vrrp_script chk_nginx {
    script "/data/tool/check_nginx.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP 
    interface eth0
    virtual_router_id 51
    mcast_src_ip 192.168.100.62
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.100/24
    }
    track_script {
        chk_nginx
    }
}

以上就是keepalived基本配置,然后keepalived调用的nginx检测脚本如下

#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
  /usr/local/nginx/sbin/nginx
  sleep 3
  if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
  then
    pkill -f keepalived
  fi
fi

不要忘记给脚本755权限,很多无法自动切换的都是没给执行权限大致的

启动相关服务。我在这儿使用的是nginx ,每个上面开了一个站点,通过IP可以直接访问的。启动keepalive后,就可以通过VIP的虚拟IP 192.168.100.100来访问站点了

{FC37BB03-0E2C-4C16-9C3D-D75AEBD624E7}_20191101155218.jpg

通过 ip addr命令可以看到BACKUP抢到了VIP,我们可以通过停掉从节点的keepalived再进行观察查看VIP是否漂移到MASTER上了。

我们也可以通过以下命令查看VIP绑定状态

tcpdump -i eth0 vrrp -n

{6911E8D5-DFAB-4102-9C2B-203A08D05C9C}_20191101162955.jpg

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/267.html