LVS负载均衡+keepalived架构

发布时间 2023-03-27 15:15:07作者: 此生何必111

一、keepalivedi简介

1.keepalived原理

利用VRRP协议原理,主备模式通过优先级判断谁是主谁是备。备机是否切换为主机依靠的是主备之间的心跳线。

2. keepalived作用

保证负载均衡的高可用性,完美解决了LVS所有问题,可以检查后端服务器池种的服务器健康。

3. keepalived工作模式

抢占模式(默认模式):主坏了之后直接切换备为主服务器,主修好后直接抢占回主服务器。

不抢占模式:主坏了之后切换备为主服务器,原来的主服务器修好也不会再抢占为主服务器。

延时抢占模式:主坏了之后直接切换备为主服务器,主修好后检查是否完全稳定后再抢占回主服务器。

心跳线模式:主备服务器之间心跳线模式默认是广播模式,可以根据需求改为组播或者单播模式。

4.  keepalived优化及问题

默认是抢占模式,根据需求改为非抢占模式或延时抢占模式。

心跳线默认是广播模式,根据需求改为组播或单播模式。

日志分隔: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. 实验过程

4.1 关闭防火墙和安全防护模块

1 systemctl  stop firewalld.service
2 setenforce 0

4.2 NFS业务服务器配置,创建共享文件夹 /share,并在/share文件夹中创建index.html文件,输入内容为"this  is  nfs  share"

 1 mkdir /share
 2 #创建共享文件夹
 3 echo "this is nfs share">/share/index.html
 4 #创建共享文件内容
 5 vim /etc/exports
 6 内容:
 7 /share 192.168.30.0/24(rw,sync)
 8 #配置共享文件夹/share  共享网段192.168.0.0/24 rw可读写,sync并同步
 9 systemctl start nfs
10 #启动ngs服务
11 exportfs -vr
12 显示内容:exporting 192.168.30.0/24:/share
13 #热加载并查看本机nfs共享

4.3 配置web服务器,安装nginx并挂载NFS到默认根目录下并创建虚拟网卡lo:0配置ip192.168.30.100。

 1 web1和web2执行:
 2 yum install epel-release -y
 3 #先安装额外源
 4 yum install nginx -y
 5 #yum安装nginx
 6 systemctl start nginx 
 7 #开启nginx服务
 8 showmount   -e  192.168.30.11
 9 显示内容:/share 192.168.30.0/24
10 #查看此服务器是否有NFS共享
11 rpm ql nginx |grep html
12 #查看nginx默认web根目录
13 mount 192.168.30.11:/share  /usr/share/nginx/html/
14 #临时挂载 nfs服务器的/share文件夹到/usr/share/nginx/html/目录下,所以问/usr/share/nginx/html/的内容即访问/share内容
15 curl 192.168.30.13
16 curl 192.168.30.12
17 #显示内容this is nfs share
18 #分别访问俩个web服务器内容,查看是否挂载nfs成功显示网页内容。
19 ifconfig lo:0 192.168.30.100 netmask 255.255.255.2555
20 #添加虚拟网卡lo:0并配置ip
21 route add -host 192.168.30.100 dev lo:0
22 #添加路由192.168.30.100走lo:0网卡
23 vim /etc/sysctl.conf
24 #编辑内核参数,添加内容
25 net.ipv4.conf.all.arp_ignore = 1
26 net.ipv4.conf.all.arp_announce = 2
27 net.ipv4.conf.default.arp_ignore = 1
28 net.ipv4.conf.default.arp_announce = 2
29 net.ipv4.conf.lo.arp_ignore = 1
30 net.ipv4.conf.lo.arp_announce = 2
31 #保存退出后查看配置
32 sysctl  -p 
33 #查看内核参数是否配置完成

