1.25 负载均衡技术----HA+LVS

本文详细介绍了LVS集群的原理与配置,包括DR、NAT、TUN三种模式的应用,以及通过Keepalived实现高可用的负载均衡方案。深入探讨了健康检查、调度策略和网络配置细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

负载均衡技术的介绍:

Haproxy+Keepalived高可用环境部署梳理(主主和主从模式):

https://www.cnblogs.com/kevingrace/p/5892169.html

Haproxy基础知识 -运维小结

http://www.cnblogs.com/kevingrace/p/6138150.html

 

HA+F5/LVS(4):实现负载均衡,一般企业使用HA+LVS。银行会使用HA+F5。HA是通过实现LVS调度器的高可用来实现的。

HA(High Available),高可用,高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执行业务的称 为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立 即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。


LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统

可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器, 我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。

【1】技术简介

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

【2】集群采用三层结构

一般来说,LVS集群采用三层结构,其主要组成部分为:

A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。

C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

【3】调度器

调度器是服务器集群系统的唯一入口点(Single Entry Point),它可以采用IP负载均衡技术、基于内容请求分发技术或者两者相结合
 

实验环境:三台虚拟机
负载均衡包loadbalancer,需要修改yum源,
vm1为调度器          vm2 vm3为阿帕奇服务器

一、lvs介绍

三种模式
DR模式:快
NAT:配置简单
TUN:隧道模式
FULLNAT

工具:pvs称之为IP虚拟服务器(IP Virtual Server,简写为IPVS)。是运行在LVS下的提供负载平衡功能的一种技术

Ipvs具体实现是由ipvsadm这个程序来完成,因此判断一个系统是否具备ipvs功能,只需要察看ipvsadm 程序是否被安装。察看ipvsadm程序最简单的办法就是在任意路径执行命令ipvsadm。

二、lvs的使用---DR模式,要求虚拟和真实地址在同一个网段

1)vm1修改yum源

vim /etc/yum.repos.d/rhel-source.repo

[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.85.250/6.5yumpak
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[LoadBalancer]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.85.250/6.5yumpak/LoadBalancer
enabled=1

查看yum源
yum repolist    ##查看多出四个安装包

2)安装并查看帮助

yum install ipvsadm -y        ##安装


ipvsadm -l            ##查看拥有的ipvsadm,若加-ln为不解析


lsmod                ##查看内核


ipvsadm --help            ##查看帮助功能

3)添加ipvsadm

ipvsadm -A -t 172.25.85.100:80 -s rr    ##设定172.25.85.100这个IP为虚拟服务器,调度模式为论寻
ipvsadm -a -t 172.25.85.100:80 -r 172.25.85.2 -g        ##绑定第一个主机
ipvsadm -a -t 172.25.85.100:80 -r 172.25.85.3 -g        ##绑定第二个主机

查看ipvsadm
ipvsadm -l

4)vm1添加虚拟ip

ip addr add 172.25.85.100/24 dev eth0

5)vm2/vm3添加ip,并打开httpd服务

ip addr add 172.25.85.100/32 dev eth0
ip addr show
/etc/init.d/httpd start

6)ipvsadm策略的保存

/etc/init.d/ipvsadm save    ##策略保存

vim /etc/sysconfig/ipvsadm    ##查看永久保存策略的位置
-A -t 172.25.38.100:80 -s rr
-a -t 172.25.38.100:80 -r 172.25.38.2:80 -g -w 1
-a -t 172.25.38.100:80 -r 172.25.38.3:80 -g -w 1

测试:使用外部主机,访问172.25.85.100

实验结果:两个httpd论寻调度

但是此时,有时候直接可以实现对vm2和vm3的操作
arp -d 172.25.85.100        ##清除缓存
arp -an | grep 100              ##查看缓存

实验结果

curl 172.25.38.100       ###查看结果只实现了对server3的询问

三、实现只对调度机(vm1)的操作

arp:地址解析协议
arptables的介绍:

arptables,linux命令,用于过滤arp包。

基本思路和iptables一样,不过,arptables处理arp协议有关的包,这些包在iptables中并不会处理·arptables可用于灵活的arp管理,如果善于运用的话,不失为一个优秀的arp防火墙.既能防止别的机器对自己进行arp欺骗,又能防止本机病毒或错误程序向其他机器发起arp攻击。

1)实现对vm2的屏蔽

yum install -y arptables_jf        ##安装 arptables_jf


