目录
一、Keepalived
1.1 为什么要用Keepalived
● 企业应用中,单台服务器承担应用存在单点故障的危险
● 单点故障一旦发生,企业服务将发生中断,造成极大的危害
1.2 Keepalived工具介绍
专为LVS和HA设计的一款健康检查工具
● 支持故障自动切换(Failover)
● 支持节点健康状态检查(Health Checking)
1.3 Keepalived实现原理剖析
Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
● 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
● 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
● 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
1.4 Keepalived安装与启动
在LVS群集环境中应用时,也需用到lipvsadm管理工具
YUM安装Keepalived
启用Keepalived服务
二、配置Keepalived master服务器
Keepalived配置目录位于/etc/keepalived/
keepalived.conf是主配置文件
● global_defs {…}区段指定全局参数
● ovrrp_instanc实例名称{…}区段指定VRRP热备参数
● 注释文字以"!"”符号开头
● 目录samples,提供了许多配置样例作为参考
2.1 常用配置选项
● router idHA_TEST_R1:本路由器(服务器)的名称
● vrrp_instance VI_1·定义VRRP热备实例
● state MASTER:热备状态,MASTER表示主服务器i
● 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高可用群集搭建
5.1 配置环境:VMnet1
192.168.100.10 | lvs1+keepalive(主) |
---|---|
192.168.100.20 | lvs2+keepalive(备) |
192.168.100.30 | web1 |
192.168.100.40 | web2 |
192.168.100.50 | nfs |
192.168.100.60 | client |
5.2 配置NFS
[root@server5 ~]# systemctl stop firewalld #关闭防火墙
[root@server5 ~]# setenforce 0
[root@server5 ~]# yum -y install rpcbind nfs-utils
[root@server5 ~]# mkdir /opt/web1 /opt/web2 #创建网页
[root@server5 ~]# echo "<h1> this is web1. </h1>" > /opt/web1/index.html
[root@server5 ~]# echo "<h1> this is web2. </h1>" > /opt/web2/index.html
[root@server5 ~]# vi /etc/exports #添加
/opt/web1 192.168.100.30/24(ro)
/opt/web2 192.168.100.40/24(ro)
[root@server5 ~]# systemctl restart nfs
[root@server5 ~]# systemctl restart rpcbind
[root@server5 ~]# showmount -e #查看
Export list for server5:
/opt/web2 192.168.100.40/24
/opt/web1 192.168.100.30/24
5.3 配置web1和web2
web1:
[root@server3 ~]# systemctl stop firewalld #关闭防火墙
[root@server3 ~]# setenforce 0
[root@server3 ~]# yum -y install httpd #新系统未下载过
[root@server3 ~]# showmount -e 192.168.100.50
Export list for 192.168.100.50:
/opt/web2 192.168.100.40/24
/opt/web1 192.168.100.30/24
[root@server3 ~]# mount 192.168.100.50:/opt/web1 /var/www/html #挂载到ftp服务器
[root@server3 ~]# df -Th #检查挂载
[root@server3 ~]# systemctl restart httpd
[root@server3 ~]# netstat -anpt |grep httpd #检查服务是否开启
tcp6 0 0 :::80 :::* LISTEN 54179/httpd
[root@server3 ~]# curl http://localhost
<h1> this is web1. </h1>
[root@server3 ~]# vi web1.sh
#!/bin/bash
ifconfig lo:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up #生成lo端口为VIP地址,广播地址255.255.255.255,为了能让调度器发消息可接收
route add -host 192.168.100.100 dev lo:0 #lo接口生成一个路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore #只有发给lo网卡的请求才会响应
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce #回包时使用lo网卡地址回包,而不是虚拟地址
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore #所有网卡发送给自己网卡的请求才会响应
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce #所有网卡回包时使用自己网卡地址回包,而不是虚拟地址
sysctl -p &> /dev/null #生效并不输出信息
[root@server3 ~]# sh web1.sh
[root@server3 ~]# ifconfig #检查下ip是否生成
[root@server3 ~]# route -n
web2:
[root@server4 ~]# systemctl stop firewalld #关闭防火墙
[root@server4 ~]# setenforce 0
[root@server4 ~]# yum -y install httpd
[root@server4 ~]# showmount -e 192.168.100.50
Export list for 192.168.100.50:
/opt/web2 192.168.100.40/24
/opt/web1 192.168.100.30/24
[root@server4 ~]# mount 192.168.100.50:/opt/web2 /var/www/html #挂载到ftp服务器
[root@server4 ~]# df -Th
[root@server4 ~]# systemctl start httpd
[root@server4 ~]# netstat -anpt |grep httpd #检查服务是否开启
tcp6 0 0 :::80 :::* LISTEN 54055/httpd
[root@server4 ~]# curl http://localhost
<h1> this is web2. </h1>
[root@server4 ~]# vi web2.sh
#!/bin/bash
ifconfig lo:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up #生成lo端口为VIP地址,广播地址255.255.255.255,为了能让调度器发消息可接收
route add -host 192.168.100.100 dev lo:0 #lo接口生成一个路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore #只有发给lo网卡的请求才会响应
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce #回包时使用lo网卡地址回包,而不是虚拟地址
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore #所有网卡发送给自己网卡的请求才会响应
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce #所有网卡回包时使用自己网卡地址回包,而不是虚拟地址
sysctl -p &> /dev/null #生效并不输出信息
[root@server4 ~]# sh web2.sh
[root@server4 ~]# ifconfig #检查下ip是否生成
[root@server4 ~]# route -n
5.4 配置LVS调度服务器
5.41 配置lvs1主调度服务器
放入keepalived-2.0.13.tar软件包
[root@server1 ~]# systemctl stop firewalld #关闭防火墙
[root@server1 ~]# setenforce 0
[root@server1 ~]# modprobe ip_vs #对ip_vs的探测加载
[root@server1 ~]# cat /proc/net/ip_vs #查看基本信息
IP Virtual Server version 1.2.1 (size=4096) #显示版本信息
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn #lvs未设置
[root@server1 ~]# yum -y install ipvsadm #安装管理软件ipvsadm,不需要启动
[root@server1 ~]# vi dr.sh #编写调度脚本
#!/bin/bash
ifconfig ens33:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up #生成ens33:0端口为VIP地址,广播地址255.255.255.255,为了能让调度器发消息可接收
route add -host 192.168.100.100 dev ens33:0 #给ens33:0添加路由
ipvsadm -C #清除虚拟服务器表中所有记录
ipvsadm -A -t 192.168.100.100:80 -s rr #创建虚拟服务器
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.30:80 -g #添加服务器节点,虚拟地址映射真实web地址
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.40:80 -g #添加服务器节点,虚拟地址映射真实web地址
ipvsadm -Ln #查看节点状态,加个“-n”将以数字形式显示地址、端口信息
###参数注释
"-A"表示添加虚拟服务器
"-a"表示添加真实服务器
"-t"用来指定VIP地址及TCP端口
"-r"用来指定RIP地址及TCP端口
"-s"用来指定负载调度算法一一rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接)
"-m"表示使用NAT群集模式("-g"是DR模式,"-i"是TUN模式)
[root@server1 ~]# sh dr.sh
[root@server1 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel #安装依赖包
[root@server1 ~]# tar zxvf keepalived-2.0.13.tar.gz #解压缩keepalived软件包
[root@server1 ~]# cd keepalived-2.0.13/
[root@server1 keepalived-2.0.13]# ./configure --prefix=/ #配置
[root@server1 keepalived-2.0.13]# make && make install #编译与安装
[root@server1 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d #把keepalived加入系统管理服务
[root@server1 keepalived-2.0.13]# cd
[root@server1 ~]# systemctl enable keepalived.service #设置开机自启
[root@server1 ~]# vim /etc/keepalived/keepalived.conf #删除所有配置,重新添加
! Configuration File for keepalived
global_defs {
router_id lvs_01 #本服务器的名称
}
vrrp_instance vi_1 { #定义VRRP热备实例
state MASTER #热备状态,MASTER(主服务器)
interface ens33 #承载VIP地址的物理接口
virtual_router_id 51 #虚拟路由器的ID号,每个热备组保持一致
priority 110 #优先级,数值越大优先级越高
advert_int 1 #通告间隔秒数
authentication { #热备认证信息,每个热备组保持一致
auth_type PASS #认证类型
auth_pass 6666 #密码字符串
}
virtual_ipaddress { #指定漂移地址(VIP)
192.168.100.100
}
}
virtual_server 192.168.100.100 80 { #虚拟服务器地址(VIP)、端口
delay_loop 6 #健康检查的间隔时间(秒)
lb_algo rr #调度算法(rr)
lb_kind DR #群集工作模式(DR)
persistence_timeout 6 #连接保持时间(秒)
protocol TCP #应用服务器采用的TCP协议
real_server 192.168.100.30 80 { #第一个web服务器节点的地址、端口
weight 1 #节点权重
TCP_CHECK { #健康检查方式
connect_port 80 #检查的目标端口
connect_timeout 3 #连接超时(秒)
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
}
}
real_server 192.168.100.40 80 { #第二个web服务器节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@server1 ~]# systemctl start keepalived.service #启动服务
[root@server1 ~]# ipvsadm -Ln #查看后台调度情况
5.42 配置lvs2备用调度服务器
放入keepalived-2.0.13.tar软件包
配置跟主调度器一样,安装后...
........
[root@server2 keepalived-2.0.13]# cd
[root@server2 ~]# systemctl enable keepalived.service #设置开机自启
5.43 lvs1设置免密登录
[root@server1 ~]# ssh-keygen -t rsa
[root@server1 ~]# ssh-copy-id 192.168.100.20 #输入yes 然后输入密码
[root@server1 ~]# scp /etc/keepalived/keepalived.conf root@192.168.100.20:/etc/keepalived/ #拷贝文件
keepalived.conf 100% 814 383.3KB/s 00:00
5.44 继续配置lvs2备用调度服务器
[root@server2 ~]# vim /etc/keepalived/keepalived.conf #修改
修改参数
router_id lvs_02 服务器名称
state BACKUP 热备状态,从服务器
priority 105 优先级
[root@server2 ~]# systemctl start keepalived.service #启动服务
[root@server2 ~]# systemctl status keepalived.service #查看服务状态
六、效果验证
6.1 查看漂移地址
[root@server1 ~]# ip addr
[root@server2 ~]# ip addr
6.2 查看主备LVS转换
[root@server1 ~]# systemctl stop keepalived.service #断掉主LVS
[root@server1 ~]# ip addr #查看地址信息
[root@server2 ~]# tail -f /var/log/messages
[root@server2 ~]# ip addr #查看地址信息
6.3 LVS1上开启keepalived.service ,查看效果
[root@server1 ~]# systemctl start keepalived.service #开启服务
[root@server1 ~]# ip addr #查看地址信息
6.4 打开网页查看调度