keeplived 基础知识总结(1)

keeplived 基础知识总结(1)

越来越多的发现,随着自己对新知识和新技术的学习和”向往“,在面对曾经信手拈来的熟悉的知识,产生了越来越多的陌生和冷漠,在没有跳出层级之前,还是要把手边的知识掌握好,所以,接下来的还是要对手边的技术重新熟悉起来,才好有的放矢。

一、知识回顾
# HA(high availability)高可用是以减少服务中断时间为目的的技术,通过保护业务不间段,降低故障造成的损失。
# 衡量的标准就是通过平均无故障时间,通过运算可用时间在总时长中的比率来确认系统的可维护性,也就产生了“两个9”“三个9”等等衡量标准。
# 高可用之脑裂:当总从两台机器失去对方的联系,即从服务器无法判段主服务器的存活信息后,“自立为王”以后,和主服务器“共同管理”后台服务器的情况。
# 脑裂解决方案:1、增加心跳线;2、编写脚本进行监视和控制。
# 工作原理:vrrp虚拟路由冗余协议,将几台相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上有一个对外服务器的vip(虚拟ip),master会发组播,放backup收不到vrrp的包时就认为master宕机,根据vrrp的优先级来选举backup成为master,vip也随之漂移到新master上去。
# 组播地址:d类244.0.0.n段ip地址。
二、应用搭建
[root@init-02 ~]# yum -y install keepalived
[root@init-03 ~]# yum -y install keepalived
# keepalived有三个模块分别是core、check和vrrp。
# core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
# check负责健康检查,包括常见的各种检查方式。
# vrrp模块是来实现VRRP协议的。
[root@init-02 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
 router_id 1                            # 设备在组中的标识,设置不一样即可
 }

#vrrp_script chk_nginx {                # 健康检查
# script "/etc/keepalived/ck_ng.sh"     # 检查脚本
# interval 2                            # 检查频率.秒
# weight -5                             # priority减5
# fall 3                                # 失败三次
# }

