KeepAlived的相关配置

KeepAlived 配置

参考帮助
        man keepalived.conf
    配置文件组件部分:
        top hierachy(层次)
            global configuration
                Global definitions
                Static routes/addresses
            vrrpd configuration
                VRRP synchronization group(s) :vrrp 同步组
                VRRP instance(s) :即一个vrrp虚拟路由器
            lvs configuration
                Virtual server group(s)
                Virtual server(s):ipvs 集群的vs和rs
    配置语法:
        配置虚拟路由器:
            vrrp_instance <STRING> {
                ....
            }
        专用参数:
            state MASTER|BACKUP :   当前节点在此虚拟路由器上的初始状态,只能有一个是MASTER ,余下的都应该为BACKUP
            interface IFACE_NAME :  绑定为当前虚拟路由器使用的物理接口
            virtual_router_id VRID :    当前虚拟路由器唯一标识,范围是0-255
            priority 100 :  当前物理节点在此虚拟路由器中的优先级;范围1-254
            advert_int 1 :  vrrp 通告的时间间隔,默认1s
        认证机制
            authentication { 
                auth_type AH|PASS   ##认证类型
                auth_pass <PASSWORD>    ##仅前8 位有效
            }
        虚拟IP
            virtual_ipaddress { 
                <IPADDR> / <MASK>  brd  <IPADDR>  dev  <STRING>  scope <SCOPE> label <LABEL>
                192.168.200.17/24 dev eth1
                192.168.200.18/24 dev eth2 label eth2:1
            }
        配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
            track_interface { 
                eth0
                eth1
                …
            }
        nopreempt :
            定义工作模式为非抢占模式
        preempt_delay 300 :
            抢占式模式,节点上线后触发新选举操作的延迟时长,默认模式
        定义通知脚本:
            notify_master <STRING>|<QUOTED-STRING>: :
                当前节点成为主节点时触发的脚本
            notify_backup <STRING>|<QUOTED-STRING>: :
                当前节点转为备节点时触发的脚本
            notify_fault <STRING>|<QUOTED-STRING>: :
                当前节点转为“失败”状态时触发的脚本
            notify <STRING>|<QUOTED-STRING>: :
                通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知

KeepAlived单主配置示例

单主配置示例:
        ! Configuration File for keepalived
        global_defs {
            notification_email {                            #发送通知邮件的地址
                root@localhost
            }     ##邮件服务器配置
            notification_email_from keepalived@localhost    #邮件来自于谁
            smtp_server 127.0.0.1                           #邮件服务器地址
            smtp_connect_timeout 30
            router_id node1                                 # 主机名,在另一结点为node2,当前路由器设备id,通常为主机名,非必须
            vrrp_mcast_group4 224.0.100.100                 # 加一个多播地址,用于主master向这个多播地址发送信息,证明自己还活着,
                                                                                      当主master坏了的时候,多个从路由器向这个多播地址内发送信息,
                                                                                  通过比较优先级选举出来一个master做为主来代替坏了的master工作。
                                             #如果没有指定这里使用224.0.0.18
        }
        vrrp_instance VI_1 {
            state MASTER            #在另一个结点上为BACKUP,当物理设备在虚拟路由器设备中的状态
            interface eth0            #绑定为当前虚拟路由器使用的物理接口
            virtual_router_id 6      #多个节点唯一标识符,必须相同,范围0-255
            priority 100                #当前物理节点在此虚拟路由器中的优先级,范围为1-254,在另一个结点上为90
            advert_int 1               #通告间隔1s
            authentication {         #认证机制
                auth_type PASS       #预共享密钥认证,PASS或AH认证,AH不知道就不建议用,最长8位。
                auth_pass 571f97b2   #仅前8位有效,可以用openssl rand -hex 4 取个随机数
            }
            virtual_ipaddress {
                172.18.100.66/16 dev eth0 label eth0:0    #vip地址
            }
            track_interface {         #配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
                eth0                  #定义要监控的接口,如果interface挂了,可以通过其他地址对外通信,通告是一个端口,对外服务的是另一个端口。
            }
        }
        #nopreemt      #是否抢占,默认为不抢占,只允许backup抢占。

KeepAlived 双主配置

双主模型示例:
        ! Configuration File for keepalived
        global_defs {
            notification_email {
                root@localhost
            }
            notification_email_from keepalived@localhost
            smtp_server 127.0.0.1
            smtp_connect_timeout 30
            router_id node1
            vrrp_mcast_group4 224.0.100.100
        }
        vrrp_instance VI_1 {
            state MASTER
            interface eth0
            virtual_router_id 6
            priority 100
            advert_int 1
            authentication {
                auth_type PASS
                uth_pass 571f97b2
            }
            virtual_ipaddress {
                172.16.0.10/16 dev eth0
            }
        }
        vrrp_instance VI_2 {
            state BACKUP
            interface eth0
            virtual_router_id 8
            priority 98
            advert_int 1
            authentication {
                auth_type PASS
                auth_pass 578f07b2
            }
            virtual_ipaddress {
                172.16.0.11/16 dev eth0
            }
        }

