LVS+Keepalived群集
Keepalived案例分析
企业应用中,单台服务器承担应用存在单点故障的危险
单点故障一旦发生,企业服务将发生中断,造成极大的危害
Keeppalived工具介绍
专为LVS和HA设计的一款健康检查工具
支持故障自动切换(Failover)
支持节点健康状态查询(Health Checking)
官方网站:http://www.keepalived.org/
Keepalived实现原理剖析
Keppalived采用VRRP热备份协议实现Linux服务器的多机热备功能
VRRP (虚拟路由冗余协议)是针对路由器的一种备份解决方案
由多台路由组成一个热备组,通过共同的虚拟IP地址对外提供服务
每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
若当前在线的路由器失效,则其路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
Keepalived案例讲解
Keepalived可实现多机热备,每个热备组可有多台服务器
双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
实现基于Web服务的双击热备
漂移地址:192.168.10.72
主、备服务器:192.168.10.73、192.168.10.74
提供的应用服务:Web
Keepalived安装与启动
在LVS群集环境中应用时,也需用到ipvsadm管理工具
YUM安装Keepalived
启用Keepalived服务
配置Keepalived master服务器
Keepalived配置目录位于/etc/keepalived/
Keepalived.conf是主配置文件
global_defs {...}区段指定全局参数
vrrp_instance实例名称{...}区段指定VRRP热备参数
注释文字以"!"符号开头
目录samples,提供了许多配置样例作为参考
常用配置选项
router_id HA_TEST_R1:本路由器(服务器)的名称
vrrp_instance VI_1:定义VRRP热备实例
state MASTER:热备状态,MASTER表示主服务器
interface ens33:承载VIP地址的物理接口
virtual_router_id 1:虚拟路由器的ID号,每个热备组保持一致
priority 100:优先级,数值越大优先级越高
advert_int 1:通告间隔秒数(心跳频率)
auth_type PASS:认证类型
auth_pass 123456:密码字串
virtual_ipaddress{vip}:指定漂移地址(VIP),可以有多个
配置Keepalived slave服务器
Keepalived备份服务器的配置与master的配置有三个选项不同
router_id:设为自有名称
state:设为BACKUP
priority:值低于主服务器
其他选项与master相同
Keepalived双机热备效果测试
测试双机热备的效果
主、备机均启用Web服务,设置不同的内容
先后禁用、启用主服务器的网卡
执行的测试
测试1:使用ping检测192.168.10.72的连通性
测试2:访问http://192.168.10.72,确认可用性及内容变化
测试3:查看日志文件/var/log/messages中的变化
部署LVS-keepalived
部署环境
192.168.1.10 lvs01+keepalive(主) virtual-ip 20.0.0.200
192.168.1.11 lvs02+keepalive(备) virtual-ip 20.0.0.200
192.168.1.12 web1
192.168.1.13 web2
192.168.1.15 nfs
配置NFS存储服务器
安装nfs-utils、rpcbind
创建两个网页
mkdir /opt/web1
mkdir /opt/web2
echo "<h1>this is web1</h1>" > /opt/web1/index.html
echo "<h1>this is web2</h1>" > /opt/web2/index.html
配置文件、开启服务
vi /etc/exports
systemctl restart rpcbind
systemctl restart nfs
查看共享情况
showmount -e
web1 和web2 同样操作
安装httpd
挂载nfs存储服务器
mount 192.168.1.15:/opt/web1 /var/www/html/
启动服务
systemctl start httpd
测试网页
curl http://localhost
web1
vi web1.sh
sh web1.sh
脚本内容
#!/bin/bash
# lvs web1
ifconfig lo:0 192.168.1.200 broadcast 192.168.1.200 netmask 255.255.255.255 up
route add -host 192.168.1.200 dev 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
查看虚拟接口、路由
ifconfig
route -n
web2
vi web2.sh
sh web2.sh
脚本内容
#!/bin/bash
# lvs web2
ifconfig lo:0 192.168.1.200 broadcast 192.168.1.200 netmask 255.255.255.255 up
route add -host 192.168.1.200 dev 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
查看虚拟接口、路由
ifconfig
route -n
LVS1
手动加载ip_vs模块
查看
添加keepalived-2.0.13.tar.gz
安装依赖包
yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
解压压缩包
yum -y install ipvsadm
tar zxvf keepalived-2.0.13.tar.gz
开始配置
cd keepalived-2.0.13/
./configure --prefix=/
make && make install
cd keepalived/etc/init.d/
加入系统管理服务
cp keepalived /etc/init.d/
cd
设为开机自启
systemctl enable keepalived.service
编辑配置
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_01
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 6666
}
virtual_ipaddress {
192.168.1.200
}
}
virtual_server 192.168.1.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 6
protocol TCP
real_server 192.168.1.12 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get retry 3
delay_before_retry 3
}
}
real_server 192.168.1.13 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get retry 3
delay_before_retry 3
}
}
}
重新加载服务
systemctl daemon-reload
开启Keepalived
systemctl start keepalived.service
LVS2
手动加载ip_vs模块
modprobe ip_vs
查看
cat /proc/net/ip_vs
yum -y install ipvsadm
上传 解压
tar zxvf keepalived-2.0.13.tar.gz
yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
cd keepalived-2.0.13/
./configure --prefix=/
make && make install
cp keepalived/etc/init.d/keepalived /etc/init.d/
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_02
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 105
advert_int 1
authentication {
auth_type PASS
auth_pass 6666
}
virtual_ipaddress {
192.168.1.200
}
}
virtual_server 192.168.1.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 6
protocol TCP
real_server 192.168.1.12 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get retry 3
delay_before_retry 3
}
}
real_server 192.168.1.13 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get retry 3
delay_before_retry 3
}
}
}
systemctl start keepalived.service
systemctl status keepalived.service
ipaddr
发现无虚拟地址信息,主备调度器之间存在差异
ipvsadm -Ln 查看调度信息
访问浏览器
http://192.168.1.200
ipvsadm -Ln 查看连接情况
ipvsadm -Lnc 查看调度情况
测试主备自动转换功能
在lvs1上 关掉服务
systemctl stop keepalived.service
ip addr
虚拟地址没了
再次访问
ipvsadm -Lnc
在web2上
关闭服务
systemctl stop httpd
在lvs02上
查看
访问浏览器
http://192.168.1.200 只会有web1
在lvs1上重启服务
systemctl start keepalived.service
ip addr