配置keepalived,实现虚拟IP切换

keepalived配置

1、安装

1.1、源码编译安装最新版本【推荐使用】

#安装包下载
wget https://keepalived.org/software/keepalived-2.2.7.tar.gz

#若证书过期
wget https://keepalived.org/software/keepalived-2.2.7.tar.gz --no-check-certificate

#安装编译源码所需依赖
yum -y install gcc openssl-devel libnfnetlink-devel libnl libnl-devel popt-devel  gcc make

# 解压至 /opt 目录下
tar -zxvf keepalived-2.2.7.tar.gz -C /opt

# 进入源码包
cd /opt/keepalived-2.2.7/

# 编译安装,-j 后面的参数是CPU核心数,根据自己机器的CPU核心数指定
./configure && make -j 2 && make install

# 把 keepalived的启动文件复制到init.d下,加入开机启动项
cp /opt/keepalived-2.2.7/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/

# 复制启动服务至 /etc/sysconfig/
cp -r /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

#把 keepalived 加入系统命令目录
cp /usr/local/sbin/keepalived /usr/sbin/

# 创建 keepalived 配置文件夹
mkdir /opt/keepalived

2、生成检测脚本

用于检测服务是否宕机,如果服务宕机则停止 keepalived 服务,将主节点转移到另一台机器上面

目前的检测手段是检测相关进程是否存在(此处检测postgresql服务,可以根据实际需求替换)

cat << \EOF >  /opt/keepalived/check.sh
#!/bin/sh

num=`ps -ef | grep  postgresql.service | grep -v grep | wc -l`
# $? -ne 不存在 0     $? -eq 0 存在
if [ $num -eq 0 ]
then
    systemctl stop keepalived
fi

EOF

2.1 修改脚本权限

chmod 744 /opt/keepalived/check.sh

4、修改配置文件

主节点需要执行如下命令

cat <<\EOF >/opt/keepalived/keepalived.conf

# 全局参数
global_defs {
   # 脚本执行用户
   script_user root
   enable_script_security
}

# 健康检查脚本,检查Haproxy状态,脚本返回0正常,返回非0失败,失败后节点降级 weight -15
# 名字自定义
vrrp_script maint-checkHaproxy {
    script "/opt/keepalived/check.sh"
    interval 3 # 检查间隔3秒
    weight -15 # 降低本节点权重
    fall 2   # 2次失败算失败
    rise 2   # 2次成功算成功
    timeout 2  # 超时
}
#根据需求添加检测脚本,注意路径,脚本需要有可执行权限
vrrp_script check_pgsql {
    script "/usr/a/scripts/check_pgsql.sh"
    # 脚本执行的间隔(单位是秒)。默认为1s。
    interval 3
    # 当脚本调整优先级,从 -254 到 254。默认为2。
    # 1. 如果脚本执行成功(退出状态码为0),weight大于0,则priority增加。
    # 2. 如果脚本执行失败(退出状态码为非0),weight小于0,则priority减少。
    # 3. 其他情况下,priority不变。
    weight -20
    # 当脚本执行成功到设定次数时,才认为是成功。
    # rise 1
    # 当脚本执行失败到设定次数时,才认为是失败。
    # fall 3
    user i2runner i2runner
}

# 实例1,名字自定义
vrrp_instance Vs_1 {
    state BACKUP # 定义节点主/备,主MASTER,备BACKUP,这里2个节点均为BACKUP
    interface ens33 # 服务IP绑定的网卡
    virtual_router_id 45 # 集群号,所有节点需要相同
    priority 100 # 权重,weight -15 降低权重值,2个节点权重一致,降低权重后会发生切换
    advert_int 1 # 检测间隔

    # 抢占模式,(nopreempt非抢占模式),配置为抢占模式时,当节点权重降低时,另外一个高权重节点会抢占服务,发生切换;
    # 如果为非抢占模式,上面配置的检查脚本在检查到服务失败后,降低权重,但是不会发生切换。
    !nopreempt

    authentication {
        auth_type PASS
        auth_pass 1888 # 各节点密码一致
    }

    #开启邮件通知
    smtp_alert

    # 单播模式
    # keepalived在组播模式下所有的信息都会向224.0.0.18的组播地址发送,产生众多的无用信息,并且会产生干扰和冲突,所以需要改为单播。
    # 这是一种安全的方法,避免局域网内有大量的keepalived造成虚拟路由id的冲突。
    # 单播模式需要关闭vrrp_strict,严格遵守vrrp协议这个选项
    # 需要在VIP实例配置段加入单播的源地址和目标地址
    # 在全局配置中global_defs那一段,不能配置vrrp_strict参数,如果有需注释。
    # 否则会因为不是组播而无法启动keepalived

    unicast_src_ip 186.30.99.155 # 本端,源地址
    unicast_peer {
        186.30.99.156 # 对端,目标地址
    }

    virtual_ipaddress {
       186.30.99.180
    }

    track_script {
        maint-checkHaproxy # 健康检查脚本,与上面同名;如果不配置也可以,就不检查状态。
    }

    track_interface {
        ens33 # 检查网卡健康
    }
    
}
EOF

从节点执行,与主节点的区别在于本端和对端的修改

cat <<\EOF >/opt/keepalived/keepalived.conf

# 全局参数
global_defs {
   # 脚本执行用户
   script_user root
   enable_script_security
}

# 健康检查脚本,检查Haproxy状态,脚本返回0正常,返回非0失败,失败后节点降级 weight -15
# 名字自定义
vrrp_script maint-checkHaproxy {
    script "/opt/keepalived/check.sh"
    interval 3 # 检查间隔3秒
    weight -15 # 降低本节点权重
    fall 2   # 2次失败算失败
    rise 2   # 2次成功算成功
    timeout 2  # 超时
}

