配置keepalived+LVS_DR

配置keepalived+LVS_DR

一、keepalived主备同时操作

1.检查防火墙和selinux的状态,最好都关了
2.安装软件
yum  install  -y   keepalived    ipvsadm
systemctl enable keepalived                                #设置开机自启动
ipvsadm -C                                                                   #清空转发规则
3.keepalived+lvs_DR,keepalived的主机不需要开启路由转发的功能也可正常工作。
4.Keepalived实现LVS-DR模式调度器的高可用

vim /etc/keepalived/keepalived.conf

global_defs {
  notification_email {
    admin@tarena.com.cn                //设置报警收件人邮箱
  }
  notification_email_from ka@localhost    //设置发件人
  smtp_server 127.0.0.1                //定义邮件服务器
  smtp_connect_timeout 30
  router_id  lvs1                        //设置路由ID号(实验需要修改)
}
vrrp_instance VI_1 {
  state MASTER                             //主服务器为MASTER,备用服务器为BACKUP
  interface eth0                        //定义网络接口
  virtual_router_id 50                    //主辅VRID号必须一致
  priority 100                         //服务器优先级,主备的优先级通常设置的不同
  advert_int 1
  authentication {
    auth_type pass
    auth_pass 1111                       //主辅服务器密码必须一致
  }
  virtual_ipaddress {                   //配置VIP(按需修改)
192.168.4.15    //有的后面这里有更详细的写法
 }   
}


virtual_server 192.168.4.15 80 {           //设置ipvsadm的VIP规则(按需修改)
  delay_loop 6
  lb_algo wrr                          //设置LVS调度算法为wrr,还有别的算法
  lb_kind DR                               //设置LVS的模式为DR
  #persistence_timeout 50
#注意这样的作用是保持连接,开启后,客户端在一定时间内始终访问相同服务器
  protocol TCP
  real_server 192.168.4.100 80 {         //通常real_server的端口跟vip的端口一致,否则可能会报错
    weight 1                             //设置权重为1
    TCP_CHECK {                            //对后台real_server做健康检查
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
  }
 real_server 192.168.4.200 80 {       //设置后端web服务器真实IP(实验需要修改)
    weight 2                          //设置权重为2
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
  }
}
5.开启服务
systemctl start keepalived
ipvsadm -Ln                 #查看LVS规则
 ip  a   s                    #查看VIP设置

6.后续会用到的功能

6.1.更改keepalived的配置文件后,使配置生效的命令
kill -HUP $(cat /var/run/keepalived.pid)
6.2 systemctl stop keepalived.service干不掉keepalived服务,vip也不会漂移的原因

当我们stop掉keepalived服务的时候,发现VIP并没有漂移走,服务也没停掉

ps aux | grep keep 查看keepalived的进程还在

于是我们查看keepalived的service文件
vim  /usr/lib/systemd/system/keepalived.service

KillMode=process的大致意思是当停止keepalived的时候只停掉主进程,而主进程产生的子进程是不会被干掉的,SSH服务就是这个模式。

killmode的默认值是control-group,意思时所有进程都会被干掉,我这里选择把这项注释掉,使用默认参数。

即:注释掉killMode这一行
#KillMode=process

改了service文件需要使用systemctl daemon-reload来重读配置

然后就可以正常使用了。

废了这么多话,其实可以使用systemctl kill keepalived来停掉服务。

6.4脑裂问题的解决(主备机器同时操作)

写一个while循环,每轮ping网关,累计连续失败的次数,当连续失败达到一定次数则运行service keepalived stop关闭keepalived服务。

如果发现又能够ping通网关,再重启keepalived服务。最后在脚本开头再加上脚本是否已经运行的判断逻辑,将该脚本加到crontab里面。

#修改周期性计划任务
crontab -e

#加入循环检测脑裂是否发生的脚本(备注:周期性计划任务服务器重启后依然有效)
*/3 * * * * /bin/bash  检测脚本的绝对路径

check_keep.sh脚本举例:

#!/bin/bash

#设置VIP(这里写错了,应该不是vip应该是网关的Ip地址,自行修改即可,后面ping的应该是网管ip)
VIP=192.168.122.1

#检测服务是否存在
keep_num=`ps aux | grep keepalive  | grep -v grep | wc -l`

#服务存在时,如果ping不通网关就关闭keepalived服务
if [ ${keep_num} -ge 2 ]
then
        ping_num=0
        for i in {1..10}
        do
                ping $VIP -c 3 &>/dev/null
                num=`echo $?`
                let ping_num=ping_num+num
                sleep 5
        done

        if [ ${ping_num} -ge 5 ]
        then
                #关闭keepalived服务
                echo '服务已关闭'
        fi

#服务不存在时,如果可以ping通网关就开启keepalived服务
else
        ping_num=0
        for i in {1..10}
        do
                ping $VIP -c 3 &>/dev/null
                num=`echo $?`
                let ping_num=ping_num+num
                sleep 5
        done

        if [ ${ping_num} -eq 0 ]
        then
                #开启keepalived服务
                echo '开启服务'
        fi
fi

二.把VIP配置到lo:1(所有keepalived配置项里的real_server都操作)

如果某个real_server出故障了会自动从LVS中被去掉,好了会自动加上,全程无需人为处理。

1.检查防火墙和selinux的状态,最好都关了
2.加配置时(按实际修改,不需要创建lo:1的实际配置文件)

vim add_lo_1.sh #运行此脚本,lo:1会自动配置好

#!/bin/bash
VIP=192.168.1.5
echo 1 >  net.ipv4.conf.all.arp_ignore
echo 1 >  net.ipv4.conf.lo.arp_ignore
echo 2 >  net.ipv4.conf.lo.arp_announce
echo 2>  net.ipv4.conf.all.arp_announce
/sbin/ifconfig  lo:1  $VIP  netmask  255.255.255.255  broadcast  $VIP  up
/sbin/route add -host $VIP dev lo:1

ip a s 检查结果

3.删除lo:1的脚本

vim del_lo_1.sh

#!/bin/bash
echo 0 >  net.ipv4.conf.all.arp_ignore
echo 0 >  net.ipv4.conf.lo.arp_ignore
echo 0 >  net.ipv4.conf.lo.arp_announce
echo 0 >  net.ipv4.conf.all.arp_announce
/sbin/ifconfig  lo:1   down

ip a s 检查结果

4.设置开机自动配置好lo:1
chmod +x  add_lo_1.sh

在脚本/etc/rc.d/rc.local(和/etc/rc.local是同一个文件,软链)末尾添加add_lo_1.sh的绝对路径
5.实时检查lo:1,如果消失了自动给加上

ip_check_lo_1_up.sh

#!/bin/bash
VIP=192.168.1.5
check_num=`/usr/sbin/ip addr show | grep $VIP | grep -v grep | wc -l`
if [ $check_num -eq 0 ]
then
加上add_lo_1.sh的绝对路径
fi

设置成周期性计划任务

chmod +x ip_check_lo_1_up.sh

crontab -e

*/15 * * * *   写上 ip_check_lo_1_up.sh的绝对路径
如果对您有帮助,帮忙点个赞加个关注,谢谢!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值