在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的。此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是 Nginx。通过其反向代理的能力能够轻松实现负载均衡,当有服务出现异常,也能够自动剔除。但是负载均衡服务自身也可能出现故障,因此需要引入其他的软件来实现负载均衡服务的高可用。本文就介绍了一种基于 LVS+Keepalived 的方式,来实现高可用 Web 集群。
前言
一、keepalived双机热备
(一)、概述
Keepalived 是一个基于 VRRP 协议来实现的 LVS 服务高可用方案,可以解决静态路由出现的单点故障问题。
1.原理
在一个 LVS 服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但
是对外表现为一个虚拟 IP,主服务器会发送 VRRP 通告信息给备份服务器,当备份服务器收不到 VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟 IP,继续提供服务,从而保证了高可用性。
解决单点故障问题
2.功能模块
core 主进程启动
vrrp vrrp协议:热备份路由协议
check 健康状态检测
3.双机热备的脑裂现象
Keepalived配置里同一 VRRP实例,如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发生。
vrrp实例名字不一致、优先级一致
防火墙打开,导致心跳无法正常通信
网卡故障,网卡进行多路复用
案列
192.168.238.138
192.168.238.139(web)
192.168.238.140(web)
基础环境(防火墙配置、宽容模式、IP配置)
(二)、web配置
192.168.238.139(web)
yum install -y keepalived
yum install -y epel-release
yum install -y nignx
cd /etc/keepalived
vim keepalived.conf
systemctl start keepalived
ip a
systemctl start nginx
192.168.238.140(web)
yum install -y keepalived
yum install -y epel-release
yum install -y nignx
cd /etc/keepalived
vim keepalived.conf
systemctl start keepalived
systemctl start nginx
192.168.238.138
创建个共享目录
mkdir /opt/kkk -p
vim /etc/exports
systemclt start nfs
将web的访问目录挂载到共享目录上
showmount -e 192.168.238.138:/opt/kkk /usr/share/nginx/html
停掉master(139) systemctl stop keepalived
查看backup(140) ip a
证明双击热备成功
(三)、测试
在138上进行访问
cd /opt/kkk
echo HI > index.html
再将原master启动又恢复原master
二、keepalived+lvs(DR)
作用 使用keepalived解决lvs的单点故障,高可用集群。
案列
192.168.238.136(lvs备)
192.168.238.138(lvs)
192.168.238.139(web)
192.168.238.140(web)
(一)、调度器配置
192.168.238.138(lvs)
yum install -y epel-release
yum install -y ipvsadm
cd /etc/sysconfig/network-scripts
vim ifcfg-ens33:0
vim /etc/sysctl.conf中插入
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
modprobe ip_vs
systemctl start ipvsadm
ipvsadm -A -t 192.168.238.100:80 -s rr
ipvsadm -a -t 192.168.238.100:80 -r 192.168.238.139:80 -g
ipvsadm -a -t 192.168.238.100:80 -r 192.168.238.140:80 -g
ipvsadm-save > /etc/sysconfig/ipvsadm
ipvsadm -ln
yum install -y keepalived
vim /etc/keepalived/keepalived.conf
systemctl start keepalived
192.168.238.136(lvs备)
同192.168.238.138(lvs)操作
除了keepalived文件和不需要创建ens33:0
ip a
(二)、web节点配置
192.168.238.139(web)
cd /usr/share/nginx/html
echo OK > index.html
vim /etc/sysctl.conf中插入
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce=2
sysctl -p
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
systemctl restart network
route add -host 192.168.238.100/32 dev lo:0
192.168.238.140(web)同139操作
除了访问文件
cd /usr/share/nginx/html
echo HOW > index.html
(三)、测试
正常访问可以实现负载均衡
停掉138的keepalived
systemctl stop keepalived访问依然正常,136中 ip a 可以查看到虚拟IP,表面已实现双击热备和负载均衡
总结
今天的双机备热比较简单,只需修改配置文件即可。keepalived+lvs要在LVS的DR工作模式之上,构建好DR后再创建备用LVS即可。理清思绪,保持头脑清醒,才能更快的将实验做通。