物理路由器:
        master:主设备
        backup:备用设备
        priority:优先级
    VIP:Virtual IP
    VMAC:Virtual MAC(00-00-5e-00-01-VRID)
        GraciousARP

通告:心跳,优先级等;周期性;

抢占式,非抢占式;

安全工作:
    认证:
        无认证
        简单字符认证
        MD5

工作模式:
    主/备:单虚拟路径器;
    主/主:主/备(虚拟路径器1),备/主(虚拟路径器2)

keepalived:
vrrp协议的软件实现,原生设计的目的为了高可用ipvs服务;
基于vrrp协议完成地址流动;
为所有ipvs节点生成ipvs规则(在配置文件中预先定义);
为ipvs集群的各RS做健康状态检测,基于检测结果完成节点管理;
基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务(这里说的是完成其他服务的高可用);

组件:
    核心组件:
        vrrp stack
        ipvs wrapper
        checkers
    控制组件:配置文件分析器
    IO复用器
    内存管理组件

HA Cluster的配置前提:
(1)各节点时间必须同步;
ntp,chrony
(2)确保iptables及selinux不会成为阻碍;
(3)各节点之间可通过主机名互相通信(对KeepAlived并非必须);
(4)确保各节点的用于集群服务的接口支持MULTICAST通信;
D类:224.0.0.0~239.255.255.255
(5)各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信;(并非必须)

keepalived安装配置:
CentOS6.4+随base仓库提供;

程序环境:
    主配置文件:/etc/keepalived/keepalived.conf
    主程序文件:/usr/sbin/keepalived
    Unit File:keepalived.service
    Unit File的环境配置文件:/etc/sysconfig/keepalived
配置文件组件部分:---有三个配置段
    TOP HIERACHY---顶级配置段
        GLOBAL CONFIGURATION
            Global definitions---全局定义
            Static routes/addresses---静态路由
        VRRP CONFIGURATION
            VRRP synchronization group(s):vrrp同步组;(同进同退,两台路由器对外提供虚拟IP,对内也提供虚拟IP,但是vip1在哪台路由器上,vip2也应该在哪个节点上,nat集群需要同步组)
            VRRP instance(s)(实例):每个vrrp instance 即一个vrrp路由器;
        LVS CONFIGURATION
            Virtual server group(s)
            Virtual server(s):ipvs集群的vs和rs;

单主配置示例:
    !Configuration File forkeepalived

    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.19
    }

    vrrp_instance VI_1 {
        state BACKUP
        interface eno16777736
        virtual_router_id 14
        priority 98
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 571f97b2
        }
        virtual_ipaddress {
            10.1.0.91/16 dev eno16777736
        }
    }

配置语法:
    配置虚拟路由器:
     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通告的时间间隔;
        authentication {
            auth_type AH|PASS
            auth_pass <PASSWORD>
        }
        virtual_ipaddress {
            <IPADDR>/<MASK>brd<IPADDR>dev<STRING>scpoe<SCOPE>label<LABEL>
            192.168.200.17/24 dev eth1
            192.168.200.18/24 dev eth2 label eth2:1
        }
        track_interface {
            eth0
            eth1
            ...
        }
        配置要监控的网络接口,一旦接口出现故障,则转为FAULT状态;
        nopreempt:定义工作模式为非抢占模式;
        preempt_delay 300:抢占模式下,节点上线后触发新选举操作的延迟时长;

        定义通知脚本:
            notify_master<STRING>|<QUOTED-STRING>:当前节点成为主节点时触发的脚本;
            notify_backup<STRING>|<QUOTED-STRING>:当前节点转为备节点时触发的脚本;
            notify_fault<STRING>|<QUOTED-STRING>:当前节点转为"失败"状态时触发的脚本;
            notify<STRING>|<QUOTED-STRING>:通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知

视频中的配置:集群中各节点是通过多播通信,要保证多播功能是打开的
node1:
ntpdate 172.16.0.1---同步时间
vim /etc/chrony.conf---chronyd服务的配置文件,把其中的server可以指向本地主机测试用
systemctl restart chronyd.service---重启服务
systemctl enable chronyd.service---设置成开机自动启动
iptables -vnL---查看有没有规则,没有就可以,如果有,不能清空可以添加一条放行重启iptables服务
yum info iptables-services---查看iptables服务安装包信息
cat /etc/hosts---查看域名解析
ifconfig---网卡信息中要包含MULTICAST这个信息,才表示支持多播功能
ip link set multicast on dev eno16777736---开启网卡的多播功能

