1.负载均衡LVS
1.1.LVS(Linux Virtual Server)介绍
。。 Lvs是Linux Virtual Server的简写,意思为Linux虚拟服务器,是一个虚拟的服务器集群系统,可以在LINUX/UNIX平台下实现负载均衡集群功能,该项目在1998年5月由章文嵩博士组织成立,是中国国内最早出现的自由软件项目之一
。。LVS官方文档:http://www.linuxvirtualserver.org
1.2.IPVS(LVS)软件工作层次图
。。LVS负载均衡调度技术是在Linux内核中实现的,因此,被称之为Linux虚拟服务器(Linux Virtual Server),我们使用该软件配置LVS时候,不能直接配置内核中的IPVS,而需要使用IPVS的管理工具ipvsadm进行管理,然而也可用keepalived软件直接管理ipvs内核模块,并不是通过ipvsadm来管理ipvs。
1.3.LVS小结
1、真正实现调度的工具是IPVS
内核模块,工作在Linux
内核层面。
2、LVS自带的IPVS命令行管理工具是ipvsadm
。
3、keepalived实现管理IPVS(配置文件)及负载均衡器的高可用。
4、Red hat工具Piranha web管理实现调度的工具IPVS
1.4.LVS相关术语
名称 |
缩写 |
说明 |
虚拟机IP地址(virtual ip address) |
vip |
vip为Director用于向客户端计算机提供 服务的IP地址,比如,www.xionghaier.cn域名 就要解析到vip上提供服务 |
真实IP地址(Real Server IP address) |
RIP |
在集群下面节点上使用的IP地址,物理IP地址 |
Director的IP地址(Director ip adress) |
DIR |
Director用于连接内外网络的IP地址,物理网卡 上的IP地址是负载均衡器上的IP |
客户端主机IP地址(client ip address) |
CIP |
客户端用户计算机请求集群服务器的IP地址, 该地址用作发送给集群的请求的源IP地址。 |
2.LVS集群的4种工作模式介绍与原理讲解
LVS的四种工作模式
缩写及全拼:
NAT(Network Address Translation)
TUN(Tunneling)
DR(Direct Routing)
FULLNAT(Full Network Address Translation)
2.1.DR模式
。。VS/DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器将响应后的处理结果直接返回给客户端用户。同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。而且,这种DR模式没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器LB与真实服务器RS都有一块网卡连在同一物理网段上,即必须在同一个网段上,即必须在同一个局域网环境。
2.1.1.lvs dr模式应用特点
- 所有集群节点RS必须和
Director
在相同的物理网段(即同一个局域网中)上。 - 所有客户端入战(而不是出战)请求由Director首先接收,并转发给集群节点RS。
- 集群节点RS,通常来说最好带外部IP,而不使用Director及某固定机器作为默认网关,以便将数据包直接回复给客户端计算机,且不会产生回包的瓶颈。
- 所有集群节点RS必须在lo网卡上绑定VIP地址(掩码255.255.255)以便验证通过目的IP非RS节点的数据包。
- 由于所有集群节点RS上必须在lo网卡上绑定VIP地址,因此,带来额外的arp响应问题,即集群节点RS默认会响应原本由客户端发往Director VIP的数据包。因此,我们要对所有集群节点RS做ARP抑制处理,把响应VIP的请求交给LVS Director。
- 很多操作系统都可以在集群内部的RS真实服务器上,只要该操作系统支持TCP/IP协议,并能够实现ARP隐藏,就可以作为RS节点,如windows、linux、unix、
- LVS/DR模式不需要开启调度器的内核转发功能,这点和LVS/NAT模式是不同的。
- LVS/DR Director(服务器数量100台)可以比LVS-NAT Director(服务器数量10-20台)承受更多的并发请求和转发更多的服务器的数量。
- RS与lvs需要有外网IP
2.2. NAT模式-网络地址转换
Virtual Server via Network Address Translation(VS/NAT)
2.2.1. 图解nat模式
NAT模式
用户通过vip进行访问,lvs接收到数据包后把目标ip改为一台RS服务器的ip地址,数据包到达RS服务器,RS服务器接收处理请求后返回给lvs,lvs接收到数据包后把源ip改为vip返回给用户
3. LVS的三种模式优缺点比较
VS/NAT |
VS/TUN |
VS/DR |
|
Real Server 节点服务器 |
config dr gw |
tunneling |
Non-arp device/tie vip |
Server Network(网络) |
private |
LAN/WAN |
LAN |
Server Network (节点数量) |
low (10~20) |
High (100) |
High (100) |
Real Server Gateway |
load balancer |
own router(能出网) |
own router(能岀网) |
优点 |
地址和端口转换 |
WAN环境 |
性能最高 |
缺点 |
瓶颈大效率低 |
系统需要支持隧道协议 |
不能跨出LAN |
NAT模式:
1、NAT技术将请求的报文(通过DNAT方式改写)和响应的报文(通过SNAT方式改写),通过调度器地址重写然后在转发给内部的服务器,报文返回时在改写成原来的用户请求的地址。
2、只需要在调度器LB上配置WAN公网IP即可,调度器也要有私有LAN IP和内部RS节点通信
3、每台内部RS节点的网关地址,必须要配成调度器LB的私有LAN内物理网卡地址(LDIP)这样才能确保数据报文返回时任然经过调度器LB
4、由于请求与响应的数据报文都经过调度器LB,因此,网站访问量大时调度器LB有较大瓶颈,一般要求最对10-20台节点
5、NAT模式支持对IP及端口的转换,即用户请求10.0.0.1:80,可以通过调度器转换到RS节点的10.0.0.2:8080(DR和TUN模式不具备的)
6、所有NAT内部RS节点只需要配置私有LAN IP即可
7、由于数据包来回都需要经过调度器,因此,要开启内核转发net.ipv4.ip_forward = 1,当然也包括iptables防火墙的forward功能(DR和TUN模式不需要)。
DR模式:
1、通过在调度器LB上修改数据包的目的MAC地址实现转发。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP
2、请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此,并发访问量大时使用效率很高(和NAT模式比)
3、因DR模式是通过MAC地址的改写机制实现的转发,因此,所有RS节点和调度器LB只能在一个局域网LAN中(小缺点)
4、需要注意RS节点的VIP的绑定(lo:vip/32,lol:vip/32)和ARP抑制问题,在lo网卡上绑定VIP,抑制arp解析。
5、强调:RS节点的默认网关不需要是调度器LB的DIP,而直接是IDC机房分配的上级路由器的IP(这是RS带有外网IP地址的情况),理论讲;只要RS可以出网即可,不是必须配置外网IP。
6、由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求的目的端口(和NAT区别)
7、当前,调度器LB支持几乎所有的UNIX,LINUX系统,但目前不支持WINDOWS系统,真实服务器RS节点可以是WINDOWS系统
8、总的来说DR模式效率很高,但是配置也比较麻烦,因此,访问量不是特别大的公司可以用haprixy/nginx取代之。这符合运维的原则:简单、易用、高效。日1000-2000W PV或并发请求1万以下都可以考虑用haproxy/nginx(LVS NAT模式)
9、直接对外的访问业务,例如:web服务做RS节点,RS最好用公网IP地址。如果不直接对外的业务,例如:MySQL,存储系统RS节点,最好只用内部IP地址。
TUN模式:
1、负载均衡器通过把请求的报文通过IP隧道的方式(请求的报文不经过原目的地址的改写(包括MAC)),而是直接封装成另外的IP报文,转发至真实服务器,而真实服务器将响应处理后直接返回给客户端用户
2、由于真实服务器将响应处理后的报文直接返回给客户端用户,因此,最好RS有一个外网IP地址,这样效率才会更高。理论上:只要能出网即可,无需外网IP地址
3、由于调度器LB只处理入战请求的报文。因此,此集群系统的吞吐量可以提高10倍以上,但隧道模式也会带来一定的系统开销。TUN模式适合LAN/WAN
4、TUN模式的LAN环境转发不如DR模式效率高,而且还要考虑系统对IP隧道的支持问题
5、所有的RS服务器都要绑定VIP,抑制ARP,配置复杂
6、LAN环境一般采用DR模式,WAN环境可以用TUN模式,但是当前在WAN环境下,请求转发更多的被haproxy/nginx/DNS调度等代理取代。因此,TUN模式在国内公司实际应用的已经很少。跨机房应用要么拉光纤成局域网,要么DNS调度,底层数据还的同步
7、直接对外的访问业务,例如:web服务做RS节点,最好用公网IP地址,不直接对外的业务,例如:MySQL存储系统RS节点,最好用内部IP地址
4. LVS的调度算法
LVS的调度算法决定了如何在集群节点之间分布工作负荷。
当Director调度器收到来自客户端计算机访问它的VIP上的集群服务的入战请求时,Director调度器必须决定哪个集群节点应该处理请求。Director调度器可用于做出该决定的调度方法分成两个基本类别:
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr,SED,NQ
(后两种官方站点没提到,编译LVS,make过程可以看到rr|wrr|wlc|lblc|lblcr|dh|sh|sed|nq
)
10种调度算法见如下表格:
算法 |
说明 |
rr |
轮询调度(Round-Robin)它将请求依次分配不同的RS节点,也就是在RS节点中均摊请求, 这种算法简单,但是只适合于RS节点处理性能相差不大的情况 |
wrr |
加权轮询调度(Weighted Round-Robin)它将依据不同RS节点的权值分配任务,权值较高 的RS将优先获得任务,并且分配到的连接数将比权值较低的RS节点更多。相同权值的RS得到 相同数目的连接数 |
dh |
目的地址哈希调度(Destination Hashing)以目的地址为关键字查找一个静态hash表来 获得需要的RS |
sh |
源地址哈希调度(Source Hashing)以源地址为关键字查找一个静态hash表来获得需要的RS |
wlc |
加权最小连接数调度(Weighted Least)假设各台RS的权值依次为wi(I=1..n)当前的TCP 连接依次为Ti(I=1..n)依次选取Ti/Wi为最小的RS作为下一个分配的RS |
lblc |
基于地址的最小连接数调度(Locality-Based Least-Connection)将来自同一目的地址 的请求分配给同一台RS节点,如果这台服务器尚未满负荷,分配给连接数最小的RS,并以它 为下一次分配的首先考虑 |
lblcr |
基于地址带重复最小连接数调度(Locality-Based Least-Connection With Replication) 对于某一目的地址,对应有一个RS子集。对此地址请求,为它分配子集中连接数最小RS:如果子 集中所有服务器均已满负荷,则从集群中选择一个连接数较小服务器,将它加入到此子集并分 配连接;若一定时间内,未被做任何修改,则将子集中负载最大的节点从子集删除。 |
SED |
最短的期望的延迟(Shortest Expected Delay Scheduling SED)(SED) 基于wlc算法。例如 ABC三台机器分别权重123,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它 可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算 A(1+1)/1 B(1+2)/2 C(1+3)/3 根据运算结果,把连接交给C |
NQ |
最小队列调度(Never Queue Scheduling NQ)(NQ) 无需队列。如果有台real server的连接数=0就直接分配过去,不需要在进行sed运算 |
4.1.LVS的调度算法的生产环境选型
- 一般的网络服务,如Http、mail、mysql等,常用的lvs调度算法为:
- 基本轮询调度rr算法:round robin
- 加权最小连接调度wlc。weighted least connection
- 加权轮询调度wrr算法
- 基于局部性的最小连接LBLC和带复制的基于局部性最少连接LBLCR主要适用于Web cache和Db cache集群,但是我们很少这样用。一致性哈希
- 源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。
- 最短预期延时调度SED和不排队调度NQ主要是对处理时间相对比较长的网络服务,实际使用中,这些算法的适合范围不限于这些,我们最好参考内核中的连接调度算法的实现原理;
5.系统环境
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
[root@lvs01 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@lvs01 ~]# uname -a Linux lvs01 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux [root@lvs01 ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) [root@lvs01 ~]# getenforce Disabled
5.1.测试环境准备
1.安装nginx及配置
#!/bin/bash mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #yum -y install epel-release yum install -y pcre pcre-devel openssl openssl-devel mkdir -p /home/dilusense/tools cd /home/dilusense/tools yum install -y wget wget http://nginx.org/download/nginx-1.10.2.tar.gz tar xf nginx-1.10.2.tar.gz cd nginx-1.10.2/ useradd -s /sbin/nologin -M www ./configure --prefix=/application/nginx-1.10.2 --user=www --group=www --with-http_stub_status_module \ --with-http_ssl_module make && make install ln -s /application/nginx-1.10.2 /application/nginx echo 'export PATH=$PATH:/application/nginx/sbin/' >>/etc/profile source /etc/profile /application/nginx/sbin/nginx
2.创建测试环境web01.web02
~]# for dir in www bbs blog ;do mkdir /application/nginx/html/$dir;done ~]# for dir in www bbs blog ;do echo "`hostname` $dir" >/application/nginx/html/$dir/xionghaizi.html;done
3.web01与web02配置文件内容:
[root@web01 ~]# cat /application/nginx/conf/nginx.conf [root@web02 conf]# egrep -v "^$" nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; server { listen 80; server_name blog.xionghaier.org; location / { root html/blog; index index.html index.htm; } access_log logs/access_bbs.log main; } server { listen 80; server_name www.xionghaier.org; location / { root html/www; index index.html index.htm; } access_log logs/access_www.log main; } }
4.加载使配置文件生效
~]# nginx -s reload
5.进行测试
~]# curl -H Host:www.xionghaier.org 192.168.56.8/xionghaizi.html ~]# curl -H Host:blog.xionghaier.org 192.168.56.8/xionghaizi.html ~]# curl -H Host:www.xionghaier.org 192.168.56.7/xionghaizi.html ~]# curl -H Host:blog.xionghaier.org 192.168.56.7/xionghaizi.html
6.添加windows的host解析 C:\Windows\System32\drivers\etc
192.168.56.7 blog.xionghaier.org www.xionghaier.org
5.2.开始安装LVS
5.2.1.yum安装ipvsadm
~]# yum install -y ipvsadm ~]# rpm -qa ipvsadm ipvsadm-1.27-7.el7.x86_64 ~]# rpm -ql ipvsadm /etc/sysconfig/ipvsadm-config /usr/lib/systemd/system/ipvsadm.service /usr/sbin/ipvsadm /usr/sbin/ipvsadm-restore /usr/sbin/ipvsadm-save /usr/share/doc/ipvsadm-1.27 /usr/share/doc/ipvsadm-1.27/README /usr/share/man/man8/ipvsadm-restore.8.gz /usr/share/man/man8/ipvsadm-save.8.gz /usr/share/man/man8/ipvsadm.8.gz ~]# ipvsadm ~]# lsmod |grep ip_vs ##加载的内核模块 ip_vs 140944 0 nf_conntrack 105745 1 ip_vs libcrc32c 12644 2 xfs,ip_vs ~]# ln -s /usr/src/kernels/`uname -r` /usr/src/linux 命令说明: 此ln命令的链接路径要和uname -r输出结果内核版本对应,企业中安装虚拟化可能有多个内核路径
6.手动配置LVS(DR模式)负载均衡服务
6.1.手工添加LVS转发
1.手动在lb01
添加VIP 192.168.56.3
~]# ifconfig eth0:0 192.168.56.3/24 up ##别名
~]# ip addr add 192.168.56.3/24 dev eth0 label eth0:0
6.2.配置LVS
[root@lvs01 ~]# ipvsadm-save -n ##保存当前的lvs的规则,可以用 ipvsadm-restore 恢复 [root@lvs01 ~]# ipvsadm -C ## -C 清空lvs所有规则 [root@lvs01 ~]# ipvsadm --set 30 5 60 ##设置cdp udp超时时间 [root@lvs01 ~]# ipvsadm -A -t 192.168.56.3:80 -s wrr -p 20 命令说明: -A 添加虚拟主机服务器 -t tcp协议 -s 轮询算法rr wrr wlc -p 会话保持 默认是300 [root@lvs01 ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.56.3:http wrr persistent 20 [root@lvs01 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.56.3:80 wrr persistent 20 ######################################################################################## # 添加web(RS)服务器 # ######################################################################################## [root@lvs01 ~]# ipvsadm -a -t 192.168.56.3:80 -r 192.168.56.7:80 -g -w 1 [root@lvs01 ~]# ipvsadm -a -t 192.168.56.3:80 -r 192.168.56.8:80 -g -w 1 命令说明: -a 添加rs服务器 -r real server rs ip -g dr模式 -w 1 weight 权重 -t 192.168.56.3:80 使用tcp协议,负载均衡的IP地址是192.168.56.3:80 [root@lvs01 ~]# ipvsadm -Ln --stats IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.56.3:80 wrr persistent 20 -> 192.168.56.7:80 Route 1 0 0 -> 192.168.56.8:80 Route 1 0 0 [root@lvs01 ~]# ipvsadm-save -n -A -t 192.168.56.3:80 -s wrr -p 20 -a -t 192.168.56.3:80 -r 192.168.56.7:80 -g -w 1 -a -t 192.168.56.3:80 -r 192.168.56.8:80 -g -w 1 ###备份和恢复 [root@lvs01 ~]# ipvsadm-save -n > /tmp/ipvs.save [root@lvs01 ~]# ipvsadm-restore < /tmp/ipvs.save
6.2.1绑定VIP及抑制arp
1.手工在RS端绑定,每台real server端执行
~]# ip addr add 192.168.56.3/32 dev lo label lo:0 ##或者执行下面命令
~]# ifconfig lo:0 192.168.56.3/32 up
~]# route add -host 192.168.56.3 dev lo
########################################################################################
# web01及web02添加arp抑制内容 #
########################################################################################
~]# cat >>/etc/sysctl.conf<<EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOF
~]# sysctl -p
##检测验证
[root@lvs01 ~]# curl -H Host:blog.xionghaier.org 192.168.56.7/xionghaizi.html
web02 blog
[root@lvs01 ~]# curl -H Host:blog.xionghaier.org 192.168.56.8/xionghaizi.html
web01 blog
2.添加windows的host解析 C:\Windows\System32\drivers\etc
192.168.56.3 blog.xionghaier.org www.xionghaier.org
7.LVS高可用keepalived
7.1.安装keepalived及配置
下载阿里源 https://opsx.alibaba.com/mirror wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum makecache ##>==生成缓存 安装keepalived并启动 yum install -y keepalived systemctl start keepalived.service systemctl status keepalived.service 注意:需要关闭防火墙及selinux ######################################################################################## # lb01及lb02配置文件内容 # ######################################################################################## ~]# cp /etc/keepalived/keepalived.conf{,.default} ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { 443060965@qq.com } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_01 ##lb02 router_id LVS_02 } vrrp_instance VI_1 { state MASTER ##lb02 state BACKUP interface eth0 virtual_router_id 51 priority 150 ##lb02 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.56.3/24 dev eth0 label eth0:1 } } virtual_server 192.168.56.3 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 192.168.56.7 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.56.8 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
########################################################################################
# lb01及lb02执行命令验证 #
########################################################################################
~]# ipvsadm-save -n -A -t 192.168.56.3:80 -s wrr -p 50 -a -t 192.168.56.3:80 -r 192.168.56.7:80 -g -w 1 -a -t 192.168.56.3:80 -r 192.168.56.8:80 -g -w 1 ~]# ipvsadm -C ~]# ipvsadm-save -n ~]# systemctl restart keepalived.service ~]# ipvsadm-save -n -A -t 192.168.56.3:80 -s wrr -p 50 -a -t 192.168.56.3:80 -r 192.168.56.7:80 -g -w 1 -a -t 192.168.56.3:80 -r 192.168.56.8:80 -g -w 1
1).keepalived
配置文件注释说明
global_defs { notification_email { 49000448-@qq.com #设置报警邮件地址,可设置多个 } notification_email_from Alexandre.Cassen@firewall.loc #设置 邮件的发送地址 smtp_server 192.168.200.1 #设置 smtp server 地址 smtp_connect_timeout 30 #设置 连接 smtp server的超时时间 router_id LVS_01 #设置 keepalived 服务器的一个标识。发邮件时显示在邮件主题中的信息 } vrrp_instance VI_1 { #vrrp 实例部分定义 state MASTER #指定 keepalived 的角色,可选值:MASTER|BACKUP 分别表示(主|备) interface eth0 #指定网络接口 virtual_router_id 51 #虚拟路由表示,是一个数字,同一个vrrp 实例使用唯一的标识, 默认值是51 ;MASTER和BACKUP 的 同一个vrrp_instance下这个标识必须保持一致 priority 150 #定义优先级,数字越大,优先级越高; 同一个 vrrp_instance 下,MASTER 优先级必须大于 BACKUP advert_int 1 #设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔,单位为秒 authentication { #设置验证类型和密码 auth_type PASS #设定验证类型,主要有: PASS 和 AH 两种 auth_pass 1111 #设置验证密码,在一个 vrrp_instance 下, MASTER 和 BACKUP必须使用相同的密码才能通信 } virtual_ipaddress { #设置虚拟IP地址 192.168.56.3/24 dev eno16777736 label eno16777736:1 } } virtual_server 192.168.56.3 80 { #设置虚拟服务器需要指定虚拟IP地址和服务端口,IP和端口之间用空格隔开 delay_loop 6 #设置运行情况检查 lb_algo wrr #设置负载均衡调度算法,这里设置为wrr, 即权重轮询算法 lb_kind DR #设置LVS实现负载均衡的机制,有 NAT,TUN和DR三个模式可选 nat_mask 255.255.255.0 #子网掩码 persistence_timeout 50 #会话保持时间,单位是秒。这个选项对动态网页比较有用,为集群系统中的session共享提供了很好的解决方案 protocol TCP #指定转发协议类型,有TCP和UDP real_server 192.168.56.7 80 { #配置服务节点需要指定 real_server 的真实IP地址和端口,IP与端口之间用空格隔开 weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高 TCP_CHECK { connect_timeout 8 #连接超时时间 nb_get_retry 3 #重新尝试次数 delay_before_retry 3 #连接失败多长时间 在尝试连接 connect_port 80 #连接端口80 } } real_server 192.168.56.8 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 #重新尝试次数 delay_before_retry 3 #连接失败多长时间 在尝试连接 connect_port 80 #连接端口80 } } }
7.2.配置lvs之nat模式
硬件环境:
一台Director: 版本:centos7.2 - 3.10.0-327.el7.x86_64 双网卡: eth1: VIP:192.168.56.5/24(真实生产环境下一定将网关指向运营商的公网IP) eth2: DIP:172.16.1.5/24(此IP必须和后台的RealSever在同一个网段内) 两台RealServer: 版本:centos7.2 - 3.10.0-327.el7.x86_64 单网卡: RealServer1:RIP1:192.168.56.7/24(网关必须指向Director的DIP) RealServer2: RIP2:192.168.56.8/24(网关必须执行Director的DIP) 注意: 这里如果采用双网卡机制很容易出现,TCP连接问题,也就是syn消息收不到ack响应,所以尽量将无关的网卡警用,以免路由配置的复杂。
1).配置内核模块
清空之前所有lvs规则 Director服务器网卡信息 ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.56.5 netmask 255.255.255.0 broadcast 192.168.56.255 inet6 fe80::20c:29ff:fefb:fc1c prefixlen 64 scopeid 0x20<link> ether 00:0c:29:fb:fc:1c txqueuelen 1000 (Ethernet) RX packets 17783 bytes 12899977 (12.3 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12705 bytes 1017665 (993.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.1.5 netmask 255.255.0.0 broadcast 172.16.255.255 inet6 fe80::20c:29ff:fefb:fc30 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:fb:fc:30 txqueuelen 1000 (Ethernet) RX packets 31 bytes 2306 (2.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 20 bytes 1520 (1.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 8 bytes 400 (400.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 400 (400.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ######################################################################################## # Director服务器执行命令-临时生效 # ######################################################################################## ##开启路由转发功能 ~]# echo 1 >/proc/sys/net/ipv4/ip_forward ##关闭icmp的重定向 ~]# echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects ~]# echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects ~]# echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects ~]# echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects ######################################################################################## # Director服务器执行命令-永久生效 # ######################################################################################## ##编辑配置文件/etc/sysctl.conf或者 cat >>/etc/sysctl.conf<<EOF net.ipv4.ip_forward = 1 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.eth1.send_redirects = 0 EOF
2).RS服务器web01.web02
网关更改为负载均衡的网卡地址
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="192.168.56.8"
PREFIX="24"
GATEWAY="172.16.1.5"
DNS1="192.168.56.2"
3).将RealServer加入Web集群服务
~]# ipvsadm -A -t 192.168.56.5:80 -s wrr ~]# ipvsadm -a -t 192.168.56.5:80 -r 192.168.56.7 -m -w 1 ~]# ipvsadm -a -t 192.168.56.5:80 -r 192.168.56.8 -m -w 2 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.56.5:80 wrr -> 192.168.56.7:80 Masq 1 0 0 -> 192.168.56.8:80 Masq 2 0 0
4).使用ab
工具进行测试
~]# ab -n 100 -c 100 http://192.168.56.5/xionghaizi.html
5).在调度器Director服务器上验证测试结果
~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.56.5:80 wrr -> 192.168.56.7:80 Masq 1 0 68 -> 192.168.56.8:80 Masq 2 0 134
ab
命令查看apr-util, yum-utils是否安装:
~]# rpm -qa|grep apr-util apr-util-1.3.9-3.el6_0.1.x86_64 … ~]# rpm -qa|grep yum-utils yum-utils-1.1.30-30.el6.noarch
若在命令执行后有结果列出(如上),则说明已安装。
否则用yum安装:
~]# yum -y install apr-util ~]# yum -y install yum-utils
建个临时目录来保存下载的安装包,并按如下顺序执行目录:
~]# mkdir abtmp ~]# cd abtmp ~]# yumdownloader httpd-tools* ~]# rpm2cpio httpd-tools-*.rpm |cpio -idmv ~]# ll usr/bin/ab -rwxr-xr-x 1 ytadmin ytadmin 50248 Oct 1622:49 usr/bin/ab ~]# sudo cp usr/bin/ab /usr/bin
执行ab命令,应列出使用说明信息。
~]# ab ab: wrong number of arguments Usage: ab [options][http[s]://]hostname[:port]/path
- 转载请注明来源:负载均衡LVS之高可用
- 本文永久链接地址:https://www.xionghaier.cn/archives/162.html