LVS+Keepalived
Keepalived
专为LVS和HA设计的一款健康检查工具
支持故障自动切换(Failover)
支持节点健康状态检查(Health Checking)
作用
企业应用中,单台服务器承担应用存在单点故障的危险,单点故障一旦发生,企业服务将发生中断,造成极大危害。keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能,双机热备的故障切换是由虚拟IP地址的漂移来实现的,适用于各种应用服务器。
原理
由多台服务器组成一个热备组,通过共用的虚拟IP地址对外提供服务。每个热备组内同时只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务。
配置文件
vi /etc/keepalived/keepalived.conf
global_defs {此区段指定全局参数}
vrrp_instance 实例名称 {此区段指定VRRP热备参数}
注释文字以 “!”开头
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:表示通告间隔秒数为1(心跳频率)
auth_type PASS:表示认证类型为密码
auth_pass 123456:表示密码为123456
virtual_ipaddress {此段为虚拟地址,可以有多个}
LVS+Keepalived高可用群集
本项目需要主、备两台调度器,两台服务器作为节点,一台NFS共享存储服务器以及一台客户机。
NFS
192.168.10.16
yum -y install nfs-utils rpcbind
mkdir -p /opt/web1
mkdir -p /opt/web2
vi /etc/exports
/opt/web1 192.168.10.15(ro)
/opt/web2 192.168.10.14(ro)
systemctl start nfs
showmount -e #查看本机共享存储发布情况
节点服务器
server1
192.168.10.14
showmount -e 192.168.10.16 ##查看NFS服务器发布情况
yum -y install httpd
mount 192.168.10.16:/opt/web1 /var/www/html
vi server.sh
#!/bin/bash
ifconfig lo:0 192.168.10.100 broadcast 192.168.10.100 netmask 255.255.255.255 up
#添加虚拟网口
route add -host 192.168.10.100 dev 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
sh server.sh
ifconfig #查看虚拟网口配置情况
server2
192.168.10.15
showmount -e 192.168.10.16
yum -y install httpd
mount 192.168.10.16:/opt/web2 /var/www/html
vi server.sh
#!/bin/bash
ifconfig lo:0 192.168.10.100 broadcast 192.168.10.100 netmask 255.255.255.255 up
#添加虚拟网口
route add -host 192.168.10.100 dev lo:0 #给lo:0添加路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null
sh server.sh
ifconfig
调度器
主调度器
192.168.10.12
modprobe ip_vs ##加载LVS内核模块
cat /proc/net/ip_vs ##查看当前系统ip_vs模块版本信息
yum -y install ipvsadm ##安装ipvsadm
yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel ##keepalived依赖环境
tar -zxvf keepalived-2.0.13.tar.gz
cd keepalived-2.0.13/
./configure --prefix=/
make && make install
cp keepalived/etc/init.d/keepalived /etc/init.d/ ##将keepalived加入系统服务,可用systemctl管理
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 6666
}
virtual_ipaddress {
192.168.10.100
}
}
virtual_server 192.168.10.100 80 { #虚拟服务器地址
delay_loop 6 #健康检查的间隔时间6s
lb_algo rr #调度算法为rr
lb_kind DR #群集工作模式为DR
persistence_timeout 6 #连接保持时间6s
protocol TCP #应用服务器采用TCP协议
real_server 192.168.10.14 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.10.15 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
systemctl start keepalived ##开启服务
systemctl stop firewalld
setenforce 0
备调度器
192.168.10.13
除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 6666
}
virtual_ipaddress {
192.168.10.100
}
}
virtual_server 192.168.10.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 6
protocol TCP
real_server 192.168.10.14 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.10.15 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
测试效果
使用“ip addr”命令查看地址信息
当主备调度器正常工作时
主调度器获得虚拟IP,备调度器未获得
当主调度器故障,备调度器正常工作
备调度器成为主,获得虚拟IP