arptables -L                ##查看策略


arptables -A IN -d 172.25.85.100 -j DROP    ##-d 目的,不许从100ip进入
arptables -A OUT -s 172.25.85.100 -j mangle --mangle-ip-s 172.25.85.2    ##-s 源,消息发出的位置
arptables -L         

       
/etc/init.d/arptables_jf save        ##保存策略

2)实现对vm3的屏蔽

yum install arptables_jf -y
arptables -A IN -d 172.25.85.100 -j DROP
arptables -A OUT -s 172.25.85.100 -j mangle --mangle-ip-s 172.25.85.3
/etc/init.d/arptables_jf save

测试:清空缓存后,访问172.25.38.100

实验结果:实现论寻,访问的vm1

四、lvs-----TUN隧道模式

1)vm1清空策略,并添加新的策略

ipvsadm -C    ##清空策略
ipvsadm -A -t 172.25.85.100:80 -s rr    ##添加策略,r论寻
ipvsadm -a -t 172.25.85.100:80 -r 172.25.85.2:80 -i    ##添加主机vm2,-i模式为隧道
ipvsadm -a -t 172.25.85.100:80 -r 172.25.85.3:80 -i    ##添加主机vm3

2)vm1添加新的回路

modprobe ipip    ##添加tunl0回路
ip addr show    ##查看    


ip addr del 172.25.85.100/24 dev eth0     ##删除原来的ip
ip addr add 172.25.85.100/24 dev tunl0    ##添加到tunl0上
ip link set up tunl0            ##激活tunl0
ip addr show                ##查看结果


3)vm2添加回路,并修改

modprobe ipip
ip addr del 172.25.85.100/32 dev eth0
ip addr add 172.25.85.100/32 dev tunl0
ip link set up tunl0
ip addr show

不让他们反向过滤

sysctl -a | grep rp_filter            ##查看


sysctl -w net.ipv4.conf.default.rp_filter=0    ##关闭一系列接口
sysctl -w net.ipv4.conf.lo.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -p                    ##加载
sysctl -a | grep rp_filter            ##查看,发现还有接口无法,关闭
vim /etc/sysctl.conf                 ##进配置文件修改


sysctl -p        
sysctl -a | grep rp_filter


4)vm3添加回路,并修改

modprobe ipip
ip addr del 172.25.85.100/32 dev eth0
ip addr add 172.25.85.100/32 dev tunl0
ip link set up tunl0
ip addr show

sysctl -a | grep rp_filter
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.lo.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -p
sysctl -a | grep rp_filter
vim /etc/sysctl.conf
sysctl -p
sysctl -a | grep rp_filter

测试:外部机器 curl172.25.38.100

结果:实现论寻

五、lvs使用---NAT模式 -m

调度机不仅作了实现lvs的功能,还充当网关,实现路由转发功能

实验环境

server1 两个ip 172.25.85.1(内) 172.25.185.1(外)

server2 172.25.85.2

server3 172.25.85.3

server4 172.25.185.4(外)

1)给server1两个ip,172.25.85.1(内) 172.25.185.1(外)

2)给server添加ipvsadm策略

ipvsadm -A -t 172.25.185.1:80 -s rr
ipvsadm -a -t 172.25.185.1:80 -r 172.25.85.2:80 -m
ipvsadm -a -t 172.25.185.1:80 -r 172.25.85.3:80 -m
ipvsadm -Ln

3)开启动路由转发

echo "1" > /proc/sys/net/ipv4/ip_forward

cat /proc/sys/net/ipv4/ip_forward

4)给server2和server3添加网关,并开启httpd服务

route add default gw 172.25.85.1
route -n
/etc/init.d/httpd start

测试:

使用server4 172.25.185.4访问172.25.85.1

实验结果:达到轮询模式

六、lvs的健康检查

当配置号lvs后以后,实现论寻。假设一台服务器荡机以后,访问,回出现如下情况,访问网页有时成功,有时失败。我们需要,健康检查。

1)首先恢复原先的lvs,并荡掉一台服务器

1、vm1机

ipvsadm -C
modprobe -r ipip
ip addr show
ipvsadm -A -t 172.25.85.100:80 -s rr
ipvsadm -a -t 172.25.85.100:80 -r 172.25.85.2:80 -g
ipvsadm -a -t 172.25.85.100:80 -r 172.25.85.3:80 -g
ip addr add 172.25.85.100/24 dev eth0
ip addr show