# 实例1,名字自定义
vrrp_instance Vs_1 {
    state BACKUP # 定义节点主/备,主MASTER,备BACKUP,这里2个节点均为BACKUP
    interface ens33 # 服务IP绑定的网卡
    virtual_router_id 45 # 集群号,所有节点需要相同
    priority 100 # 权重,weight -15 降低权重值,2个节点权重一致,降低权重后会发生切换
    advert_int 1 # 检测间隔

    # 抢占模式,(nopreempt非抢占模式),配置为抢占模式时,当节点权重降低时,另外一个高权重节点会抢占服务,发生切换;
    # 如果为非抢占模式,上面配置的检查脚本在检查到服务失败后,降低权重,但是不会发生切换。
    !nopreempt

    authentication {
        auth_type PASS
        auth_pass 1888 # 各节点密码一致
    }

    #开启邮件通知
    smtp_alert

    # 单播模式
    # keepalived在组播模式下所有的信息都会向224.0.0.18的组播地址发送,产生众多的无用信息,并且会产生干扰和冲突,所以需要改为单播。
    # 这是一种安全的方法,避免局域网内有大量的keepalived造成虚拟路由id的冲突。
    # 单播模式需要关闭vrrp_strict,严格遵守vrrp协议这个选项
    # 需要在VIP实例配置段加入单播的源地址和目标地址
    # 在全局配置中global_defs那一段,不能配置vrrp_strict参数,如果有需注释。
    # 否则会因为不是组播而无法启动keepalived

    unicast_src_ip 186.30.99.156 # 本端,源地址
    unicast_peer {
        186.30.99.155 # 对端,目标地址
    }

    virtual_ipaddress {
       186.30.99.180
    }

    track_script {
        maint-checkHaproxy # 健康检查脚本,与上面同名;如果不配置也可以,就不检查状态。
    }

    track_interface {
        ens33 # 检查网卡健康
    }
    
}
EOF

5、防火墙配置

为了防止防火墙阻止了 vrrp 组包发送开启vrrp 协议

主备都运行下面的命令

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --protocol vrrp -j ACCEPT
firewall-cmd --reload

6、启动 keepalived

# 修改默认配置文件的位置
vim /usr/local/etc/sysconfig/keepalived
# 修改路径为自己配置的路径
KEEPALIVED_OPTIONS="-f /opt/keepalived/keepalived.conf -D -S 0"
systemctl start keepalived
systemctl enable keepalived

7、检查虚拟IP是否正常运行

ens33 为虚拟IP设置的网卡名称,

[root@PG-Node1 ~]# ip addr | grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 186.30.99.155/20 brd 186.30.99.255 scope global noprefixroute ens33
    inet 186.30.99.180/32 scope global ens33

inet 186.30.99.180/32 为我们设置的虚拟IP

8、测试

停止服务看虚拟IP是否会切换到另一台机器

systemctl stop postgresql.service

通过 ip addr | grep ens33 判断是否切换成功

主节点:

[root@localhost keepalived-2.2.7]# ip addr | grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 186.30.99.155/20 brd 186.30.99.255 scope global noprefixroute ens33

从节点:

[root@localhost keepalived-2.2.7]# ip addr | grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 186.30.99.156/20 brd 186.30.99.255 scope global noprefixroute ens33
    inet 186.30.99.180/32 scope global ens33
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在OpenStack中实现keepalived虚拟IP,需要进行以下配置: 1. 安装keepalived软件包:在每个集群节点中安装keepalived软件包。 2. 配置keepalived:在每个集群节点中配置keepalived,包括虚拟IP地址、优先级、监控端口等。 3. 配置虚拟IP地址:在OpenStack中配置虚拟IP地址,使其与keepalived配置虚拟IP地址相同。 4. 配置集群节点IP地址:在OpenStack中配置每个集群节点的IP地址,使其与keepalived配置IP地址相同。 以下是一个示例配置文件: ``` vrrp_script chk_haproxy { script "/usr/bin/killall -0 haproxy" interval 2 weight 2 } vrrp_instance haproxy_vip { interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass mypassword } virtual_ipaddress { 10.0.0.100/24 } track_script { chk_haproxy } } ``` 在上述示例中,配置了一个名为haproxy_vip的vrrp_instance,其虚拟路由器ID为50,虚拟IP地址为10.0.0.100/24,优先级为100,使用密码验证。同时,还配置了一个名为chk_haproxy的vrrp_script,用于监控Haproxy进程是否正常运行。如果haproxy进程不正常,就会引发故障转移,将虚拟IP地址切换到另一个节点上。 在OpenStack中,还需要配置每个节点的IP地址和虚拟IP地址。可以使用Neutron服务来配置这些网络设置。例如,可以使用以下命令创建一个名为my-network的网络: ``` $ openstack network create my-network ``` 然后,可以使用以下命令创建一个名为my-subnet的子网,并将其分配给my-network: ``` $ openstack subnet create --network my-network --subnet-range 10.0.0.0/24 my-subnet ``` 接下来,可以使用以下命令创建一个名为my-router的路由器,并将其连接到my-subnet: ``` $ openstack router create my-router $ openstack router add subnet my-router my-subnet ``` 最后,在每个节点上使用以下命令配置IP地址: ``` $ sudo ip addr add 10.0.0.101/24 dev eth0 ``` 在完成上述配置后,就可以使用keepalived实现虚拟IP地址的故障转移了。如果其中一个节点故障,keepalived会自动将虚拟IP地址切换到另一个节点上,确保服务的高可用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值