脚本的调用方法

notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"

通知脚本

#!/bin/bash
        #
        contact='root@localhost'
        notify() {
            mailsubject="$(hostname) to be $1, vip floating(流动)"
            mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
            echo "$mailbody" | mail -s "$mailsubject" $contact
        }
        case $1 in
        master)
            notify master
            ;;
        backup)
            notify backup
            ;;
        fault)
            notify fault
            ;;
        *)
            echo "Usage: $(basename $0) {master|backup|fault}"
            exit 1
            ;;
        esac

KeepAlived 支持IPVS

虚拟服务器配置参数:
        virtual_server IP port | virtual_server fwmark int
        {
            ...
            real_server {
            ...
            }
            ...
        }
    常用参数
        delay_loop <INT> :  服务轮询的时间间隔
        lb_algo rr|wrr|lc|wlc|lblc|sh|dh :  定义调度方法
        lb_kind NAT|DR|TUN :    集群的类型
        persistence_timeout <INT> : 持久连接时长
        protocol TCP :  服务协议,仅支持TCP
        sorry_server <IPADDR> <PORT> :  所有RS故障时,备用服务器地址
        real_server <IPADDR> <PORT> RS地址和端口
        {
            weight <INT>    RS 权重
            notify_up <STRING>|<QUOTED-STRING>  RS 上线通知脚本
            notify_down <STRING>|<QUOTED-STRING>    RS 下线通知脚本
            HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... } :  定义当前主机的健康状态检测方法
          }

KeepAlived 配置检测

HTTP_GET|SSL_GET    应用层检测
        HTTP_GET|SSL_GET {
                url {
                    path <URL_PATH> :   定义要监控的URL
                    status_code <INT> : 判断上述检测机制为健康状态的响应码
                    digest <STRING> :   判断为健康状态的响应的内容的校验码
                }
                connect_timeout <INTEGER> : 连接请求的超时时长
                nb_get_retry <INT> :    重试次数
                delay_before_retry <INT> :  重试之前的延迟时长
                connect_ip <IP ADDRESS> :   向当前RS哪个IP地址发起健康状态检测请求
                connect_port <PORT> :   向当前RS的哪个PORT发起健康状态检测请求
                bindto <IP ADDRESS> :   发出健康状态检测请求时使用的源地址
                bind_port <PORT> :  发出健康状态检测请求时使用的源端口
            }
        TCP_CHECK {
            connect_ip <IP ADDRESS> :   向当前RS的哪个IP地址发起健康状态检测请求
            connect_port <PORT> :   向当前RS的哪个PORT发起健康状态检测请求
            bindto <IP ADDRESS> :   发出健康状态检测请求时使用的源地址
            bind_port <PORT> :  发出健康状态检测请求时使用的源端口
            connect_timeout <INTEGER> : 连接请求的超时时长
            }

keepAlived命令

keepalived - load-balancing and high-availability service
    keepalived [OPTION...]
        -f, --use-file=FILE             使用指定的配置文件
        -P, --vrrp                      仅运行VRRP子系统
        -C, --check                     仅运行带有健康检查的子系统
        -l, --log-console               将信息记录到本地控制台
        -D, --log-detail                详细的日志信息
        -S, --log-facility=[0-7]        将日志功能设置为 LOG_LOCAL[0-7]
        -X, --release-vips              从信号转换中删除VIP
        -V, --dont-release-vrrp         在后台进程停止中不要删除VRRP VIPs和VROUTEs
        -I, --dont-release-ipvs         在后台进程停止中不要删除IPVS拓扑
        -R, --dont-respawn              不重生子进程
        -n, --dont-fork                 不分叉后台进程
        -d, --dump-conf                 转存配置数据
        -p, --pid=FILE                  为当前进程使用指定的pid文件
        -r, --vrrp_pid=FILE             为VRRP子进程使用指定的pid文件
        -c, --checkers_pid=FILE         为检查子进程使用指定的pid文件
        -a, --address-monitoring        通过netlink报告所有地址的添加/删除通告
        -x, --snmp                      启动 SNMP 子系统
        -A, --snmp-agent-socket=FILE    为master代理使用指定的socket
        -s, --namespace=NAME            在网络名称空间NAME上运行,覆盖配置
        -m, --core-dump                 如果异常终止,则生成核心转存
        -M, --core-dump-pattern=PATN    同时设置 /proc/sys/kernel/core_pattern to PATN (default 'core')
        -i, --config_id id              跳过任何与id不匹配的起始 '@'的配置行
        -v, --version                   显示版本号