物理路由器: 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作健康状态检测,基于检测结果完成节点管理;
基于脚本调用接口经过执行脚本完成脚本中定义的功能,进而影响集群事务(这里说的是完成其余服务的高可用);node
组件: 核心组件: 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服务完成互相通讯;(并不是必须)linux
keepalived安装配置:
CentOS6.4+随base仓库提供;vim
程序环境: 主配置文件:/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是默认的,可是有可能会冲突,能够本身随便写一个
}app
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
}
}ssh
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的信息包,能够看到一秒钟发送一个包tcp
双主模型的配置:
视频中keepalived.conf
!Configuration File for keepalivedide
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
}
}
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---优先级是100interface 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}}