文章目录
- 引言
- 一、Keepalived工具介绍
- 二、Keepalived实现原理剖析
- 三、LVS+Keepalived配置
- 3.1 Keepalived安装与启动
- 3.2 配置Keepalived master服务器
- 3.3 常用配置选项
- 3.4 配置Keepalived slave服务器
- 四、配置LVS+Keepalived
- 4.1 配置环境:
- 4.2 NFS共享服务器
- 4.3 web服务器
- 4.4 LVS调度器
- 五、测试
引言
- 因为企业应用中,单台LVS服务器(单挂)承担应用存在单点故障的危险;
- 单点故障一旦发生,企业服务将发生中断,造成极大的危害。
一、Keepalived工具介绍
- 专为LVS和HA设计的一款健康检查工具
作用:
支持故障自动切换(Failover)
支持节点健康状态检查(Health Checking)
官方网站∶http∶//www.keepalived.org/
二、Keepalived实现原理剖析
1、Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
2、VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
- 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
- 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
- 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
3、Keepalived案例讲解
- Keepalived可实现多机热备,每个热备组可有多台服务器
- 双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
三、LVS+Keepalived配置
1、Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用做双击热备;
2、使用Keepalived构建LVS群集更加简便易用;
3、主要优势
- 对LVS负载调度器实现热备切换,提高可用性;
- 对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。
3.1 Keepalived安装与启动
1、在LVS群集环境中应用时,也需要用到ipvsadm管理工具
2、YUM安装Keepalived
3、启用Keepalived服务
3.2 配置Keepalived master服务器
keepalived配置目录位于/etc/keepalived
keepalived.conf是主配置文件
- global_defs{…}区段指定全局参数
- vrrp_instance 实例名称{…}区段指定VRRP热备参数
- 注释文字“!”符号开头
- 目录samples,提供了许多配置样例作为参考
3.3 常用配置选项
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)
3.4 配置Keepalived slave服务器
Keepalived备份服务器的配置与master的配置由三个选项不同
1、router_id:设为自有名称
2、state:设为BACKUP
3、priority:值低于主服务器
其他选项与master相同
四、配置LVS+Keepalived
Keepalived双机热备效果测试
测试双机热备的效果
1、主、备机均启用web服务,设置不同内容
2、先后禁用、启用主服务器的网卡
执行的测试
测试1:使用ping检测192.168.40.100的连通性
测试2:访问http://192.168.40.100,确认可用性及内容变化
测试3:查看日志文件/var/log/message中的变化
4.1 配置环境:
主机名 | IP地址 | 角色 |
lvs01 | 192.168.40.11 | lvs01+keepalived |
lvs02 | 192.168.40.12 | lvs02+keepalived |
VIP | 192.168.40.100 | 虚拟IP地址 |
web1 | 192.168.40.13 | web节点1 |
web2 | 192.168.40.14 | web节点2 |
nfs | 192.168.40.15 | nfs远程共享目录 |
4.2 NFS共享服务器
[root@nfs ~]# mkdir /web1
[root@nfs ~]# mkdir /web2
[root@nfs ~]# echo "<h1>this is server 1.</h1>" > /web1/index.html
[root@nfs ~]# echo "<h1>this is server 2.</h1>" > /web2/index.html
[root@nfs ~]# rpm -qa | grep nfs-utils
nfs-utils-1.3.0-0.48.el7.x86_64
[root@nfs ~]# rpm -qa | grep rpcbind
rpcbind-0.2.0-42.el7.x86_64
[root@nfs ~]# vi /etc/exports
/web1 192.168.40.13 (ro)
/web2 192.168.40.14 (ro)
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# showmount -e #nfs服务器的 显示输出目录列表
4.3 web服务器
[root@web1 ~]# mount 192.168.40.15:/web1 /var/www/html/
[root@web1 ~]# df -Th #查看是否挂载成功
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# showmount -e 192.168.40.15
[root@web1 ~]# vim web1.sh
#!/bin/bash
# lvs dr模式 web1ifconfig lo:0 192.168.40.100 broadcast 192.168.40.100 netmask 255.255.255.255 up
route add -host 192.168.40.100 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
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@web1 ~]# sh web1.sh #执行脚本
[root@web1 ~]# ifconfig
[root@web1 ~]# route -n #查看路由表
4.4 LVS调度器
LVS01
[root@lvs01 ~]# modprobe ip_vs
[root@lvs01 ~]# 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
[root@lvs01 ~]# yum -y install ipvsadm
[root@lvs01 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel #安装编译工具与开发包
[root@lvs01 ~]# tar zxvf keepalived-2.0.13.tar.gz
[root@lvs01 ~]# cd keepalived-2.0.13/
[root@lvs01 keepalived-2.0.13]# ./configure --prefix=/ #配置
[root@lvs01 keepalived-2.0.13]# make && make install #编译与安装
[root@lvs01 ~]# cp keepalived/etc/init.d/keepalived /etc/init.d #把keepalived加入系统管理服务
[root@lvs01 ~]# systemctl enable keepalived #设置开机自启
[root@lvs01 ~]# vi /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.40.100
}
}
virtual_server 192.168.40.100 80 { ##虚拟服务器地址(VIP)、端口
delay_loop 6 ##健康检查的间隔时间(秒)
lb_algo rr ##调度算法(rr)
lb_kind DR ##群集工作模式(DR)
persistence_timeout 6 ##连接保持时间(秒)
protocol TCP ##应用服务器采用的TCP协议
real_server 192.168.40.13 80 { ##第一个web服务器节点的地址、端口
weight 1 ##节点权重
TCP_CHECK { ## 健康检查方式
connect_port 80 ##检查的目标端口
connect_timeout 3 ## 连接超时(秒)
nb_get_retry 3 ##重试次数
delay_before_retry 3 ##重试间隔
}
}
real_server 192.168.40.14 80 { ##第二个web服务器节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@lvs01 ~]# systemctl restart keepalived.service
[root@lvs01 ~]# scp /etc/keepalived/keepalived.conf root@192.168.40.12:/etc/keepalived/keepalived.conf #把lvs01上的keepalived的配置拷贝到lvs02上
配置lvs02
与vs01相同的安装步骤,配置文件需要改动三处:
[root@lvs02 ~]# vi /etc/keepalived/keepalived.conf
router_id LVS_02
state BACKUP
priority 105
[root@lvs02 ~]# systemctl restart keepalived.service
五、测试
1、lvs01
[root@lvs01 ~]# ip addr #查看ens33端口是否绑定了VIP
[root@lvs01 ~]# tail -100 /var/log/messages #查看日志最近100行
此为lvs01是主服务器(2个凭证)
在浏览器访问VIP:192.168.40.100
删除缓存,再刷新。
[root@lvs01 ~]# ipvsadm -Lnc #查看调度器是否正常工作
IPVS connection entries
pro expire state source virtual destination
TCP 14:55 ESTABLISHED 192.168.40.1:54584 192.168.40.100:80 192.168.40.14:80
TCP 14:55 ESTABLISHED 192.168.40.1:54583 192.168.40.100:80 192.168.40.13:80
TCP 00:59 NONE 192.168.40.1:0 192.168.40.100:80 192.168.40.14:80
2.停止lsv01,查看lsv02是否会替换成主服务器
[root@lvs01 ~]# systemctl stop keepalived.service #停止主服务器
[root@lvs02 ~]# tail -f /var/log/messages #在lvs02上,查看日志,已成为了主服务器,正发送ARP....
[root@lvs02 ~]# ip addr #ens33上是否绑定了VIP
在lvs01上,输入ip addr ,ens33上的VIP已解绑了;
浏览器上再访问VIP:192.168.40.100,依旧有效,实现了双机热备!
3.重新开启lvs0调度器
[root@lvs01 ~]# systemctl start keepalived.service
[root@lvs01 ~]# ip addr
因为优先级高,又成为了主服务器。