目录
Keepalive
Keepalive基础
vrrp技术
VRRP相关技术
keepalived介绍
Keepalived 架构
Keepalived 相关文件
配置组成
单播多播地址
通知脚本
日志功能
LVS+Keepalived 高可用群集的搭建
配置负载调度器(主:192.168.241.129)
配置负载调度器(备:192.168.241.129)
配置节点服务器 web1(192.168.241.133)
配置节点服务器 web2(192.168.241.136)
当前使用的为主DR服务器测试
断开主DR服务器的Keepalived测试
在客户段测试
Keepalive
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
keepalived 软件
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
注:Linux服务器集群系统–LVS Linux虚拟服务器(LinuxVirtual Server)
一提到高可用就想到keepalive,Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
VRRP 相关术语
虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
VIP:Virtual IP
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
物理路由器:
master:主设备
backup:备用设备
priority:优先级
通告:心跳,优先级等;周期性
工作方式:抢占式,非抢占式,延迟抢占模式,
安全认证:
工作模式:
#通告:
是宣告自己的主权,不要妄想抢班夺权,不停的向外
#抢占式:
主服务器宕机,过了一段时间修好了,再把主权抢过来
#非抢占式:
主服务器宕机,过了一段时间修好了,原来的主就作为备了
#抢占式好还是非抢占式好?
#安全认证:
如没有安全认证,不在集群中的keeplive服务器设置超高的优先级,会造成事故
#主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)见下图:
环境:
有两台服务器
虚拟出两台虚拟路由器
第一台虚拟路由器中服务器1为主,服务器2为备,那么虚拟IP1就飘在服务器1上,真正工作的只有服务器1
第二台虚拟路由器中服务器2为主,服务器1为备,那么虚拟IP2就飘在服务器2上,真正工作的只有服务器2
优点:
#提高了资源利用率:
这样主,备服务器同时干活,可以同时运行两个项目
#同样有备份功能:
如果服务器1坏了,服务器2 将同时拥有虚拟IP1和虚拟IP2
缺点:
虽然有备份冗余功能但是对机器的性能要求非常高,当其中一台出现故障,本来一台运行一个任务,现在所有的业务全部压在了一台上,有十分大的风险
官网:http://keepalived.org/
功能:
官方文档:
https://keepalived.org/doc/
http://keepalived.org/documentation.html
vrrp stack:VIP消息通告
checkers:监测real server(简单来说 就是监控后端真实服务器的服务)
system call:实现 vrrp 协议状态转换时调用脚本的功能
SMTP:邮件组件(报警邮件)
IPVS wrapper:生成IPVS规则(直接生成ipvsadm)
Netlink Reflector:网络接口(将虚拟地址ip(vip)地址飘动)
WatchDog:监控进程(整个架构是否有问题)
keeplive可以配合ngnix等软件,反向代理
/etc/keepalived/keepalived.conf 配置组成
Global definitions(全局配置):定义邮件配置,route_id,vrrp配置,多播地址等
VRRP instance(s):定义vrrp协议中的每个vrrp虚拟路由器的规则,基本信息
Virtual server group(s)
Virtual server(s):LVS集群的VS和RS
修改多播
#两边都要加主从
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_R1
vrrp_mcast_group4 234.6.6.6
#添加此行
}
[root@localhost ~]# tcpdump -i ens33 -nn host 234.6.6.6
#抓包查看查看
[root@localhost keepalived]#systemctl stop keepalived.service
#模拟故障,可以正常切换
修改单播
#在所有节点vrrp_instance语句块中设置对方主机的IP,建议设置为专用于对应心跳线网络的地址,而非
使用业务网络
unicast_src_ip #指定发送单播的源IP
unicast_peer {
#指定接收单播的对方目标主机IP
......
}
#主服务器
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.10/24 dev eth0 label eth0:1
}
unicast_src_ip 192.168.91.100 #本机IP
unicast_peer{
192.168.91.101 #指向对方主机IP 如果有多个keepalived,再下面加其它节点的IP
}
}
#复制段
unicast_src_ip 192.168.91.100
unicast_peer{
192.168.91.101
}
unicast_src_ip 192.168.91.101
unicast_peer{
192.168.91.100
192.168.91.188
}
[root@localhost ~]#tcpdump -i ens33 host -nn 192.168.91.100
#在从节点抓包验证
[root@localhost opt]#vim /etc/mail.rc
set [email protected]
set smtp=smtp.qq.com
set [email protected]
set smtp-auth-password=
[root@localhost opt]#vim keepalive.sh
#!/bin/bash
#
contact='[email protected]'
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
[root@localhost opt]#vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
preempt_delay 30
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.91.16
}
notify_master "/opt/keepalive.sh master"
notify_backup "/opt/keepalive.sh backup"
notify_fault "/opt/keepalive.sh fault"
}
#模拟master故障
[root@ka1-centos7 ~]#killall keepalived
开启单独日志功能
[root@localhost opt]#keepalived --help
#查看帮助
[root@localhost opt]#ps aux |grep keep
root 25326 0.0 0.0 118616 1372 ? Ss 11月20 0:00 /usr/sbin/keepalived -D
root 25327 0.0 0.1 127480 3336 ? S 11月20 0:01 /usr/sbin/keepalived -D
root 25328 0.0 0.1 129500 2852 ? S 11月20 0:01 /usr/sbin/keepalived -D
root 26877 0.0 0.0 112676 980 pts/0 S+ 00:37 0:00 grep --color=auto keep
[root@localhost opt]#vim /lib/systemd/system/keepalived.service
EnvironmentFile=-/etc/sysconfig/keepalived
ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS
[root@localhost opt]#vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"
[root@localhost opt]#vim /etc/rsyslog.conf
# Save boot messages also to boot.log
local7.* /var/log/boot.log
local6.* /var/log/keepalived.log
[root@localhost opt]#systemctl restart keepalived.service rsyslog.service
LVS+Keepalived 高可用群集的搭建
主DR 服务器:192.168.241.128
备DR 服务器:192.168.241.129
Web 服务器1:192.168.241.133
Web 服务器2:192.168.241.136
配置Keepalived master服务器
1. #关闭防火墙
systemctl stop firewalld.service
setenforce 0
2. #安装服务
yum -y install ipvsadm keepalive
3. #修改配置文件keeplived.conf
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
......
global_defs { #定义全局参数
--10行--修改,邮件服务指向本地
smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
router_id LVS_01
}
vrrp_instance VI_1 { #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
state MASTER
--21行--修改,指定承载vip地址的物理接口
interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
priority 100
advert_int 1 #通告间隔秒数(心跳频率)
authentication { #定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
--27行--修改,指定验证密码,主备服务器保持一致
auth_pass 123123
}
virtual_ipaddress { #指定群集vip地址
192.168.241.188
}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.241.188 80 {
delay_loop 6 #健康检查的间隔时间(秒)
lb_algo rr #指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
lb_kind DR
persistence_timeout 50 #连接保持时间(秒)
protocol TCP #应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
real_server 192.168.241.133 80 {
weight 1 #节点的权重
--45行--删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.241.136 80 { #添加第二个 Web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
##删除后面的所有配置
4. #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33
5. #调整proce响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
6. #刷新一下
sysctl -p
7. #配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
8.
#清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.241.188:80 -s rr
ipvsadm -a -t 192.168.241.188:80 -r 192.168.241.133:80 -g
ipvsadm -a -t 192.168.241.188:80 -r 192.168.241.136:80 -g
9. #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm
配置Keepalived master服务器
1. #关闭防火墙
systemctl stop firewalld.service
setenforce 0
2. #安装服务
yum -y install ipvsadm keepalived
3. #修改配置文件keeplived.conf
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
......
global_defs { #定义全局参数
--10行--修改,邮件服务指向本地
smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
router_id LVS_02
}
vrrp_instance VI_1 { #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
state BACKUP
--21行--修改,指定承载vip地址的物理接口
interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
priority 99
advert_int 1 #通告间隔秒数(心跳频率)
authentication { #定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
--27行--修改,指定验证密码,主备服务器保持一致
auth_pass 123123
}
virtual_ipaddress { #指定群集vip地址
192.168.241.188
}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.241.188 80 {
delay_loop 6 #健康检查的间隔时间(秒)
lb_algo rr #指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
lb_kind DR
persistence_timeout 50 #连接保持时间(秒)
protocol TCP #应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
real_server 192.168.241.133 80 {
weight 1 #节点的权重
--45行--删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.241.136 80 { #添加第二个 Web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
##删除后面所有配置
4. #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33
5. #调整proce响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
6. #刷新一下
sysctl -p
配置ipvsadm
7. #配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
8.
#清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.241.188:80 -s rr
ipvsadm -a -t 192.168.241.188:80 -r 192.168.241.133:80 -g
ipvsadm -a -t 192.168.241.188:80 -r 192.168.241.136:80 -g
9. #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm
1. #关闭防火墙
systemctl stop firewalld
setenforce 0
2. #安装并开启httpd服务
yum -y install httpd
systemctl start httpd
3. #配置站点文件
vim /var/www/html/index.html
this is wxddhc web!
4. #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.241.188
NETMASK=255.255.255.255
5. #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
6. #设置路由
route add -host 192.168.241.188 dev lo:0
route -n
7. #调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
8. #刷新proc参数
sysctl -p
1. #关闭防火墙
systemctl stop firewalld
setenforce 0
2. #安装并开启httpd服务
yum -y install httpd
systemctl start httpd
3. #配置站点文件
vim /var/www/html/index.html
this is wxtnb web!
4. #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.241.188
NETMASK=255.255.255.255
5. #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
6. #设置路由
route add -host 192.168.241.188 dev lo:0
route -n
7. #调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
8. #刷新proc参数
sysctl -p
systemctl stop keepalived.service
主服务器坏了之后 备份服务器立马顶上
过一会刷新一下
到这就已经成功了