文章目录
- 一.keepalived 概述
- 1.keepalived服务重要功能
- 1.1 管理LvS负载均衡器软件
- 1.2 支持故障自动切换 (failover)
- 1.3 实现LVS集中节点的健康检查 (health checking)
- 1.4 实现LVS负载调度器 节点服务器的高可用性 (HA)
- 2. keepalived 高可用故障切换转移原理及VRRP通信原理
- 3.keepalived体系主要模块及作用
- 4.keepalived 服务的工作原理
- 二.部署LVS+keepalived高可用集群
- 1.部署图示
- 2.部署LVS+keepalived步骤
- 2.1配置NFS共享(192.168.198.15)
- 2.2 配置主DR服务器(192.168.198.11)
- 2.2.1配置虚拟 IP 地址(VIP:192.168.198.180)
- 2.2.2安装keepalived
- 2.2.3配置keeplived
- 2.2.4启动 ipvsadm 服务
- 2.2.5调整 proc 响应参数,关闭Linux 内核的重定向参数响应
- 2.3配置备DR服务器(192.168.198.12)
- 2.3.1配置虚拟 IP 地址(VIP:192.168.198.180)
- 2.3.2安装keepalived
- 2.3.3配置keeplived
- 2.3.4启动 ipvsadm 服务
- 2.3.5调整 proc 响应参数,关闭Linux 内核的重定向参数响应
- 3.配置节点服务器
- 4.测试验证
- 总
一.keepalived 概述
1.keepalived服务重要功能
1.1 管理LvS负载均衡器软件
keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS配置以及服务的启动停止功能 这会使 LVS应用更加的简便。
1.2 支持故障自动切换 (failover)
(1)两台主机同时安装好keepalived并且启动服务,当启动的时候master主机获得所有资源并且对用户提供请求服务,当角色backup的主机做为master热备,当master主机挂了出现故障时,backup主机将自动接管master主机所有工作,包括接管VIP资源及相应资源服务。
(2)当master主机故障修复后,又会自动接管回它的原来处理的工作,backup主机则同时释放masgter主机失效时接管的工作,此时此刻,两台主机将恢复到最初的启动时各自的原始角色及工作状态。
(3)抢占模式: master 从故障恢复后,会将VIP从backup节点中抢占过来。
(4)非抢占: master从故障恢复后不抢占backup,backup升级为 master后的VIP。
1.3 实现LVS集中节点的健康检查 (health checking)
在keepalived.conf配置LVS节点(IP)和相关参数来实现对LVS的直接管理,如果几个节点服务器同时发生故障,无法提供服务,keepalived服务会自动将那个失效节点服务器从LVS正常转发列中清除出去,并将请求调度到别的正常节点服务器上,从而保证最终用户的访问不受影响,当故障的节点服务器修复以后,keepalived服务又会自动把他们加入到正常转发列中,对外面客户提供服务。
1.4 实现LVS负载调度器 节点服务器的高可用性 (HA)
企业集群需要满足四个特点:负载均衡、健康检查、故障切换 、LVS+ keepalived,完全可以买需求
2. keepalived 高可用故障切换转移原理及VRRP通信原理
keepalived 高可用服务集群之间的故障切换转移,是通过VRRP (虚拟路由器元余协议)来实现的。
在keepalived服务正常工作时主 (master) 节点会不断地向备 (Backup) 节点发送(多播的方式) 心跳消息,用意告诉备节点自已还活着,当主节点发生故障事,就无法发送心跳消息,备节点也就因此无法检测到来自主节点的心跳,于是调用自身的接管程序,接管主节点的IP资源及服务。而当主节点恢复时,备主机又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
3.keepalived体系主要模块及作用
三个模块分别是core、check、vrrp
(1)core模块:为keepalived的核心 ,负责主进程启动,维护全局配置文件,加载和解析
(2)VRRP 模块:来实现VRRP协议
(3)check 模块:负责健康检查 常见的检查方式, 比如:端口 URL
4.keepalived 服务的工作原理
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
二.部署LVS+keepalived高可用集群
1.部署图示
2.部署LVS+keepalived步骤
主DR 服务器:ens33(192.168.198.11) ipvsadm 、keepalived(热备)
虚拟IP:192.168.198.180 网卡 ens33:0
备DR 服务器:ens33(192.168.198.12) ipvsadm 、keepalived
虚拟IP:192.168.198.180 网卡 ens33:0
Web 服务器1:ens33 192.168.13
lo:0(VIP)192.168.198.180
Web 服务器2:ens33 192.168.198.14
lo:0(VIP)192.168.198.180
NFS共享服务器:192.168.198.15
2.1配置NFS共享(192.168.198.15)
systemctl stop firewalld.service
setenforce 0yum -y install nfs-utils rpcbind
mkdir /opt/blue /opt/summer
chmod 777 /opt/blue /opt/summervim /etc/exports
/usr/share *(ro,sync)
/opt/blue 192.168.198.0/24(rw,sync)
/opt/summer 192.168.198.0/24(rw,sync)
systemctl start nfs.service
systemctl start rpcbind.service
2.2 配置主DR服务器(192.168.198.11)
systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm
2.2.1配置虚拟 IP 地址(VIP:192.168.198.180)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
#若隧道模式,复制为ifcfg-tunl0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.198.180
NETMASK=255.255.255.255
ifup ens33:0
ifconfig ens33:0
注:此处如未配置成功,ifup ens33:0失败,可以直接重启网卡systemctl restart network,
2.2.2安装keepalived
#安装keepalived
yum -y install ipvsadm keepalived
#加载 Linux 内核的 IPVS 模块
modprobe ip_vs
#查看当前 IPVS 的状态和信息
cat /proc/net/ip_vs
2.2.3配置keeplived
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
#定义全局参数
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc
#10行修改,邮件服务指向本地smtp_server 127.0.0.1smtp_connect_timeout 30
#12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01router_id LVS_01vrrp_skip_check_adv_addr
#14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}
#定义VRRP热备实例参数
vrrp_instance VI_1 {
#20行--修改,指定热备状态,主为MASTER,备为BACKUPstate MASTER
#21行--修改,指定承载vip地址的物理接口interface ens33
#22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
#nopreempt #如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreemptvirtual_router_id 51
#23行--修改,指定优先级,数值越大优先级越高,这里设置主为100 priority 100
#通告间隔秒数(心跳频率) advert_int 1
#定义认证信息,每个热备组保持一致 authentication {
#认证类型auth_type PASS
#27行--修改,指定验证密码,主备服务器保持一致auth_pass 000000}virtual_ipaddress {
##指定群集vip地址192.168.198.180}
}
#修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.198.180 80 {
#健康检查的间隔时间(秒)delay_loop 6
#指定调度算法,轮询(rr)lb_algo rr
#修改,指定群集工作模式,直接路由(DR)lb_kind DR
##连接保持时间(秒)persistence_timeout 50
#应用服务采用的是 TCP协议protocol TCP
#修改,指定第一个Web节点的地址、端口real_server 192.168.198.13 80 {
#节点的权重weight 1
#删除,添加以下健康检查方式TCP_CHECK {
#添加检查的目标端口connect_port 80
#添加连接超时(秒)connect_timeout 3
#添加重试次数nb_get_retry 3
#添加重试间隔delay_before_retry 3}}
#添加第二个 Web节点的地址、端口
real_server 192.168.198.14 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
##删除后面多余的配置##
}
systemctl start keepalived
ip addr
2.2.4启动 ipvsadm 服务
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
#清空规则
ipvsadm -C
ipvsadm -A -t 192.168.198.180:80 -s rr
ipvsadm -a -t 192.168.198.180:80 -r 192.168.198.13:80 -g
ipvsadm -a -t 192.168.198.180:80 -r 192.168.198.14:80 -g
ipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived
2.2.5调整 proc 响应参数,关闭Linux 内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
2.3配置备DR服务器(192.168.198.12)
systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm
2.3.1配置虚拟 IP 地址(VIP:192.168.198.180)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
#若隧道模式,复制为ifcfg-tunl0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.198.180
NETMASK=255.255.255.255
重启网卡 systemctl restart network
ifup ens33:0
ifconfig
2.3.2安装keepalived
#安装keepalived
yum -y install ipvsadm keepalived
#加载 Linux 内核的 IPVS 模块
modprobe ip_vs
#查看当前 IPVS 的状态和信息
cat /proc/net/ip_vs
2.3.3配置keeplived
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_02vrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 99advert_int 1authentication {auth_type PASSauth_pass 000000}virtual_ipaddress {192.168.198.180}
}virtual_server 192.168.198.180 80 {delay_loop 6lb_algo rrlb_kind DRpersistence_timeout 50protocol TCPreal_server 192.168.198.13 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.198.14 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
systemctl start keepalived
ip addr
2.3.4启动 ipvsadm 服务
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.198.180:80 -s rr
ipvsadm -a -t 192.168.198.180:80 -r 192.168.198.13:80 -g
ipvsadm -a -t 192.168.198.180:80 -r 192.168.198.14:80 -g
2.3.5调整 proc 响应参数,关闭Linux 内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
3.配置节点服务器
Web 服务器1:ens33 192.168.13
lo:0(VIP)192.168.198.180
Web 服务器2:ens33 192.168.198.14
lo:0(VIP)192.168.198.180
systemctl stop firewalld
setenforce 0yum -y install httpd
systemctl start httpd--192.168.198.13---
echo 'this is blue web!' > /var/www/html/index.html--192.168.198.14---
echo 'this is summer web!' > /var/www/html/index.htmlvim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.198.180
NETMASK=255.255.255.255service network restart 或 systemctl restart network
ifup lo:0
ifconfig lo:0
route add -host 192.168.198.180 dev lo:0vim /etc/sysctl.confnet.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2sysctl -p
4.测试验证
在客户端访问 http://192.168.198.180/
再在主服务器关闭 keepalived 服务后再测试, systemctl stop keepalived
总
keepalived的作用是解决单点故障、在调度器上配置keepalived即可相当于ARRP的主备份,主挂了,数据流就会转到备主机,keepalived可以用在组件中:mysql、nginx、Tomcat),高可用,实现故障转移。
主要的模块有三个:
(1)core模块:为keepalived的核心 ,负责主进程启动,维护全局配置文件,加载和解析
(2)VRRP 模块:来实现VRRP协议
(3)check 模块:负责健康检查 常见的检查方式, 比如:端口 URL