LVS负载均衡与keepalived架构

Posted 你狸猫吗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVS负载均衡与keepalived架构相关的知识,希望对你有一定的参考价值。

目录

一、LVS

负载均衡的结构

LVS三种工作模式

LVS调度算法

ipvsadm工具

二、KEEPALIVED

KEEPALIVED作用

KEEPALIVED原理

KEEPALIVED工作模式

KEEPLIVED问题及优化

三、LVS+KEEPALIVED架构实现

实验目的

实验拓扑

实验准备

实验过程

实验结果检验


一、LVS

负载均衡的结构

①负载调度器:LVS即四层(传输层)负载均衡,根据算法调度用户请求给业务服务器处理

②业务服务器池:真正处理用户请求的业务服务器集群

LVS三种工作模式

①LVS-NAT:DNAT原理,缺点是路由器转发修改mac地址压力过大。

②LVS-DR:每台服务器都配置虚拟ip,通过改写请求报文中的mac地址来实现。

③IP隧道:转发时借助隧道。

LVS调度算法

①RR:轮询,每个服务器分配一次反复轮询。

②LC:最小连接数轮询,查看那个服务器处理的请求最少则处理,以此类推。

③WRR:加权轮询,根据管理员给每个服务器添加的weight权重分配用户请求任务,默认全部是1。

④SH:session或者源地址hash分配,通过用户来源地址hash算法将分配给固定的服务器处理。

⑤DH:模板地址hash,通过用户访问目的地址hash算法将,分配给固定的服务器处理。

⑥WLC:加权最小连接数

ipvsadm工具

ipvsadm是LVS负载均衡的真实服务名称。

-A 添加虚拟服务器

-D 删除整个虚拟机服务器

-s 指定负载调度算法

-a 添加真实服务器

-d 删除某个节点

-t 指定VIP地址及TCP端口

-r 指定RIP地址及TCP端口

-w 设置权重

-l 列表查看LVS虚拟服务器‘

-n 以数字形式显示地址

-m 指定nat模式

-g 指定DR模式

-C 清空策略

二、KEEPALIVED

KEEPALIVED作用

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

KEEPALIVED原理

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

KEEPALIVED工作模式

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

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

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

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

KEEPLIVED问题及优化

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

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

③脑裂:备机由于种种原因收不到主机发送的心跳线,导致用户不知道访问那个服务器。例如:防火墙拦截心跳线广播报文、主备之间物理网线心跳线断裂等。

④日志分隔:keepalived的默认日志在/var/log/message里,通过修改 /etc/sysconfig/keepalived中参数KEEPALIVED_OPTIONS="-D -S local数字" ,并利用rsyslog将日志分隔出来。

三、LVS+KEEPALIVED架构实现

实验目的

①通过客户端访问LVS高可用集群虚IP 192.168.30.100可以访问到NFS业务服务器的内容。

②当LVS_01负载均衡断开服务后,LVS_02可以进行备用,不影响用户访问业务。

③当WEB1或者WEB2关闭服务后,另外一台服务器可以正常访问业务。

实验拓扑

 

实验准备

①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"

实验过程

①关闭所有服务器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即可。

实验结果检验

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

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

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

 

以上是关于LVS负载均衡与keepalived架构的主要内容,如果未能解决你的问题,请参考以下文章

Keepalived负载均衡与高可用

LVS+keepalived高可用负载均衡集群部署---LAMP网站服务器与LVS服务器

LVS+Keepalived高可用负载均衡架构原理及配置

LVS(DR) + Keepalived 实现负载均衡

LVS+Keepalived负载均衡配置

架构设计:负载均衡层设计方案——LVS + Keepalived + Nginx安装及配置