- 一、LVS+Keeplived 高可用群集
- 1.1 LVS
- 1.2 Keepalived
- 1.3 Keepalived体系主要模块及其作用
- 二、VRRP
- 2.1 VRRP概述
- 2.2 VRRP的工作过程
- 四、LVS+Keepalived 高可用群集的搭建
- 4.1 配置负载调度器(主:192.168.61.11)
- 4.2 配置负载调度器(备:192.168.61.22)
- 4.3 配置节点服务器 web1(192.168.61.33)
- 4.4 配置节点服务器 web2(192.168.61.44)
- 测试
- 当前使用的为主DR服务器
- 断开主DR服务器的Keepalived测试
- 在客户端测试
Linux虚拟服务器(Linux Virtual Server)
LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法
工作原理:
1.2 Keepalived在一个LVS服务群集中通常有主服务器(MASTER)和备用服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器;
当备份服务器收不到VRRP消息时,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
- 支持故障自动切换(Failover)
- 支持节点健康状态检查(Health Checking)
判断LVS负载均衡调度器、节点服务器的可用性,当master主机出现故障计时切换到backup节点保证业务正常,当master故障主机恢复后将其加入群集并且业务重新切换回master节点
keepalived实现原理剖析:
- keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
- VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
- 由多台路由器组成一个热备份组,通过共用的虚拟机IP地址对外提供服务
- 每个热备份组同时只有一台路由器提供服务,其他路由器处于冗余状态
- 若当前在线的路由失败,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
集群要满足三个特点:
- 负载均衡 (高并发)
- 健康检查 (高性能)
- 故障切换 (高可用)
keepalived体系架构中主要有三个模块,分别是core、check和vrrp
- core模块: 为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
- vrrp模块: 是来实现VRRP协议的。
- check模块: 负责健康检查,常见的方式有端口检查及URL检查。
Virtual Router Redundancy Protocal,即虚拟路由器冗余协议
- 利用VRRP,一组路由器(同一个LAN中的接口)协同工作,但是有一个处于Master状态,并承担实际的数据流量转发任务;
- 一个VRRP组内的多个路由器共用一个虚拟IP地址,该地址备作为局域网内所有主机的缺省网关地址;
- VRRP决定哪个路由器是Master,其负责接收发送至用户网关的数据包并进行转发,以及响应PC对于其网关IP 的ARP请求;
- Backup路由器侦听Master路由器 的状态,并在Master路由发生故障的时候,接替其工作
(1) VRRP组中的设备选举出Master. Master设备通过发送免费ARP报文,将虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务。
(2) Master设备周期性向备份组内所有Backup设备发送VRRP通告报文。
(3)如果Master设备出现故障,VRRP备份组中的Backup设备重新选举新的Master.。
(4) VRRP组状态切换时,Master设备由一台设备切换为另外一台设备,新的Master设备会立即发送携带虚拟路由器的虚拟MAC地址和虚拟IP地址信息的免费ARP报文,刷新与它连接的主机或设备中的MAC表项,从而把用户流量引到新的Master设备上来,整个过程对用户完全透明。
(5)原Master设备故障恢复时,若该设备为IP地址拥有者(则其优先级为255),将直接切换至Master状态。若该设备优先级小于255,将首先切换至Backup状态,且其优先级恢复为故障前配置的优先级。
(6)Backup设备的优先级高于Master设备时,由Backup设备的工作方式(抢占方式和非抢占方式)决定是否重新选举Master.
环境:
| 主DR | 192.168.61.11 | ipvsadm、keepalived(热备) |
|---|---|---|
| 备DR | 192.168.61.22 | ipvsadm、keepalived |
| Web1 服务器 | 192.168.61.33 | |
| Web2服务器 | 192.168.61.44 | |
| vip | 192.168.61.12 |
######## 配置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_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.61.12
}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.61.12 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.61.33 80 {
weight 1 #节点的权重
--45行--删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
```
real_server 192.168.61.44 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.61.12:80 -s rr
ipvsadm -a -t 192.168.61.12:80 -r 192.168.61.33:80 -g
ipvsadm -a -t 192.168.61.12:80 -r 192.168.61.44:80 -g
9. #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm
关闭防火墙
安装服务
修改配置文件keeplived.conf
启动服务、查看虚拟网卡vip
这个时候可能启动了服务看不到vip地址,因为80端口被占用了,使用“lsof -i:80”命令查看后杀掉相应的进程,重新启动就可以看到啦
调整proce响应参数,关闭Linux内核的重定向参数响应
刷新一下
配置负载分配策略,并启动服务
清空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_01
}
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.61.12
}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.61.12 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.61.33 80 {
weight 1 #节点的权重
--45行--删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.61.44 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.61.12:80 -s rr
ipvsadm -a -t 192.168.61.12:80 -r 192.168.61.33:80 -g
ipvsadm -a -t 192.168.61.12:80 -r 192.168.61.44:80 -g
9. #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm
关闭防火墙
安装服务
修改配置文件keeplived.conf
启动服务、查看虚拟网卡vip
调整proce响应参数,关闭Linux内核的重定向参数响应
刷新一下
配置负载分配策略,并启动服务
清空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 kiro web! 4. #配置虚拟vip vim /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 ONBOOT=yes IPADDR=192.168.61.12 NETMASK=255.255.255.255 5. #重启网络服务,开启虚拟网卡 systemctl restart network ifup lo:0 ifconfig lo:0 6. #设置路由 route add -host 192.168.61.12 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
关闭防火墙
安装并开启httpd服务
配置站点文件
配置虚拟vip
重启网络服务,开启虚拟网卡
设置路由
调整 proc 响应参数
刷新proc参数
1. #关闭防火墙 systemctl stop firewalld setenforce 0 2. #安装并开启httpd服务 yum -y install httpd systemctl start httpd 3. #配置站点文件 vim /var/www/html/index.html this is dhc web! 4. #配置虚拟vip vim /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 ONBOOT=yes IPADDR=192.168.61.12 NETMASK=255.255.255.255 5. #重启网络服务,开启虚拟网卡 systemctl restart network ifup lo:0 ifconfig lo:0 6. #设置路由 route add -host 192.168.61.12 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
关闭防火墙
安装并开启httpd服务
配置站点文件
配置虚拟vip
重启网络服务,开启虚拟网卡
设置路由
调整 proc 响应参数
刷新proc参数