yum -y install keepalived
rpm -ql keepalived---查看包

视频中keepalived.conf
!Configuration File for keepalived

global_defs {
notification_email {---收邮件地址,要在互联网上真正能接收br/>root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc---发邮件地址,可以伪装源地址,但是有的服务器不允许伪装,要通过下面的smtp_server的检查
smtp_server 127.0.0.1---一般是本机,可以使用ss -tnl查看25号端口始终是开启的,可以很容易的从本机发送邮件到本机,例如:echo "hello" | mail -s "hi" root@localhost---s可以给上邮件的标题,收邮件的命令是mail,就可以看到收到的邮件,按提示的数字就可以打开查看邮件
smtp_connect_timeout 30
router_id nide1---用来标识当前主机
vrrp_mcast group4 224.1.101.33---224.0.0.18是默认的,但是有可能会冲突,可以自己随便写一个
}

vrrp_instance VI_1 {---第一个实例就是第一个路由器,VI_1是名称随便定义
state MASTER---配置为主设备,但是还需要设置优先级
priority 100---优先级是100
interface eno167777736---把vip绑定到哪个网卡设备
virtual_router_id 33---0到255之间使用哪一个都行,但是两个设备之间要统一
advert_int 1---每隔多长时间向外通告一次
authentication {---要不要认证
auth_type PASS---简单字符串认证
auth_pass RT3SKUI2---这里不要使用默认的1111,可以用openssl rand -base64 7生成一个随机的字符串
}
virtual_ipaddress {---指定IP地址的格式为ip、掩码、设备、别名
172.16.0.99/16 dev eno16777736 label eno16777736:0
}
}

scp keepalived.conf node2:/etc/keepalived/---复制到node2节点
systemctl start keepalived.service---此时启动keepalived,就会抢占成为主节点
systemctl status keepalived
ifconfig---就可以看到ip地址配置上去了,如果此时停掉服务,node2节点仍然会抢回去
tcpdump -i eno16777736 -nn host 224.1.101.33---监听网卡上指向224.1.101.33的信息包,可以看到一秒钟发送一个包


双主模型的配置:
视频中keepalived.conf
!Configuration File for keepalived

global_defs {
notification_email {---收邮件地址,要在互联网上真正能接收
br/>root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc---发邮件地址,可以伪装源地址,但是有的服务器不允许伪装,要通过下面的smtp_server的检查
smtp_server 127.0.0.1---一般是本机,可以使用ss -tnl查看25号端口始终是开启的,可以很容易的从本机发送邮件到本机,例如:echo "hello" | mail -s "hi" root@localhost---s可以给上邮件的标题,收邮件的命令是mail,就可以看到收到的邮件,按提示的数字就可以打开查看邮件
smtp_connect_timeout 30
router_id nide1---用来标识当前主机
vrrp_mcast group4 224.1.101.33---224.0.0.18是默认的,但是有可能会冲突,可以自己随便写一个
}

vrrp_instance VI_1 {---第一个实例就是第一个路由器,VI_1是名称随便定义
state MASTER---配置为主设备,但是还需要设置优先级
priority 100---优先级是100
interface eno167777736---把vip绑定到哪个网卡设备
virtual_router_id 33---0到255之间使用哪一个都行,但是两个设备之间要统一
advert_int 1---每隔多长时间向外通告一次
authentication {---要不要认证
auth_type PASS---简单字符串认证
auth_pass RT3SKUI2---这里不要使用默认的1111,可以用openssl rand -base64 7生成一个随机的字符串
}
virtual_ipaddress {---指定IP地址的格式为ip、掩码、设备、别名
172.16.0.99/16 dev eno16777736
}
}

vrrp_instance VI_2 {---第一个实例就是第一个路由器,VI_1是名称随便定义
state BACKUP---配置为主设备,但是还需要设置优先级
priority 96---优先级是100
interface eno167777736---把vip绑定到哪个网卡设备
virtual_router_id 34---0到255之间使用哪一个都行,但是两个设备之间要统一
advert_int 1---每隔多长时间向外通告一次
authentication {---要不要认证
auth_type PASS---简单字符串认证
auth_pass Ra3S7Uy2---这里不要使用默认的1111,可以用openssl rand -base64 7生成一个随机的字符串
}
virtual_ipaddress {---指定IP地址的格式为ip、掩码、设备、别名
172.16.0.98/16 dev eno16777736
}
}

systemctl stop keepalived.service---有时候不支持重载配置,所以需要重启服务
systemctl start keepalived.service
tcpdump -i eno16777736 -nn host 224.1.101.33
ip a l---列出网卡上的ip地址---可以看到同一个网卡有多个ip地址

node2:
ntpdate 172.16.0.1---同步时间
systemctl restart chronyd.service---重启服务
systemctl enable chronyd.service---设置成开机自动启动
systemctl status chronyd.service---查看状态如果显示enabled就表示已经开机自动启动

视频中keepalived.conf
!Configuration File for keepalived

global_defs {
notification_email {---收邮件地址,要在互联网上真正能接收
br/>root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc---发邮件地址,可以伪装源地址,但是有的服务器不允许伪装,要通过下面的smtp_server的检查
smtp_server 127.0.0.1---一般是本机,可以使用ss -tnl查看25号端口始终是开启的,可以很容易的从本机发送邮件到本机,例如:echo "hello" | mail -s "hi" root@localhost---s可以给上邮件的标题,收邮件的命令是mail,就可以看到收到的邮件,按提示的数字就可以打开查看邮件
smtp_connect_timeout 30
router_id nide2---用来标识当前主机
vrrp_mcast group4 224.1.101.33---224.0.0.18是默认的,但是有可能会冲突,可以自己随便写一个
}

vrrp_instance VI_1 {---第一个实例就是第一个路由器,VI_1是名称随便定义
state BACKUP---配置为从设备,但是还需要设置优先级
priority 96---优先级应该比master低
interface eno167777736---把vip绑定到哪个网卡设备
virtual_router_id 33---0到255之间使用哪一个都行,但是两个设备之间要统一
advert_int 1---每隔多长时间向外通告一次
authentication {---要不要认证
auth_type PASS---简单字符串认证
auth_pass RT3SKUI2---这里不要使用默认的1111,可以用openssl rand -base64 7生成一个随机的字符串
}
virtual_ipaddress {---指定IP地址的格式为ip、掩码、设备、别名
172.16.0.99/16 dev eno16777736 label eno16777736:0
}
}

systemctl start keepalived.service---node2节点启动,此时node2节点优先级最高,所以把自己配置为master
systemctl status keepalived.service---会显示状态信息,进入主节点模式,并且ip地址也配置上去了


双主模型的配置:
视频中keepalived.conf
!Configuration File for keepalived

global_defs {
notification_email {---收邮件地址,要在互联网上真正能接收
br/>root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc---发邮件地址,可以伪装源地址,但是有的服务器不允许伪装,要通过下面的smtp_server的检查
smtp_server 127.0.0.1---一般是本机,可以使用ss -tnl查看25号端口始终是开启的,可以很容易的从本机发送邮件到本机,例如:echo "hello" | mail -s "hi" root@localhost---s可以给上邮件的标题,收邮件的命令是mail,就可以看到收到的邮件,按提示的数字就可以打开查看邮件
smtp_connect_timeout 30
router_id nide1---用来标识当前主机
vrrp_mcast group4 224.1.101.33---224.0.0.18是默认的,但是有可能会冲突,可以自己随便写一个
}

vrrp_instance VI_1 {---第一个实例就是第一个路由器,VI_1是名称随便定义
state MASTER---配置为主设备,但是还需要设置优先级
priority 100---优先级是100
interface eno167777736---把vip绑定到哪个网卡设备
virtual_router_id 33---0到255之间使用哪一个都行,但是两个设备之间要统一
advert_int 1---每隔多长时间向外通告一次
authentication {---要不要认证
auth_type PASS---简单字符串认证
auth_pass RT3SKUI2---这里不要使用默认的1111,可以用openssl rand -base64 7生成一个随机的字符串
}
virtual_ipaddress {---指定IP地址的格式为ip、掩码、设备、别名
172.16.0.99/16 dev eno16777736
}
}

vrrp_instance VI_2 {---第一个实例就是第一个路由器,VI_1是名称随便定义
state MASTER---配置为主设备,但是还需要设置优先级
priority 100---优先级是100
interface eno167777736---把vip绑定到哪个网卡设备
virtual_router_id 34---0到255之间使用哪一个都行,但是两个设备之间要统一
advert_int 1---每隔多长时间向外通告一次
authentication {---要不要认证
auth_type PASS---简单字符串认证
auth_pass Ra3S7Uy2---这里不要使用默认的1111,可以用openssl rand -base64 7生成一个随机的字符串
}
virtual_ipaddress {---指定IP地址的格式为ip、掩码、设备、别名
172.16.0.98/16 dev eno16777736
}
}