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来访问站点了
通过 ip addr命令可以看到BACKUP抢到了VIP,我们可以通过停掉从节点的keepalived再进行观察查看VIP是否漂移到MASTER上了。
我们也可以通过以下命令查看VIP绑定状态
tcpdump -i eth0 vrrp -n