Linux 下安装keepalived,并完成配置

  • 一、下载keepalived 2.1.5
  • 二、安装
  • 1、上传文件到linux
  • 2、解压文件并安装keepalived
  • 3、编写检测nginx是否正常运行的脚本文件
  • 4、编写keepalived.conf 配置文件
  • 5、启动keepalived
  • 6、验证keepalived
  • 7、设置开机自运行
  • 三、主备漂移验证
  • 1、安装及配置备机
  • 2、验证vip是否进行漂移
  • (一)主机宕机,vip转向备机
  • (二)主机恢复,vip被主机夺回,转向主机
  • 四、如何配置主机恢复后不抢回vip?


一、下载keepalived 2.1.5

官网:https://www.keepalived.org/download.html

keepalived 虚拟ip路由 keepalived配置虚拟ip_keepalived 虚拟ip路由

二、安装

1、上传文件到linux

用FileZilla Client将keepalived-2.1.5.tar.gz上传到linux上,目录/usr/local/java/keepalived/(这个目录可以自己选择)

2、解压文件并安装keepalived

cd 到 /usr/local/java/keepalived/ 目录下,输入 tar -zxvf keepalived-2.1.5.tar.gz 指令进行解压

tar -zxvf keepalived-2.1.5.tar.gz

进入keepalived-2.1.5,并完成配置安装

cd keepalived-2.1.5
./configure  --prefix=/usr/local/keepalived

等待配置进行安装完后,运行真正的安装

make && make install

复制文件到/etc/keepalived/
(keepalived默认是读取/etc/keepalived/下的keepalived.conf)

mkdir /etc/keepalived/
# 复制keepalived.conf
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
#复制系统相关文件
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# 复制启动类文件,这个是在keepalived解压出来的源码包里面,位置不一样
#(1.4以后都是在解压里面,1.4以前是在/usr/local/keepalived下面rc.d文件夹里面)
cp /usr/local/java/keepalived/keepalived-2.1.5/keepalived/etc/init.d/keepalived /etc/init.d/

3、编写检测nginx是否正常运行的脚本文件

cd /etc/keepalived/
vi nginx_check.sh

编写nginx_check.sh脚本,输入以下脚本代码

#! /bin/bash
A=`ps -C nginx --no-header |wc -l`
#echo $A
if [ $A -eq 0 ];then
    echo 'nginx not running, stop keepalived!'
    systemctl stop keepalived
fi

wq!保存并退出
这里一定要注意的是头部一定要有#! /bin/bash,不然keepalived运行脚本的时候会执行不下去,提示:
Error exec-ing command ‘/etc/keepalived/nginx_check2.sh’, error 8: Exec format error
可以运行 tail -f /var/log/messages 指令查看错误提示是什么

将文件设置为可执行文件

chmod 777 nginx_check.sh 
#chmod +x nginx_check.sh  也可以

4、编写keepalived.conf 配置文件

查看本机的ip信息
(有的可以输入ifconfig)

#用ifconfig也可以
ip a

keepalived 虚拟ip路由 keepalived配置虚拟ip_优先级_02

注意本机网卡的名字:ens33,后面配置的时候会用到

在keepalived.conf里面输入以下脚本代码,路径:/etc/keepalived/下

! Configuration File for keepalived

global_defs {
  #路由id,主备节点不能相同
  router_id node1
}

#自定义监控脚本
vrrp_script chk_haproxy {
  # 脚本位置
  script "/etc/keepalived/nginx_check.sh"
  # 脚本执行的时间间隔
  interval 1
  weight 0
  
}

vrrp_instance VI_1 {
    # Keepalived的角色,MASTER 表示主节点,BACKUP 表示备份节点
    state MASTER
    # 指定监测的网卡,可以使用 ifconfig 或 ip a 进行查看
    interface ens33
    # 虚拟路由的id,主备节点需要设置为相同
    virtual_router_id 51
    # 优先级,主节点的优先级需要设置比备份节点高
    priority 100
    # 设置主备之间的检查时间,单位为秒
    advert_int 1
    # 定义验证类型和密码
    authentication {
        auth_type PASS
        auth_pass 1111
    }
  
    # 虚拟IP地址,可以设置多个
    virtual_ipaddress {
        192.168.0.242
        #192.168.200.17
        #192.168.200.18
    }
    
   # 调用上面自定义的监控脚本
    track_script {
       chk_haproxy
    }

}

这里要注意的是监控脚本的名字是否一致,既vrrp_script 和track_script里面的的方法是否一致(这里是chk_haproxy),还有脚本位置script 的路径是否正确

5、启动keepalived

这里要先保证nginx是已经启动的,不然keepalived启动了以后会执行脚本发现nginx没启动会运行脚本停止掉keepalived

#启动
 service keepalived start
 #停止
 #service keepalived stop
 #查看状态
 #service keepalived status

查看状态

service keepalived status

keepalived 虚拟ip路由 keepalived配置虚拟ip_linux_03


active (running) 说明正在运行

查看keepalived启动的情况

