keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS配置以及服务的启动停止功能 这会使 LVS应用更加的简便。
(1)两台主机同时安装好keepalived并且启动服务,当启动的时候master主机获得所有资源并且对用户提供请求服务,当角色backup的主机做为master热备,当master主机挂了出现故障时,backup主机将自动接管master主机所有工作,包括接管VIP资源及相应资源服务。
(2)当master主机故障修复后,又会自动接管回它的原来处理的工作,backup主机则同时释放masgter主机失效时接管的工作,此时此刻,两台主机将恢复到最初的启动时各自的原始角色及工作状态。
(3)抢占模式: master 从故障恢复后,会将VIP从backup节点中抢占过来。
(4)非抢占: master从故障恢复后不抢占backup,backup升级为 master后的VIP。
在keepalived.conf配置LVS节点(IP)和相关参数来实现对LVS的直接管理,如果几个节点服务器同时发生故障,无法提供服务,keepalived服务会自动将那个失效节点服务器从LVS正常转发列中清除出去,并将请求调度到别的正常节点服务器上,从而保证最终用户的访问不受影响,当故障的节点服务器修复以后,keepalived服务又会自动把他们加入到正常转发列中,对外面客户提供服务。
企业集群需要满足四个特点:负载均衡、健康检查、故障切换 、LVS+ keepalived,完全可以买需求
keepalived 高可用服务集群之间的故障切换转移,是通过VRRP (虚拟路由器元余协议)来实现的。
在keepalived服务正常工作时主 (master) 节点会不断地向备 (Backup) 节点发送(多播的方式) 心跳消息,用意告诉备节点自已还活着,当主节点发生故障事,就无法发送心跳消息,备节点也就因此无法检测到来自主节点的心跳,于是调用自身的接管程序,接管主节点的IP资源及服务。而当主节点恢复时,备主机又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
三个模块分别是core、check、vrrp
(1)core模块:为keepalived的核心 ,负责主进程启动,维护全局配置文件,加载和解析
(2)VRRP 模块:来实现VRRP协议
(3)check 模块:负责健康检查 常见的检查方式, 比如:端口 URL
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
主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
systemctl stop firewalld.service
setenforce 0
yum -y install nfs-utils rpcbind
mkdir /opt/blue /opt/summer
chmod 777 /opt/blue /opt/summer
vim /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
systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm
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.0
ifup ens33:0
ifconfig ens33:0
注:此处如未配置成功,ifup ens33:0失败,可以直接重启网卡systemctl restart network,
#安装keepalived
yum -y install ipvsadm keepalived
#加载 Linux 内核的 IPVS 模块
modprobe ip_vs
#查看当前 IPVS 的状态和信息
cat /proc/net/ip_vs
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
#定义全局参数
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
#10行修改,邮件服务指向本地
smtp_server 127.0.0.1
smtp_connect_timeout 30
#12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01
router_id LVS_01
vrrp_skip_check_adv_addr
#14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#定义VRRP热备实例参数
vrrp_instance VI_1 {
#20行--修改,指定热备状态,主为MASTER,备为BACKUP
state MASTER
#21行--修改,指定承载vip地址的物理接口
interface ens33
#22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
#nopreempt #如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
virtual_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 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
##删除后面多余的配置##
}
systemctl start keepalived
ip addr
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
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
systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm
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.0
重启网卡 systemctl restart network
ifup ens33:0
ifconfig
#安装keepalived
yum -y install ipvsadm keepalived
#加载 Linux 内核的 IPVS 模块
modprobe ip_vs
#查看当前 IPVS 的状态和信息
cat /proc/net/ip_vs
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
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_02
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 000000
}
virtual_ipaddress {
192.168.198.180
}
}
virtual_server 192.168.198.180 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
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
}
}
real_server 192.168.198.14 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
systemctl start keepalived
ip addr
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
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
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 0
yum -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.html
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.198.180
NETMASK=255.255.255.0
service network restart 或 systemctl restart network
ifup lo:0
ifconfig lo:0
route add -host 192.168.198.180 dev lo:0
vim /etc/sysctl.conf
net.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 = 2
sysctl -p
在客户端访问 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