LVS负载均衡和keepalived
一.素材与软件版本
1.软件版本:
IDAE:2019.2.2
VMware:12.5.2
虚拟机镜像:CentOs7.5标准版
Xshell:Xshell7
2.LVS介绍
2.1 LVS是什么
LVS的英文全称是Linux Virtual Server,是我们国家章文嵩博士的一个开源项目。它是一种集群技术,本质为负载均衡调度器,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。
2.2 LVS的三种模式
NAT模式:基于网络地址转换模式,用户请求在浏览器上发送给调度者LVS,在后端有三个真实的服务器,后端服务器会去处理用户的请求,处理完毕后会响应给LVS,随后经LVS返回给用,这种模式和Nginx很像。注:LVS会绑定一个虚拟IP,用户请求需要能访问此IP,所以此IP一定要处于公网,后端被代理的服务可以部署在内网里。
TUN模式:IP隧道模式,此模式下需要的所有的计算机节点必须要有一个网卡,这个网卡就是用于去建立隧道(用于服务器之间的通信),在这种模式下,后台服务所有的响应是不会经过LVS的,会直接把自己的报文响应给用户。注:此模式同样需要LVS虚拟IP处于公网,与此同时要求所有部署的后端服务都要处于公网上。
DR模式:直接路由模式,用户的请求方式还是和TUN模式一样,但响应方式不同,在DR模式下,后端服务会统一的经由一个路由将响应报文返回给用户。注:此模式下需要给路由也配置一个虚拟IP。
二、KEEPALIVED
1、KEEPALIVED作用
保证负载均衡的高可用性,完美解决了LVS所有问题,可以检查后端服务器池种的服务器健康。
2、KEEPALIVED原理
利用VRRP协议原理,主备模式通过优先级判断谁是主谁是备。备机是否切换为主机依靠的是主备之间的心跳线。
3、KEEPALIVED工作模式
①抢占模式(默认模式):主坏了之后直接切换备为主服务器,主修好后直接抢占回主服务器。
②延时抢占模式:主坏了之后直接切换备为主服务器,主修好后检查是否完全稳定后再抢占回主服务器。
③不抢占模式:主坏了之后切换备为主服务器,原来的主服务器修好也不会再抢占为主服务器。
④心跳线模式:主备服务器之间心跳线模式默认是广播模式,可以根据需求改为组播或者单播模式。
4、KEEPLIVED问题及优化
①默认是抢占模式,根据需求改为非抢占模式或延时抢占模式。
②心跳线默认是广播模式,根据需求改为组播或单播模式。
③脑裂:备机由于种种原因收不到主机发送的心跳线,导致用户不知道访问那个服务器。例如:防火墙拦截心跳线广播报文、主备之间物理网线心跳线断裂等。
④日志分隔:keepalived的默认日志在/var/log/message里,通过修改 /etc/sysconfig/keepalived中参数KEEPALIVED_OPTIONS="-D -S local数字" ,并利用rsyslog将日志分隔出来。
三、LVS+KEEPALIVED架构实现
1、实验目的
①通过客户端访问LVS高可用集群虚IP 192.168.30.100可以访问到NFS业务服务器的内容。
②当LVS_01负载均衡断开服务后,LVS_02可以进行备用,不影响用户访问业务。
③当WEB1或者WEB2关闭服务后,另外一台服务器可以正常访问业务。
2、实验拓扑
3、实验准备
①1台客户机用于访问业务,IP地址192.168.30.10。
②2台LVS负载均衡,并使用keepalived做成高可用,LVS_01 IP地址:192.168.30.14,LVS_02 IP地址:192.168.30.15。
③2台nginx web代理服务器安装nginx并将nfs服务器内容挂载到默认目录,web1 IP地址:192.168.30.12,web2 IP地址:192.168.30.13。
④NFS业务服务器创建文件夹共享给web1和web2,内容为"this is nfs share"
4、实验过程
关闭所有服务器firewalld.service和selinux
systemctl stop firewalld.service
setenforce 0
NFS业务服务器配置,创建共享文件夹 /share,并在/share文件夹中创建index.html文件,输入内容为"this is nfs share"
mkdir /share
#创建共享文件夹
echo "this is nfs share">/share/index.html
#创建共享文件内容
vim /etc/exports
内容:
/share 192.168.30.0/24(rw,sync)
#配置共享文件夹/share 共享网段192.168.0.0/24 rw可读写,sync并同步
systemctl start nfs
#启动ngs服务
exportfs -vr
显示内容:exporting 192.168.30.0/24:/share
#热加载并查看本机nfs共享
配置web服务器,安装nginx并挂载NFS到默认根目录下并创建虚拟网卡lo:0配置ip192.168.30.100。
web1和web2执行:
yum install epel-release -y
#先安装额外源
yum install nginx -y
#yum安装nginx
systemctl start nginx
#开启nginx服务
showmount -e 192.168.30.11
显示内容:/share 192.168.30.0/24
#查看此服务器是否有NFS共享
rpm ql nginx |grep html
#查看nginx默认web根目录
mount 192.168.30.11:/share /usr/share/nginx/html/
#临时挂载 nfs服务器的/share文件夹到/usr/share/nginx/html/目录下,所以问/usr/share/nginx/html/的内容即访问/share内容
curl 192.168.30.13
curl 192.168.30.12
#显示内容this is nfs share
#分别访问俩个web服务器内容,查看是否挂载nfs成功显示网页内容。
ifconfig lo:0 192.168.30.100 netmask 255.255.255.2555
#添加虚拟网卡lo:0并配置ip
route add -host 192.168.30.100 dev lo:0
#添加路由192.168.30.100走lo:0网卡
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
#查看内核参数是否配置完成
LVS_01和LVS_02安装ipvsadm并启动服务
yum install ipvsadm -y
#yum安装ipvsadm服务,即LVS负载均衡的真实服务名
systemctl start ipvsadm.service
#开启ipvsadm服务,此步骤启动服务报错
systemctl status ipvsadm.service>1.txt
cat 1.txt
#将ipvsadm服务启动报错提示导给1.txt文件并查看。内容如下截图
ipvsadm-save>/etc/sysconfig/ipvsadm
#报错信息提示是没有/etc/sysconfig/ipvsadm文件,解决方法是将ipvsadm保存到/etc/sysconfig/ipvsadm文件下。
systemctl restart ipvsadm.service
#重新启动ipvsadm成功
⑤LVS_01和LVS_02安装keepalived服务并配置启动
yum install keepalived.x86_64 -y
#安装keepalived.x86_64
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
#查看添加内核内容有则成功
vim keepalived.conf
#编辑配置文件
修改内容:
global_defs模块中
smtp_server 127.0.0.1
#改为127.0.0.1即改为本机
router_id LVS_01
#第一条LVS名称改为LVS_01
#vrrp_skip_check_adv_addr
#vrrp_strict
#vrrp_garp_interval 0
#vrrp_gna_interval 0
#以上4行安全机制添加#号注释掉
virtual_ipaddress {
192.168.30.100
}
#虚拟主机地址改为要配置的虚拟ip,可配置多个,若只写一个将模板的其他2个删除。
virtual_server 192.168.30.100 80 {
#虚拟ip地址改为配置的虚拟ip和web服务端口号
delay_loop 6
lb_algo rr
lb_kind DR
#模式改为DR模式即直连模式
persistence_timeout 50
protocol TCP
real_server 192.168.30.12 80 {
#第一台真实ip地址和web服务端口号
weight 1
TCP_CHECK {
#添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器
connect_port 80
#添加连接端口80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.30.13 80 {
#第二台真实ip地址和web服务端口号
weight 1
TCP_CHECK {
#添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器
connect_port 80
#添加连接端口80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
#俩台真实服务器后的所有内容删除即可,修改完成后保存退出。完整配置文件如下图
scp keepalived.conf 192.168.30.15:/etc/keepalived/
LVS_02配置文件修改:
#将配置好的配置文件传到LVS_02服务器上
#第一步修改 router_id LVS_02 名称改为LVS_02
#第二步要修改vrrp_instance VI_1模块中的state为BACKUP,和priority 90改为比主LVS优先级低的等级
#其他不用修改保存即可
systemctl restart ipvsadm keepalived
#重启服务
ipvsadm -ln
显示内容:
TCP 192.168.30.100:80 rr persistent 50
-> 192.168.30.12:80 Route 1 0 0
-> 192.168.30.13:80 Route 1 0 1
#查看有2个真实服务器的ip即可。
5、实验结果检验
①在客户机上curl 192.168.30.100查看内容是否为nfs服务器共享的内容“this is nfs share”
②关闭LVS_01测试查看内容是否还为nfs服务器共享的内容“this is nfs share”