ps -ef | grep keepalived

keepalived 虚拟ip路由 keepalived配置虚拟ip_优先级_04

6、验证keepalived

启动后查看ip

#用ifconfig也可以
ip a

keepalived 虚拟ip路由 keepalived配置虚拟ip_自定义_05


看这里已经添加了 192.168.0.242的VIP

在网页里面输入http://192.168.0.242/

keepalived 虚拟ip路由 keepalived配置虚拟ip_keepalived 虚拟ip路由_06

访问到的了243的nginx,说明已经成功安装

7、设置开机自运行

不用设置,上面复制到init.d的时候,已经是设置为开机自运行了

三、主备漂移验证

1、安装及配置备机

备机的安装和主机一样,这里不做累述,配置的时候只要做一些改动就可以了。备机的keepalived.conf内容如下:

! Configuration File for keepalived

global_defs {
  #路由id,主备节点不能相同
  router_id node2
}

#自定义监控脚本
vrrp_script chk_haproxy {
  # 脚本位置
  script "/etc/keepalived/nginx_check.sh"
  # 脚本执行的时间间隔
  interval 1
  weight 0
  
}

vrrp_instance VI_1 {
    # Keepalived的角色,MASTER 表示主节点,BACKUP 表示备份节点
    state BACKUP
    # 指定监测的网卡,可以使用 ifconfig 或 ip a 进行查看
    interface ens33
    # 虚拟路由的id,主备节点需要设置为相同
    virtual_router_id 51
    # 优先级,主节点的优先级需要设置比备份节点高
    priority 90
    # 设置主备之间的检查时间,单位为秒
    advert_int 1
    # 定义验证类型和密码
    authentication {
        auth_type PASS
        auth_pass 1111
    }
  
    # 虚拟IP地址,可以设置多个
    virtual_ipaddress {
        192.168.0.242
        #192.168.200.17
        #192.168.200.18
    }
    
   # 调用上面自定义的监控脚本
    track_script {
       chk_haproxy
    }

}

2、验证vip是否进行漂移

现在配置的ip情况为:
192.168.0.243(主)
192.168.0.245(备)
192.168.0.242(vip/漂移ip)

(具体ip可根据自己来进行配置)
注:如果修改了配置,发现漂移不生效的,重启一下linux系统再试一次

(一)主机宕机,vip转向备机

1、先查看主机的ip情况

ip a

keepalived 虚拟ip路由 keepalived配置虚拟ip_自定义_07


此时看到vip(192.168.0.242)还在主机那里

1、关掉主机(192.168.0.243)的keepalived,并查看主机ip情况

service keepalived stop

ip a

keepalived 虚拟ip路由 keepalived配置虚拟ip_优先级_08


此时看到vip(192.168.0.242)已经不在主机那里2、查看备机(192.168.0.245)的ip情况

ip a

keepalived 虚拟ip路由 keepalived配置虚拟ip_linux_09


此时看到vip已经转移到了245那台备机上了,网页上访问vip(192.168.0.242),

keepalived 虚拟ip路由 keepalived配置虚拟ip_linux_10


可以看到访问已经从原来的243转移到245上面了

(二)主机恢复,vip被主机夺回,转向主机

1、恢复主机的keepalived,并查看ip

service keepalived start

ip a

keepalived 虚拟ip路由 keepalived配置虚拟ip_keepalived 虚拟ip路由_11


可以看到vip被主机夺回来了

然后查看备机的ip,发现没有vip,网页上访问vip(192.168.0.242),这时候又跳转回了243上面去了。这里就不截图了。

四、如何配置主机恢复后不抢回vip?

只需要将两台机器都设置为备机就行了,并且在优先级高的keepalived上添加nopreempt

keepalived.conf配置如下:

! Configuration File for keepalived

global_defs {
   
  #路由id,主备节点不能相同
  router_id node1
}

#自定义监控脚本
vrrp_script chk_haproxy {
  # 脚本位置
  script "/etc/keepalived/nginx_check.sh"
  # 脚本执行的时间间隔
  interval 1
  weight 0
  
}

vrrp_instance VI_1 {
   #优先级较高的keepalived,添加此配置解决异常恢复后再次抢占的问题
    nopreempt
    # Keepalived的角色,MASTER 表示主节点,BACKUP 表示备份节点
    state BACKUP
    # 指定监测的网卡,可以使用 ifconfig 进行查看
    interface ens33
    # 虚拟路由的id,主备节点需要设置为相同
    virtual_router_id 51
    # 优先级,主节点的优先级需要设置比备份节点高
    priority 100
    # 设置主备之间的检查时间,单位为秒
    advert_int 1
    # 定义验证类型和密码
    authentication {
        auth_type PASS
        auth_pass 1111
    }
  
    # 虚拟IP地址,可以设置多个
    virtual_ipaddress {
        192.168.0.242
        #192.168.200.17
        #192.168.200.18
    }
    
   # 调用上面自定义的监控脚本
    track_script {
       chk_haproxy
    }

}