- 1.实验环境
需要四台主机
vip(虚拟地址):192.168.184.200
角色 主机名 IP 接口
从调度器 ds01 192.168.184.130 ens33
主调度器 ds02 192.168.184.131 ens33
rs节点1 rs01 192.168.184.132 ens33
rs节点2 rs02 192.168.184.132 ens33
注:关闭防火墙和selinux
Keepalived构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用来做双机热备。
Keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效点节,恢复后再重新加入
- 2.安装keepalived
第一种安装方法:
rpm安装
yum -y install keepalived
查看安装路径:
# rpm -ql keepalived-1.3.5-1.el7.x86_64
第二种安装方法(源码安装)
采用第二种方式安装
在主节点上安装keepalived
解决依赖
# yum -y install gcc openssl-devel pcre-devel libnl-devel
# tar zxf keepalived-2.0.18.tar.gz
# cd keepalived-2.0.18
# ./configure --prefix=/usr/local/keepalived
# make && make install
配置Keepalived+LVS-DR模式
虚拟 IP 在某时刻只能属于某一个节点,另一个节点作为备用节点,当主节点不可用时,备用节点接管虚拟 IP,提供正常服务。
主节点ds02配置
keepalived配置文件keepalived.conf,主要包括以下几个配置区域:global_defs、vrrp_instance和virtual_server
global_defs:主要是配置故障发生时的通知对象以及机器标识
vrrp_instance:用来定义对外提供服务的VIP区域及其相关属性
virtual_server:虚拟服务器定义
配置文件详解
! Configuration File for keepalived #!表示注释
global_defs { #全局定义部分
router_id ds02 #表示运行keepalived服务器的一个标识名字可以随便取
}
vrrp_instance lvs-ds02 {
state MASTER #指定keepalived的角色,此服务为master
interface ens33 #指定监测网络的接口
virtual_router_id 51 #虚拟路由的标识
priority 100 #定义优先级,数字越大优先级越高,1-255之间
advert_int 1 #设置同步检查的时间间隔,单位是秒
authentication { #设置验证类型
auth_type PASS #验证类型为PASS
auth_pass 1111 #验证的密码
}
virtual_ipaddress {
192.168.184.200 #设置虚拟IP
}
}
virtual_server 192.168.184.200 80 { #定义虚拟服务器,需指定虚拟ip和端口
delay_loop 6
lb_algo rr #设置健康检查时间,单位为秒
lb_kind DR #设置负载调度算法
persistence_timeout 50 #设置会话持续时间
protocol TCP #设置转发协议的类型
real_server 192.168.184.132 80 { #定义realserver,需指定ip和端口
weight 1 #指定权重
TCP_CHECK { #设置检测后端realserver的方式为获取tcp协议报文
connect_timeout 3 #设置超时时间
nb_get_retry 3 #设置超时时候重试几次
connect_port 80
delay_before_retry 3 #在重试的时候的时间间隔
}
}
real_server 192.168.184.133 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 80
delay_before_retry 3
}
}
}
修改keepalived.conf配置文件
# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
# mkdir /etc/keepalived
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# vi /etc/keepalived/keepalived.conf
编辑内容如下
! Configuration File for keepalived
global_defs {
router_id ds02
}
vrrp_instance lvs-ds02 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.184.200
}
}
virtual_server 192.168.184.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 192.168.184.132 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
connect_port 80
}
}
real_server 192.168.184.133 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 80
}
}
}
重启keepalived 服务
# systemctl restart keepalived
# systemctl enable keepalived
# systemctl status keepalived
安装 ipvsadm
安装完不需要做任何配置,启动方式由keepalived 控制
# yum -y install ipvsadm
备用节点 ds01配置
安装keepalived 和主节点相同
修改 keepalived.conf配置文件
备用节点的keepalived.conf文件配置与主节点基本相同,只是router_id,state,priority三处不同
把主的配置文件复制到备上做修改:
# scp /etc/keepalived/keepalived.conf root@192.168.184.130:/etc/keepalived/
修改以下内容:
# vi /etc/keepalived/keepalived.conf
router_id ds01 修改id 标识
state BACKUP 修改状态
priority 99 修改优先级
启动keepalived:
systemctl start keepalived
systemctl enable keepalived
systemctl status keepalived
安装ipvsadm
# yum -y install ipvsadm
3测试主备切换
(1).查看主备情况
当主调度器宕掉时vip(虚拟IP) 会漂移到从调度器上
(2).测试主备vip地址漂移
模拟keepalived
systemctl stop keepalived
VIP不在了
查看从调度器情况:
VIP自动切换到从了
把停掉的主调度器服务起来:
VIP又漂移回ds02上了,因为这是 keepalived抢占模式,keepalived默认是抢占模式优先级高于从,当主重新加入集群就会抢占回来
keepalived脑裂现象
脑裂可能产生的原因:
1.在高可用集群之间心跳链路发生故障
心跳老化,断掉
IP配置冲突,网卡及驱动坏了
心跳间连接设备故障(网卡交换机)
2.高可用服务器s防火墙阻挡了心跳消息传输
3.高可用服务器上心跳网卡地址等信息配置不一致
4.其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等
5.Keepalived配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题
4配置rs1和rs2
(rs1和rs2配置相同)
1.关闭ARP转发(在两台RS上都需要同样的操作)
vi /etc/sysctl.conf
在尾部添加以下内容
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
使内核参数修改生效:
sysctl -p
2.配置虚拟ip地址(VIP)
生成回环口配置文件:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo ifcfg-lo:0
# vi ifcfg-lo:0
内容如下
DEVICE=lo:0
IPADDR=192.168.30.200
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
重启network服务:
# systemctl restart network
安装httpd
# yum install -y httpd
# systemctl start httpd
# echo "192.168.30.200" > /var/www/html/index.html
(为了测试负载均衡,各个服务器的页面不同)
5测试VIP
在主节点 (ds01)查看 lvs 状态
web访问 VIP 地址:
刷新页面:
注意:要把keepalived配置文件中 #persistence_timeout 连接保持注释掉,要不调度器就会给同一个 web池服务里的主机发请求