码迷,mamicode.com
首页 > 其他好文 > 详细

keepalived

时间:2019-12-22 20:31:36      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:inter   地址   单点   判断   不能   备份   interface   怎么   检查   

实践

我自己是先学的网络,在网络里面就有一个协议,我们经常会用到,就是VRRP(虚拟网关冗余协议),后来学了运维之后才知道,keepalived也是通过这个协议实现的高可用。

它的应用范围比较广泛,我们这里是给负载均衡做双机热备,防止单点故障。

环境:

负载均衡1 192.168.80.2
负载均衡2 192.168.80.8

都要安装

yum -y install keepalived

配置文件

配置文件分为三个部分:

  • 全局配置部分

  • VRRP协议配置部分

  • LVS服务管理配置部分

//lb01全局部分
global_defs {
   router_id lb01     #保留这一行就可以了,这个是唯一标识符,就写自己的主机名就可以了不能重复
}

//lb02全局部分
global_defs {
   router_id lb02 
}
//lb01的vrrp部分
vrrp_instance ZH {      #实例名字,随便取,这里是ZH,同一个组保持一致。
    state MASTER        #身份是主
    interface eth0      #虚拟IP出现在哪个网卡上
    virtual_router_id 51 #家庭身份信息,同一个组保持一致。
    priority 150        #更改优先级为150
    advert_int 1        #没用
    authentication {    #认证用的到,很少会用到
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {  #虚拟出的IP地址
        192.168.80.10/24
    }
}
//lb02的vrrp部分
vrrp_instance ZH {      #实例名字,随便取,这里是ZH,同一个组保持一致。
    state BACKUP        #身份是备
    interface eth0      #虚拟IP出现在哪个网卡上
    virtual_router_id 51 #家庭身份信息,同一个组保持一致。
    priority 100        #默认优先级100
    advert_int 1        #没用
    authentication {    #认证用的到,很少会用到
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {  #虚拟出的IP地址
        192.168.80.10/24
    }
}

ip -a查看会出来一个虚拟地址,主有,备没有,主死了,备就有了,默认开启抢占。

异常处理

脑裂问题

出现原因:

高可用备服务器收到不到从服务器发送的组播包,备服务器上会自动生成VIP地址。

备收不到组播包的原因:

出现这种问题出现两种原因:物理层面和软件层面

软件层面:防火墙和selinux

物理层面:心跳线断了就无法通信了,就都想成为主了。

逻辑原因:安全策略原因,防火墙策略,交换机ACL策略

如何解决?

如何解决呢?用监控或用脚本,出现脑裂就发邮件通知。

先解决问题,即使都想成为主,只要关一台的keepalie的服务就可以临时解决,然后后面再分析。

脚本如何编写呢?

只要在备上面过滤到VIP,只要过滤到就说明主出现了异常,就是这么简单,用个if判断一下即可。

/bin/bash
if a s eth0 | grep "192.168.80.10" > /dev/null
if [ $? -eq 0 ]
    echo "keepalived error! " | mail -s "keepaalied !!!" 746620446@qq.com
fi

再写入到定时任务里面,每三分钟看一次就差不多,实时监控的话就要用到while监控,不过,我觉得是范不上。

假如主nginx挂了怎么办?

假如主上的nginx挂了的话,主上的keepalived也没有存在的必要了,而且如果存在的话还会让备认为主还存活着,用户的请求就无法正常的过渡到备上面,这时候就要求当主上的nginx挂了之后,主要主动放弃keeplived的,通过一个小脚本就可以实现了,脚本的名字不要叫nginx哟!不要忘记放入到定时任务里面,不要忘记加执行权限!

#!/bin/bash
num=`ps -ef | grep -c nginx`
if [ $sum -lt 3 ]
then
    systemctl stop keepalived
fi

上述脚本是我们自行编写的,比较简单粗暴,nginx出了毛病立马就停止keepalived,但如果nginx又恢复了呢?恢复了之后是无法自动抢占了,因为keepalived进程已经停止了,其实keepalived已经帮我们想好了解决方法,其实不用关闭掉keepalived,当nginx挂了之后,keepalied自动把把优先级调低一点就好了呀!怎么做呢?这个有点难以理解,不过也不是太难,我们先来准备一个脚本。

#!/bin/bash
num=`ps -ef | grep -c nginx`
if [ $sum -lt 2 ]
then
    exit 1         #nginx挂了之后输出异常1
else
    exit 0         #nginx正常时输出正常0
fi

当权重的值是正数的时候,收到脚本的“正常”信号,优先级=权重+当前优先级,假设当前优先是150,权重是10,那么运行正常的时候真正的优先级是160,如果nginx挂了之后,收到脚本的“异常”信号,优先级保持150不变。

上面的脚本理解了之后,还没完呢?我们要将脚本添加到配置文件,我们还要在主的keepalived的配置文件里面添加一些内容。

// 将这一段放在全局配置和vrrp中间
vrrp_script check_web {             
    script "/server/scripts/check_web.sh"     #脚本要有执行权限
    interval 2    #二秒检查一次
    weight 10
}

//将这段放在VRRP的实例里面
track_script{
    check_web          #调用脚本,当前是主,默认优先级是150
}

nginx正常时脚本向外输出“0”,优先级是150+10=160,当nginx挂掉时脚本向外输入“1”,而优先级会回到150,那备的优先级用155就好了,不能默认100了。

如果备还想保持备的优先级100不变的话,那么主这边就得把权重换成负数,收到脚本的真信号(nginx)正常,优先级保持不变(150),收到脚本的假信号(nginx异常),就得求差,用权重减优先级(10-150=90),这样也可以。

双主模型

我们在防火墙上经常做这种双主的,其实就是互为主备。

一般一个干活,另一个就闲着,那能不能平时两个都干,坏一个,另一个也正常干,这就 双主模型,互相为主备。

A负责www,B为www备份

B负责blog,A为blog的备份

安全问题

只希望用户用VIP,而不希望用用负载均衡的真实地址。修改主的nginx的配置文件,只侦听VIP的80端口,而不侦听IP的80端口,但是只侦听VIP会不生效,可能会报错,如何解决呢?无法绑定VIP,需要修改内核信息。

echo 'net.ipv4.ip_nonlocal_bind = 1' >> /etc/sysctl.conf
sysctl -p
systemctl restart nginx

keepalived

标签:inter   地址   单点   判断   不能   备份   interface   怎么   检查   

原文地址:https://www.cnblogs.com/yizhangheka/p/12080729.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!