首页 > 技术文章 > Keepalived 配置文件

centos2017 2017-12-31 17:17 原文

keepalived的配置文件:

keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是
global_defs、              全局定义及故障时默认邮件发送 参数
static_ipaddress、    设置本节点的IP              如果你的机器上已经配置了IP和路由,那么这两个区域可以不用配置
static_routes、          设置本节点路由信息       如果你的机器上已经配置了IP和路由,那么这两个区域可以不用配置
vrrp_script、              用来做健康检查,检查失败时会将vrrp_instance的priority减少相应的值。

vrrp_instance             用来定义对外提供服务的VIP区域及其相关属性
virtual_server         

global_defs {
notification_email             发生诸如切换操作时发送email通知邮件地址 可以多个每行一个
{
admin@example.com
}
notification_email_from admin@example.com    发送通知邮件 源地址
smtp_server 127.0.0.1                                            smtp服务器地址
stmp_connect_timeout 30                                      smtp连接超时时间
router_id node1                                                      机器标识 主要用于通知中
}

静态地址和路由配置 (正常不用配置)
static_ipaddress {
     10.210.214.163/24 brd 10.210.214.255 dev eth0                 静态ip配置,这里实际上和系统里面命令配置IP地址和路由一样
...}
static_routes {
     10.0.0.0/8 via 10.210.214.1 dev eth0                                    静态路由配置
...}
以上分别表示启动/关闭keepalived时在本机执行的如下命令:

# /sbin/ip addr add 10.210.214.163/24 brd 10.210.214.255 dev eth0
# /sbin/ip route add 10.0.0.0/8 via 10.210.214.1 dev eth0
# /sbin/ip addr del 10.210.214.163/24 brd 10.210.214.255 dev eth0
# /sbin/ip route del 10.0.0.0/8 via 10.210.214.1 dev eth0
注意: 请忽略这两个区域,一般这个区域不需要配置,机器肯定已经配置了IP和路由。

 

 

VRRPD配置:

 

VRRPD配置包括三个类

 

VRRP实例(VRRP Instance)

 

VRRP同步组(synchroization group)

 

VRRP脚本

 

 

 

1.VRRP实例(instance)

 

vrrp_instance http {
state MASTER       实例初始状态(还要根据priority值确定)可以是MASTER 或 BACKUP
interface eth0          实例节点固有IP(非VIP)的网卡,用来发VRRP包
dont_track_primary      忽略VRRP网卡错误。(默认未设置)
track_interface {            监控以下网卡,如果任何一个不通就会切换到故障FALT状态。(可选项)
eth0 eth1
}
mcast_src_ip   <IPADDR>        vrrp组播包的源地址,默认源地址为master的IP 这里相当于heartbeat的心跳端口
                                                      如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
garp_master_delay 10              当切换为Master状态后多久更新ARP缓存
virtual_router_id 51            虚拟路由标识即VRID 相同的VRID为一个组 他将决定多播的MAC地址
priority 100                          定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER 的优先级必须大于BACKUP。
                                              这个选项的值最好高于其他机器50个点,该项范围是1-255
advert_int 1             检查间隔默认为1秒

 

authentication {       设置认证
auth_type PASS               认证方式可以是PASS或AH两种认证方式
autp_pass 1234                认证密码
}

 


virtual_ipaddress {            设置虚拟IP 可以设置多个
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1
}

 

设置虚拟路由的地方
virtual_routes {
# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> tab
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.110.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2
192.168.112.0/24 via 192.168.100.254
}

 

track_script {
check_running weight 20        vrrp监控脚本名称(脚本定义在后边)  权重
}

 

nopreempt                设置不抢占,如设置,则state的状态要为backup
                                   而且这个节点的优先级必须别另外的高。当主MASTER恢复后不抢占资源
preemtp_delay 300          抢占延迟 master启动多久之后进行接管资源(VIP/Route信息等)
debug                        debug级别
}

 

注意事项: 设置state为 双备原理
通常如果master服务死掉后backup会变成master,但是当master服务又好了的时候 master此时会抢占VIP.
这样就会发生两次切换对业务繁忙的网站来说是不好的。 
所以我们要在配置文件加入 nopreempt 非抢占 参数,但是这个参数只能用于state 为backup,
故我们在用HA的时候最好master 和backup的state都设置成backup 让其通过priority来竞争。 
 这样加上nopreempt的时候,即使master又好了,依旧不会切换 。 

 

    state   nopreempt  priority
 主机  backup  设置  100
 从机  backup  不设置  50

 

vrrp_script check_running {

script “/usr/local/bin/check_running”       程序位置
interval 10                                                 脚本 执行间隔
weight 10                                   脚本结果导致的优先级变更:10表示优先级+10;-10则表示优先级-10
}

 

    • 如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加
    • 如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少
    • 其他情况,原本配置的优先级不变,即配置文件中priority对应的值。



VRRP同步组(synchroization group)配置

 

定义vrrp_intance组,使得这个组内成员动作一致。

 

例如两个vrrp_instance同属于一个vrrp_rsync_group,
那么其中一个vrrp_instance发生故障切换时,另一个vrrp_instance也会跟着切换(即使这个instance没有发生故障)。

 

vrrp_sync_group VG_1 {
group { 
  http 
  mysql 

notify_master /path/to/to_master.sh      表示当切换到master状态时要执行的脚本
notify_backup /path_to/to_backup.sh   表示当切换到backup状态时要执行的脚本
notify_fault "/path/fault.sh VG_1"      表示出错状态时要执行的脚本
notify /path/to/notify.sh                       表示任何状态切换时都调用该脚本,该脚本在以上三个脚本执行完成之后进行调用
smtp_alert                                          表示切换时给global defs中定义的邮件地址发送邮件通知
}

 

virtual_server_group和virtual_server区域

 

virtual_server_group一般在超大型的LVS中用到,一般LVS用不过这东西,因此不多说。

 

virtual_server IP Port {
    delay_loop <INT>
    lb_algo rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind NAT|DR|TUN
    persistence_timeout <INT>
    persistence_granularity <NETMASK>
    protocol TCP
    ha_suspend
    virtualhost <STRING>
    alpha
    omega
    quorum <INT>
    hysteresis <INT>
    quorum_up <STRING>|<QUOTED-STRING>
    quorum_down <STRING>|<QUOTED-STRING>
    sorry_server <IPADDR> <PORT>
    real_server <IPADDR> <PORT> {
        weight <INT>
        inhibit_on_failure
        notify_up <STRING>|<QUOTED-STRING>
        notify_down <STRING>|<QUOTED-STRING>
        # HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
        HTTP_GET|SSL_GET {
            url {
                path <STRING>
                # Digest computed with genhash
                digest <STRING>
                status_code <INT>
            }
            connect_port <PORT>
            connect_timeout <INT>
            nb_get_retry <INT>
            delay_before_retry <INT>
        }
    }
}

 

 

 

推荐阅读