LVS—Keepalived
一.Keepalived作用
专为LVS和HA设计的一款健康检查工具
支持故障自动切换(Failover)
支持节点健康状态检查(Health Checking)
二.实现原理
keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
三.VRRP讲解
VRRP是针对路由器的一种备份解决方案
1.由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
2.每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
3.若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提服务
四.Keepalived案例讲解
1.Keepalived可实现多机热备,每个热备组可有多台服务器
2.双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
3.实现基于Web服务的双机热备
五.keepalived配置
主配置文件位置:/etc/keepalived/keepalived.conf
keepalived.conf是主配置文件
global_defs{…}区段指定全局参数
vrrp_instance实例名称{…}区段指定VRRP热备参数
注释文字以“!”符号开头
目录samples,提供了许多配置样例作为参考
配置参数
router_id LVS_1:本服务器名称为 LVS_1
vrrp_instance v1 {}:定义热备实例组名为 v1
state MASTER:热备状态,MASTER表示主服务器
interface ens33:表示承载虚拟地址的物理接口为ens33
virtual_router_id 1:表示虚拟服务器的ID号为1,每个热备组保持一致
priority 100:优先级为100,数值越大优先级越高
advert_int 1:表示通告间隔秒数(心跳频率)
auth_type PASS:认证类型为密码
auth_pass 123456:密码为123456
virtual_ipaddress {虚拟地址,可以有多个}
六.LVS+keepalived全过程
1.实验环境
主调度器:192.168.100.11 虚拟IP:192.168.100.210
备调度器:192.168.100.12 虚拟IP:192.168.100.210
服务器1:192.168.100.110 虚拟IP:192.168.100.210
服务器2:192.168.100.120 虚拟IP:192.168.100.210
共享存储服务器:192.168.100.10
客户机
2.共享存储服务器配置
[]yum -y install nfs-utils rpcbind
[] mkdir /opt/web1
[] mkdir /opt/web2
[] echo "this is kgc web" > /opt/web1/index.html
[]echo "this is accp web" > /opt/web2/index.html
[] vi /etc/exports
/opt/web1 192.168.100.110/32(ro)
/opt/web2 192.168.100.120/32(ro)
[] systemctl start nfs
[] systemctl start rpcbind
[]showmount -e #查看本机共享存储发布情况
3.服务器
web1
showmount -e 192.168.100.10
[root@localhost ~]# mount 192.168.100.10:/opt/kgc /var/www/html/
vi aa.sh
#!/bin/bash
# DR
ifconfig lo:0 192.168.100.210 broadcast 192.168.100.210netmask 255.255.255.255 up
#添加虚拟网口
route add -host 192.168.100.210dev lo:0 #给lo:0添加路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
##系统只响应目的IP为本地真实IP的ARP请求
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
##系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送真实 接口的IP地址
sysctl -p &> /dev/null
ifconfig #查看虚拟网口配置情况
web2
[root@localhost ~]# showmount -e 192.168.100.10
[root@localhost ~]# mount 192.168.100.10:/opt/accp /var/www/html/
vi bb.sh
#!/bin/bash
# DR
ifconfig lo:0 192.168.100.210 broadcast 192.168.100.210 netmask 255.255.255.255 up
#添加虚拟网口
route add -host 192.168.100.210 dev lo:0 #给lo:0添加路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore #系统只响应目的IP为本地真实IP的ARP请求
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce #系统不使用IP包的源地址来设置ARP请求的源地址
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null
ifconfig #查看虚拟网口配置情况
4.调度器
主调度器
modprobe ip_vs //加载LVS内核模块
cat /proc/net/ip_vs //查看当前系统ip_vs模块版本信息
yum -y install ipvsadm
yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel //配置keepalived软件依赖环境
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_1
}
vrrp_instance v1 {
state MASTER
interface ens33
virtual_router_id 1
priority 105
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.210
}
}
virtual_server 192.168.100.210 80 { #虚拟服务器地址
delay_loop 6 #健康检查的间隔时间6s
lb_algo rr #调度算法为rr
lb_kind DR #群集工作模式为DR
persistence_timeout 6 #连接保持时间6s
protocol TCP #应用服务器采用TCP协议
real_server 192.168.100.110 80 { #第一个web服务器真实地址
weight 1 #节点的权重
TCP_CHECK { #健康检查方式TCP
connect_port 80 #检查的目标端口80
connect_timeout 3 #连接超时3秒
nb_get_retry 3 #重试次数3次
delay_before_retry 3 #重试间隔3秒
}
}
real_server 192.168.100.120 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
systemctl start keepalived //开启服务
备调度器
modprobe ip_vs //加载LVS内核模块
cat /proc/net/ip_vs //查看当前系统ip_vs模块版本信息
yum -y install ipvsadm
yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel //配置keepalived软件依赖环境
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_2
}
vrrp_instance v1 {
state BACKUP
interface ens33
virtual_router_id 1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.210
}
}
virtual_server 192.168.100.210 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 6
protocol TCP
real_server 192.168.100.110 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.100.120 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
5.测试
第一次访问192.168.100.210
第二次访问192.168.100.210