vrrp_instance VI_1 {                    # 组号VI_1。实例名两台路由器相同。
    state MASTER                        # 主或者从状态MASTER/BACKUP
    interface ens33                     # 监控网卡
    mcast_src_ip 192.168.253.129        # 心跳源IP
    virtual_router_id 55                # 虚拟路由编号,主备要一致。
    priority 100                        # 优先级
    advert_int 1                        # 心跳间隔默认秒为单位

    authentication {                    # 秘钥认证(1-8位)
        auth_type PASS
        auth_pass 123456
    }

    virtual_ipaddress {                 # VIP
    192.168.253.110/24
        }

#  track_script {                       # 引用脚本
#       chk_nginx
#    }
[root@init-02 ~]# scp -r /etc/keepalived/keepalived.conf  192.168.253.130:/etc/keepalived/
[root@init-03 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
 router_id 2                            # 设备在组中的标识,设置不一样即可
 }

#vrrp_script chk_nginx {                # 健康检查
# script "/etc/keepalived/ck_ng.sh"     # 检查脚本
# interval 2                            # 检查频率.秒
# weight -5                             # priority减5
# fall 3                                # 失败三次
# }

vrrp_instance VI_1 {               #VI_1。实例名两台路由器相同。同学们要注意区分。
    state BACKUP                        # 主或者从状态
    interface ens33                     # 监控网卡
    mcast_src_ip 192.168.253.130        # 心跳源IP
    virtual_router_id 55                # 虚拟路由编号,主备要一致。同学们注意区分
    priority 90                         # 优先级
    advert_int 1                        # 心跳间隔

    authentication {                    # 秘钥认证(1-8位)
        auth_type PASS
        auth_pass 123456
    }

    virtual_ipaddress {                 # VIP
    192.168.253.110/24
        }

#  track_script {                       # 引用脚本
#       chk_nginx
#    }

}
[root@init-02 ~]# systemctl restart keepalived.service && systemctl enable keepalived.service
[root@init-03 ~]# systemctl restart keepalived.service && systemctl enable keepalived.service
[root@init-02 ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
[root@init-03 ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
[root@init-02 ~]# yum -y install nginx
[root@init-03 ~]# yum -y install nginx
[root@init-02 ~]# systemctl enable nginx.service && systemctl restart nginx.service
[root@init-03 ~]# systemctl enable nginx.service && systemctl restart nginx.service
[root@init-02 ~]# echo init-02 > /usr/share/nginx/html/index.html
[root@init-03 ~]# echo init-03 > /usr/share/nginx/html/index.html
[root@init-02 ~]# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:e5:84:37 brd ff:ff:ff:ff:ff:ff
    inet 192.168.253.129/24 brd 192.168.253.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.253.110/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::3038:9a4f:bf64:5855/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
# 现在虚拟ip已经在这台主机上了,也就是说现在访问虚拟ip得到的是当前主机的nginx界面
# 测试可用性,通过window对虚拟ip进行访问测试

# 将当前主机init-02干掉,vip会漂移到init-03上
[root@init-03 ~]# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:e1:28:b7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.253.130/24 brd 192.168.253.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.253.110/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::25b7:81a2:af9d:e4e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
# 通过访问vip获得init-03nginx内index.html

# 小结: keepalived是通过vrrp协议来实现的,组内部服务器通过发送组播获取其他服务状态信息的,也就是说只适用于监控主机状况,而无法监控应用状况.
# 虽然keepalived无法监控应用状态,但本身允许嵌套脚本,可以通过脚本的方式,达成用keepalived嵌套脚本的方式监控应用状态,并作出相应的反应。
[root@init-03 ~]# vim /etc/keepalived/ck_ng.sh
#!/usr/bin/bash
number=$(ps -C nginx --no-heading | wc -l )
if [ "${number}" = 0 ] ;then
  systemctl restart nginx
  sleep 5
    if [ "$number" = 0  ] ;then
      systemctl stop keepalived
    fi
fi
[root@init-03 ~]# chmod +x /etc/keepalived/ck_ng.sh 
[root@init-03 ~]# ll /etc/keepalived/ck_ng.sh
-rwxr-xr-x 1 root root 200 Mar 26 21:28 /etc/keepalived/ck_ng.sh
[root@init-03 ~]# scp -r /etc/keepalived/ck_ng.sh  192.168.253.129:/etc/keepalived/
root@192.168.253.129's password: 
ck_ng.sh                                                               100%  200    55.9KB/s   00:00    
[root@init-03 ~]# vim /etc/keepalived/keepalived.conf 
# 去掉注释,启用check模块,其他模块不进行改动,下面是需要修改的部分
vrrp_script chk_nginx {                # 健康检查
 script "/etc/keepalived/ck_ng.sh"     # 检查脚本
 interval 2                            # 检查频率.秒
 weight -5                             # priority减5
 fall 3                                # 失败三次
 }
 
  track_script {                       # 引用脚本名称
       chk_nginx
    }   
}
# 同理对另外一台机器进行此操作。
# 操作结束后,需要对keepalived重启,加载配置项,使其生效!!!
[root@init-02 ~]# systemctl restart keepalived.service
[root@init-03 ~]# systemctl restart keepalived.service
# 这样这个需求才完成,我们尝试关停nginx服务进行测试,查看nginx的状态和页面访问情况。
# 运行良好,本次实验结束。
# 总结:keepalived内部嵌套脚本的方式,实现通过应用状态来保证业务的正常运行,保证了业务的高可用性,原理简单,甚至可以不使用内部嵌套脚本的方式,而使用cron+shell的方式来是实现这一功能,但是终究这样的配置更灵活更系统。另注:在满足功能的前提下,脚本越简单越好,脚本的执行时间过长,也会令其失去意义。
posted @ 2022-03-26 22:08  Tanuki_11  阅读(54)  评论(0)    收藏  举报