1、环境

两台虚拟机40,41安装Nginx

keepalived vip 端口不通 keepalived配置vip_Nginx应用

2、keepalived简介

Keepalived我的理解是能够为服务器创建虚拟IP,简称VIP。并且能够配置主从模式,如果主机的vip挂掉,那么从节点的vip会立马启动起来,保证vip可用。

2.1、安装

#两台机器同时解压
tar -zxvf keepalived-2.0.0.tar.gz
#进入keepalived目录下
cd keepalived-2.0.0/
#配置安装目录和配置文件目录
./configure --prefix=/usr/local/keepalived --sysconf=/etc  
#安装
make && make install

2.2、修改配置文件

#keepalive目录启动时会默认读取 /etc/keepalived/keepalived.conf 配置文件
vim /etc/keepalived/keepalived.conf

#可以删除原文件所有内容加入以下配置。
#主节点
global_defs {             #全局配置
    router_id VI_1       #表示运行Keepalived服务器的一个标识,唯一的
}

vrrp_instance VI_1 {      #vrrp 实例定义部分
    state MASTER      # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33     # ip addr命令可以查看当前进行vrrp通讯的网络接口卡(当前centos的网卡)
    virtual_router_id 66    # 虚拟路由编号,主从要一致
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.92.100            # 定义虚拟ip(VIP),可多设,每行一个
    }
}

#从节点
global_defs {             #全局配置
    router_id VI_1       #表示运行Keepalived服务器的一个标识,唯一的
}

vrrp_instance VI_1 {        #vrrp 实例定义部分
    state BACKUP            # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33    # ip addr  当前进行vrrp通讯的网络接口卡(当前centos的网卡)
    virtual_router_id 66    # 虚拟路由编号,主从要一致
    priority 50            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.92.100             # 定义虚拟ip(VIP),可多设,每行一个
    }
}

2.3、启动keepalived

#两台机器都启动。
/usr/local/keepalived/sbin/keepalived

2.4、查看nginx运行结果

#主节点 
ip addr
#运行虚拟ip
http://192.168.92.100/
#在从节点上执行命令 ip addr会发现从节点上没有VIP的
#主节点查看keepalived进程并且kill掉
ps -ef | grep keepalived
kill -9 进程名
#到从节点运行命令ip addr 会发现虚拟IP在从节点上

1)主节点运行(40节点) ip addr命令:

keepalived vip 端口不通 keepalived配置vip_nginx_02


2)访问虚拟IP http://192.168.92.100/:

keepalived vip 端口不通 keepalived配置vip_keepalived vip 端口不通_03


3)Kill后用ip addr查看从节点(41节点):

keepalived vip 端口不通 keepalived配置vip_keepalived vip 端口不通_04


4)继续访问虚拟IP:http://192.168.92.100/:

keepalived vip 端口不通 keepalived配置vip_keepalived vip 端口不通_05


5)启动主节点(40节点),VIP又回到了主节点:

/usr/local/keepalived/sbin/keepalived

keepalived vip 端口不通 keepalived配置vip_Nginx高可用_06


2.5、keepalived+shell

防止nginx挂了,服务器没挂,那么keepalived代理虚拟IP存在

#进入目录 
cd /usr/local/nginx/sbin
#编辑shell脚本
vim check_nginx.sh
#给权限
chmod +777 check_nginx.sh

#!/bin/bash
#查询nginx的进程数目
A=`ps -C nginx --no-header |wc -l`
#如果进程数目为0
if [ $A -eq 0 ];then
       #重启nginx
      /usr/local/nginx/sbin/nginx
     #nginx重启失败,则停掉keepalived服务,进行VIP转移
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
             #杀掉,vip就漫游到另一台机器        
              killall keepalived
      fi
fi

1)修改主从节点的keepalived配置文件:

vim /etc/keepalived/keepalived.conf

global_defs {             #全局配置
    router_id VI_1       #表示运行Keepalived服务器的一个标识,唯一的
}
vrrp_script chk_nginx {
    script "/usr/local/nginx/sbin/check_nginx.sh" #心跳执行的脚本
    interval 2                          #(检测脚本执行的间隔,单位是秒)
}
vrrp_instance VI_1 {        #vrrp 实例定义部分
    state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33    # ip addr  当前进行vrrp通讯的网络接口卡(当前centos的网卡)
    virtual_router_id 66    # 虚拟路由编号,主从要一致
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        chk_nginx            #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.92.100            # 定义虚拟ip(VIP),可多设,每行一个
    }
}

2)重启keepalived:

#查看进程
ps -ef | grep keepalived
#杀死进程
Kill -9 xxxx
#重新启动
/usr/local/keepalived/sbin/keepalived
#进入nginx 无论停止掉多少次,nginx依旧会被启动,会发现nginx关不掉了
./nginx -s stop
./nginx -s stop
./nginx -s stop

3)停止nginx命令:

keepalived vip 端口不通 keepalived配置vip_Nginx高可用_07


4)效果:

keepalived vip 端口不通 keepalived配置vip_Nginx高可用_08