ipvsadm -l

2、vm2机

modprobe -r ipip
ip addr add 172.25.85.100/32 dev eth0
/etc/init.d/httpd stop


3、vm3机

modprobe -r ipip
ip addr add 172.25.85.100/32 dev eth0

测试:发现服务器2无法访问,这再实际当中有很大的问题

2)安装ldirectord

1、vm1配置yum源

vim /etc/yum.repos.d/rhel-source.repo

[HighAvailability]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.85.250/6.5yumpak/HighAvailability
enabled=1

2、下载ldirectord-3.9.5-3.1.x86_64.rpm支持包,安装

yum install ldirectord-3.9.5-3.1.x86_64.rpm -y

3)修改配置文件,开启服务

1、查看配置文件

rpm -qa | grep ldirec                ##查询程序
rpm -qc ldirectord-3.9.5-3.1.x86_64        ##查询主配置文件
rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm    ##查询所有配置文件

2、修改配置文件

cd /etc/ha.d/
ls
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf . ##复制配置文件
vim ldirectord.cf


 25 virtual=172.25.85.100:80
 26         real=172.25.85.2:80 gate
 27         real=172.25.85.3:80 gate

 37         #receive="Test Page"
 38         #virtualhost=www.x.y.z

3、开启服务

/etc/init.d/ldirectord start

测试

关闭一个服务器后,只访问另外一个服务器

4)修改vm1的apache服务

cd /var/www/html/
ls
rm -rf *
vim index.html
编写
<h1>系统正在维护</h1>
vim /etc/httpd/conf/httpd.conf

 136 Listen 80       ###修改端口为80


/etc/init.d/httpd restart

测试

关闭两个服务器后,直接访问调度机的apache

七、lvs的高可用

首先,关闭上一个实验的环境
/etc/init.d/ldirectord stop
chkconfig ldirectord off
ip addr del 172.25.85.100/24 dev eth0    ##删除ip,keepalived会自动添加ip

dG    ##vim的命令,删除从当前位置到最后一行。
高可用:通过设计减少系统不能提供服务的时间
如何实现lvs:
lvs的失效一般是,调度器荡机。
实现lvs高可用的方式是,有多台调度器,当一台调度器失效的时候,其他调度器实现。

1)设置一台机器vm4,主机名为server4,ip为172.25.38.4

创建快照,修改ip,主机名

qemu-img create -f qcow2 -b origin.qcow2 vm4.qcow2

配置yum源和vm1相同
vim /etc/yum.repos.d/rhel-source.repo

[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.85.250/6.5yumpak
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


[LoadBalancer]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.85.250/6.5yumpak/LoadBalancer
enabled=1

[HighAvailability]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.85.250/6.5yumpak/HighAvailability
enabled=1

2)vm1下载keepalived-2.0.6.tar.gz,解压,安装


1、解压

tar zxf keepalived-2.0.6.tar.gz


2、安装安装的支持程序

yum install openssl-devel gcc -y


3、检查环境,编译,安装

cd keepalived-2.0.6
./configure --prefix=/usr/local/keepalived --with-init=SYSV ##SYSV是linux6的 7的为systemd
make && make install

3)添加软连接

cd /usr/local/keepalived/etc/rc.d/init.d/
chmod +x keepalived        ##增加执行权限
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

4)编写配置文件


cd /etc/keepalived/
ls
vim keepalived.conf

编写如下
! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 172.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict            ##必须注释掉
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.85.100
    }
}

virtual_server 172.25.85.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP

    real_server 172.25.85.2 80 {
    TCP_CHECK{
        weight 1
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.85.3 80 {
    TCP_CHECK {
        weight 1
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

5)复制keepalived给vm4

cd /usr/local/
ll
scp -r keepalived root@172.25.85.4:/usr/local/

6)vm4添加连接文件

cd /usr/local/keepalived/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

7)vm4配置文件的修改

cd /etc/keepalived/
vim keepalived.conf

修改如下
 18     state BACKUP    ##设为备用
 21     priority 50    ##优先级设为50,主的是100


8)开启服务vm1,vm4的服务

/etc/init.d/keepalived start

测试:


查看vm1的ip地址,发现多了虚拟网络,外界机器,访问虚拟ip实现论寻。

关闭vm1的keepalived,vm4的ip添加了虚拟ip,实现调度机的功能,外界访问还是可以满足论寻。
/etc/init.d/keepalived stop

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值