4.4 LVS_01和LVS_02安装ipvsadm并启动服务。

 1 yum install ipvsadm  -y 
 2 #yum安装ipvsadm服务,即LVS负载均衡的真实服务名
 3 systemctl start ipvsadm.service
 4 #开启ipvsadm服务,此步骤启动服务报错
 5 systemctl status ipvsadm.service>1.txt
 6 cat 1.txt
 7 #将ipvsadm服务启动报错提示导给1.txt文件并查看。内容如下截图
 8 ipvsadm-save>/etc/sysconfig/ipvsadm
 9 #报错信息提示是没有/etc/sysconfig/ipvsadm文件,解决方法是将ipvsadm保存到/etc/sysconfig/ipvsadm文件下。
10 systemctl  restart ipvsadm.service 
11 #重新启动ipvsadm成功

 

 4.5 LVS_01和LVS_02安装keepalived服务并配置启动.

 1 yum install keepalived.x86_64 -y
 2 #安装keepalived.x86_64
 3 vim /etc/sysctl.conf
 4 #编辑内核文件
 5 添加内容:
 6 net.ipv4.conf.all.send_redirects = 0
 7 net.ipv4.conf.default.send_redirects = 0
 8 net.ipv4.conf.ens33.send_redirects = 0
 9 #保存退出
10 sysctl  -p
11 #查看添加内核内容有则成功
12 vim keepalived.conf
13 #编辑配置文件
14 修改内容:
15 global_defs模块中
16 smtp_server 127.0.0.1
17 #改为127.0.0.1即改为本机
18 router_id LVS_01
19 #第一条LVS名称改为LVS_01
20    #vrrp_skip_check_adv_addr
21    #vrrp_strict
22    #vrrp_garp_interval 0
23    #vrrp_gna_interval 0
24 #以上4行安全机制添加#号注释掉
25 virtual_ipaddress {
26         192.168.30.100
27     }
28 #虚拟主机地址改为要配置的虚拟ip,可配置多个,若只写一个将模板的其他2个删除。
29 virtual_server 192.168.30.100 80 {
30 #虚拟ip地址改为配置的虚拟ip和web服务端口号
31     delay_loop 6
32     lb_algo rr
33     lb_kind DR
34 #模式改为DR模式即直连模式
35     persistence_timeout 50
36     protocol TCP
37  
38     real_server 192.168.30.12 80 {
39 #第一台真实ip地址和web服务端口号
40         weight 1
41         TCP_CHECK {
42 #添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器
43             connect_port 80
44 #添加连接端口80
45             connect_timeout 3
46             nb_get_retry 3
47             delay_before_retry 3
48         }
49     }
50     real_server 192.168.30.13 80 {
51 #第二台真实ip地址和web服务端口号
52         weight 1
53         TCP_CHECK {
54 #添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器
55             connect_port 80
56 #添加连接端口80
57             connect_timeout 3
58             nb_get_retry 3
59             delay_before_retry 3
60         }
61     }
62 }
63 #俩台真实服务器后的所有内容删除即可,修改完成后保存退出。完整配置文件如下图
64 scp keepalived.conf 192.168.30.15:/etc/keepalived/ 
65 LVS_02配置文件修改:
66 #将配置好的配置文件传到LVS_02服务器上
67 #第一步修改 router_id LVS_02 名称改为LVS_02
68 #第二步要修改vrrp_instance VI_1模块中的state为BACKUP,和priority 90改为比主LVS优先级低的等级
69 #其他不用修改保存即可
70 systemctl restart ipvsadm  keepalived
71 #重启服务
72 ipvsadm  -ln
73 显示内容:
74 TCP  192.168.30.100:80 rr persistent 50
75   -> 192.168.30.12:80             Route   1      0          0         
76   -> 192.168.30.13:80             Route   1      0          1
77 #查看有2个真实服务器的ip即可。

 

 

 

 4.5 实验结果检验

在客户机上curl 192.168.30.100查看内容是否为nfs服务器共享的内容“this is nfs share” 

 

 

关闭LVS_01测试查看内容是否还为nfs服务器共享的内容“this is nfs share” 

 

 

 关闭nginx web1服务器测试查看内容是否还为nfs服务器共享的内容“this is nfs share”