LVS实战
以下会实现lvs的两种方式(DR和NAT)及keepalived高可用来管理ipvs的方式来,ip如下图。
环境如下:
1. 三台机器的系统都是:centos7.2,防火墙关闭了。
2. lvs-server需要安装ipvsadm管理工具和添加内核转发功能:
3. lvs-server:yum install ipvsadm -y
4. lvs-server开启内核转发:echo “1” >/proc/sys/net/ipv4/ip_forward 或者永久生效:echo “net.ipv4.ipforward = 1″ >>/etc/sysctl.conf,sysctl -p使配置生效。
5. 三台机器都有两个网卡,用的是vmware虚拟机,直接添加网站,然后在配置文件下复制一份,在更改一下就可以了。
6. 所有的eth0对应的是192.168段的ip,eth1对应的是10.0.0.0/24
7. lvs-server的hostname是7-node4,10.0.0.221的主机名是:7-node1,10.0.0.222的主机名是7-node2
8. 默认是DR模式,-g,-m:nat模式,-i:ip tunneling模式
9. 增加节点:ipvsadm -a -t vip:port -r rs-ip:[port] -g/-m
10. 删除节点:ipvsadm -d -t vip:port -r rs-ip:[poirt]
DR配置
考虑到生产中的情况是eth0就是外网的ip,也作为vip来使用,配置之前要确保ip_vs已经加载到内核,加载方法如下: modprobe ip_vs,查看方法 如下:lsmod|grep “ip_vs”
real-server的vip要添加在内网卡上,也就是要添加到生其他rs节点能通信的网卡上,不然可能不成功,我测试的。如上图的话,我们要们都用192.168的网段,要么用10.0网段,vip当然也是对应的网段,因为测试环境中没有外网ip可以用。
ipvsadm命令说明如下:
可以用通过ipvsadm -h来查看。
-A:表示添加一个virtual server
-t: 指定vip及端口
-s:指定调度算法
-r:添加real server服务器
-g:指定dr模式。
-a:说明要添加rs节点
-p 300: 表示300秒会话保持。
ipvsadm -Ln:查看配置 ipvsadm -L -n –stats:查看详细的访问信息
-m:指它nat模式。
- lvs如果需要增加vip是可以用以下命令:
ip addr add vip/netmask dev eth0 label eth0:1
- 首先清空配置:ipvsadm -C
[root@7-node4 ~]# ipvsadm -C [root@7-node4 ~]#
- 添加vs及rs:
[root@7-node4 ~]# ipvsadm -A -t 192.168.7.223:80 -s rr #-t后面接的是vip及端口号 [root@7-node4 ~]# 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.7.223:80 rr [root@7-node4 ~]# ipvsadm -a -t 192.168.7.223:80 -r 10.0.0.220 -g [root@7-node4 ~]# ipvsadm -a -t 192.168.7.223:80 -r 10.0.0.221 -g [root@7-node4 ~]# 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.7.223:80 rr -> 10.0.0.220:80 Route 1 0 0 -> 10.0.0.221:80 Route 1 0 0 [root@7-node4 ~]#
- 如果需要删除节点的话:ipvsadm -d -t vip:port -r rs_ip
- RS上的配置:lo上绑定vip和arp抑制:ip addr add vip/32 dev lo label lo:1 #注意这里的子网掩码是32,而lvs-server上是24。,还要添加路由:route add -host vip dev lo
[root@7-node1 logs]# ip addr add 192.168.7.223/32 dev lo label lo:1 #注意这里的子网掩码是32,而lvs-server上是24。 [root@7-node1 logs]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.7.220 netmask 255.255.255.0 broadcast 192.168.7.255 inet6 fe80::20c:29ff:fe28:d82e prefixlen 64 scopeid 0x20 ether 00:0c:29:28:d8:2e txqueuelen 1000 (Ethernet) RX packets 168443 bytes 19833414 (18.9 MiB) RX errors 0 dropped 514 overruns 0 frame 0 TX packets 63196 bytes 4847383 (4.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.220 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::20c:29ff:fe28:d838 prefixlen 64 scopeid 0x20 ether 00:0c:29:28:d8:38 txqueuelen 1000 (Ethernet) RX packets 75077 bytes 6415050 (6.1 MiB) RX errors 0 dropped 383 overruns 0 frame 0 TX packets 2061 bytes 196024 (191.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 loop txqueuelen 0 (Local Loopback) RX packets 24033 bytes 1618052 (1.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 24033 bytes 1618052 (1.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo:1: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 192.168.7.223 netmask 255.255.255.255 loop txqueuelen 0 (Local Loopback) [root@7-node1 logs]#
arp抑制:
[root@7-node1 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arpignore [root@7-node1 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arpannounce [root@7-node1 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arpignore [root@7-node1 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arpannounce
NAT模式配置
要点
. lvs-server需要开启内核转发
. real-server需要把网关配置成DIP,或者默认路由是走DIP,配置方式是可以是配置文件不配置网关,手动添加默认路由:route add default gw dip,假设还有一个路由网关供上网用的,你可以在第二个网卡上增加,也就是配置两个不同IP网段的ip。
. real-server的web服务可以用不同的端口,不一定非要80,因为端口也可以转换。
- real-server上配置:
[root@7-node4 ~]# ipvsadm -A -t 192.168.7.223:80 -s rr [root@7-node4 ~]# ipvsadm -a -t 192.168.7.223:80 -r 10.0.0.220 -m [root@7-node4 ~]# ipvsadm -a -t 192.168.7.223:80 -r 10.0.0.221 -m [root@7-node4 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.7.223:80 rr -> 10.0.0.220:80 Masq 1 0 0 -> 10.0.0.221:80 Masq 1 0 0 [root@7-node4 ~]# ipvsadm -a -t 192.168.7.223:80 -r 10.0.0.222 -m [root@7-node4 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.7.223:80 rr -> 10.0.0.220:80 Masq 1 0 4 -> 10.0.0.221:80 Masq 1 0 4 -> 10.0.0.222:80 Masq 1 0 0 [root@7-node4 ~]#
- real-server配置:只需要把网关指向LVS-SERVER 的DIP,然后就是配置web服务了。
- 测试:
[root@cent7-node3 ~]# curl http://192.168.7.223 lvs -- 7.221 [root@cent7-node3 ~]# curl http://192.168.7.223 7.222-----10. 2222 [root@cent7-node3 ~]# curl http://192.168.7.223 lvs -- 7.221 [root@cent7-node3 ~]# curl http://192.168.7.223 7.222-----10. 2222 [root@cent7-node3 ~]#
在centos7.2上安装keepalived
1、系统环境:
[root@7-node2 etc]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@7-node2 etc]# uname -r 3.10.0-327.36.3.el7.x86_64 [root@7-node2 etc]#
2、准备环境:yum intall openssl-devel -y
3、下载keepalived最新版本:http://www.keepalived.org/software/keepalived-1.3.2.tar.gz
4、安装:tar xf keepalived-1.3.2.tar.gz && cd keepalived && ./configure && make && make install
配置说明:
- 发现直接安装之后,会生成启动文件到指定位置:/usr/lib/systemd/system/keepalived.service
- 但启动文件里的命令是/usr/sbin/下面的,但默认是安装在/usr/local/sbin下面,所以需要复制过去:/bin/cp /usr/local/sbin/keepalived /usr/sbin/
- 默认没有配置文件,启动服务默认指定的配置文件的位置是/etc/keepalived,所以需要配置,但/usr/local/etc/下面有配置文件事例,可以直接复制过去。
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ - 配置启动脚本的参数文件,也就是如配置一些日志之类的,可以在这个文件上配置,需要把样例中复制到指定的位置才能生效:
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig - 配置日志:
日志如果没有配置在messages里面,它是利用系统日志软件rsyslog来产生的
编辑/etc/sysconfig/keepalived文件,把 KEEPALIVEDOPTIONS=”-D“改成KEEPALIVEDOPTIONS=”-D -S 0 -d” 其中-S 0指定日志放在0设置上。
然后配置/etc/rsyslog.conf中添加配置:
local0.* (*表示所有) /var/log/keepalived.log 最后重启rsyslog和keepalived生效,就可以看到/var/log/keepalived.log日志了。 - keepalived的配置文件中的{ 前面都有一空格,不然会报错。
- 如果编译报*.h的文件找不到报错之类的,可能原因是你的内核有多个产生的,可以ln –s /usr/src/kernels/内核 /usr/src/linux 可以变换一个内核在make 一下。
- 注意备节点是BACKUP,不是SLAVE主节点是MASTER。
安装配置脚本及配置文件
以下是keepalived的安装配置脚本,前提是先要安装lvs,yum install ipvsadm -y,脚本如下:
#!/bin/bash #create by clc #no.1 environment prepare if [ -d /usr/src/kernels/2.6.32-504.el6.x86_64/ -a ! -d /usr/src/linux ] then /bin/ln -s /usr/src/kernels/2.6.32-504.el6.x86_64/ /usr/src/linux fi if [ `rpm -qa|grep openssl-devel|wc -l` -ne 1 ] then yum install openssl-devel -y fi #no.2 install [ ! -d /home/clc/tools ]&& mkdir /home/clc/tools -p cd /home/clc/tools [ ! -f /home/clc/tools/keepalived-1.2.18.tar.gz ]&& wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz tar -zxf keepalived-1.2.18.tar.gz && \ cd keepalived-1.2.18 && \ ./configure && make && make install #no.3 configure if [ `echo $?` -eq 0 ] then /bin/cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ /bin/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ mkdir /etc/keepalived /bin/cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ /bin/cp /usr/local/sbin/keepalived /usr/sbin/ fi [root@lvs1 scripts]#
配置文件如下:
! Configuration File for keepalived global_defs { router_id LVS_100 } vrrp_sync_group CLC { group { VI_1 } } 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 { 192.168.7.224/24 } } virtual_server 192.168.7.224 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 192.168.7.223 80 { weight 1 TCP_CHECK { connect_timeout 8 delay_before_retry 3 nb_get_retry 5 connect_port 80 } } real_server 192.168.7.220 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 5 delay_before_retry 3 connect_port 80 } } }
real-server配置脚本
脚本如下:
#!/bin/bash #description : start realserver VIP=192.168.7.224 . /etc/rc.d/init.d/functions case "$1" in start) echo " start LVS of REALServer" #/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up ip addr add $VIP/32 dev lo label lo:0 route add -host $VIP dev lo echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce ;; stop) #/sbin/ifconfig lo:0 down ip addr del $VIP/32 dev lo label lo:0 route del -host $VIP dev lo echo "close LVS Directorserver" echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce ;; *) echo "Usage: $0 {start|stop}" exit 1 esac
———————-以下是转载———————————-
一、LVS概述
1.LVS:Linux Virtual Server
四层交换(路由):根据请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器(根据调度算法);
不能够实现应用层的负载均衡
lvs(又称ipvs),基于内核中的防火墙netfilter实现
2.lvs集群术语:
vs:Virtual Server | 虚拟服务,可称为Director、Dispatcher分发器、Balancer负载均衡器 |
rs:Real Server | 真实服务器 |
CIP:Client IP | 客户端IP |
VIP:Director Virtual IP | 等同于FIP(流动IP),负载均衡器虚拟IP |
DIP:Director IP | 调度IP(第二张网卡IP地址) |
RIP:Real Server IP | 真实服务器IP |
3.LVS:ipvsadm/ipvs
(1)ipvsadm: CLI工具
用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;# yum install -y ipvsadm
(2)ipvs:内核存在(CentOS默认支持)
工作于内核上的netfilterINPUT钩子之上的程序代码;其集群功能依赖于ipvsadm定义的集群服务器规则;
支持基于TCP、UDP、SCTP、AH、EST、AH_EST等协议的众多服务;
4.负载均衡集群中设计时的要点:
(1)session保持
session sticky (iphash):IP地址绑定,来源IP记录在ip hash表作统一调度
session cluster(multicast/broadcast/unicast):广播集群同步(复制)session,只适用于小规模场景
session server ():session服务器
(2)数据共享(提供一致性存储)
1) 共享存储;
NAS:Network Attached Storage (文件级别),网络附加存储,文件服务器
SAN:Storage Area Network (块级别),存储区域网络
DS:Distributed Storage,分布式春初
2) 数据同步:rsync … …
二、LVS模型
1.lvs-nat:地址伪装模型
多目标的DNAT:通过将请求报文的目标地址和目标端口修改为挑选出某RS的RIP和PORT来实现;
客户端主机发起请求报文CIP指向VIP,通过内核的核心网卡间转发功能,VIP会将请求交给DIP进行调度,DIP根据设定的算法进行负载均衡给后端的RS主机的RIP,在这个过程中DIP调度功能会将目标IP地址重写为RIP。请求和返回请求读要调度DIP来进行转换操作。
(1)RIP和DIP应该使用私网地址,RS的网状应该指向DIP;
(2)请求和响应报文都要经由director转发;极高负载的场景中,Director可能会成为系统瓶颈(响应报文大);
(3) 支持端口映射(转发);
(4) VS必须为Linux,RS可以为任意操作系统;
(5)RS的RIP与Director的DIP必须在同一IP网络;
2.lvs-dr(direct routing直接路由):网关模型
通过修改请求报文的MAC地址进行转发;IP首部不会发生变化(源IP为CIP,目标IP始终为VIP)
客户端发起请求,经过层层路由到达离VS服务器最近的交换机,通过交换机转发给VS服务器,由VS服务器负载均衡转发请求给RS服务器。在此过程中VIP修改MAC地址调度请求给真实主机。在此过程中通过ARP协议在一个局域网中广播寻找真实主机的MAC地址。每个RS真实主机的网卡会一个别名地址VIP,实现全过程源地址为CIP,目标地址为VIP不变。调度基于寻找MAC。网关模型中的所有主机均要能与外网通信。这样RS主机就能够直接响应客户机。
(1)确保前端路由器将目标IP为VIP的请求报文一定会发送给Director;
解决方案:
1)静态绑定;
2)禁止RS响应VIP的ARP请求;
a) arptables上定义;
b) 修改各RS的内核参数,并把VIP配置在特定的接口上实现禁止其响应;
(2)RS的RIP可以使用私有地址,也可以使用公网地址;
RIP使用私有地址可以通过在之前加一个路由器的方式和外网通信,直接响应客户机
(3)RS跟Director必须在同一物理网络中;
(4)请求报文必须由Director调度,但响应报文必须不能经由Director;
(5) 不支持端口映射;
(6) 各RS可以使用大多数的操作系统;
3.lvs-tun(ip tunneling):IP隧道模型
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原有的IP首部这外再次封装一个IP首部(源IP为DIP,目标IP为RIP);
(1)RIP,DIP,VIP全得是公网地址;
(2)RS的网关不能也不可能指向DIP;
(3)请求报文经由Director调度,但响应报文将直接发给CIP;
(4) 不支持端口映射;
(5)RS的OS必须支持IP隧道功能;
4.lvs-fullnat:完整模型(同时改变请求报文的源IP和目标IP)
通过同时修改请求报文的源IP地址(cip–>dip)和目标IP地址(vip–> rip)实现转发;
注意:前三种为标准类型,第四种为后添加类型,内核默认可能不支持,需自编译内核
(1)VIP是公网地址;RIP和DIP是私网地址,且可以不在同一IP网络中,但需要通过路由互相通信;
(2)RS收到的请求报文的源IP为DIP,因此其响应报文将发送给DIP;
(3)请求报文和响应报文都必须经由director;
(4) 支持端口映射;
(5) RS可使用任意OS;
三、LVS scheduler调度算法
1.静态方法:仅根据算法本身进行调度
(1)RR :round robin,轮询机制,依次分配请求,方式简单但时负载均衡的效果一般
(2)WRR :weighted rr,加权轮询,权重越大承担负载越大
(3)SH :source ip hash,源地址哈希,将来自同一个ip请求通过记录在ip hsash表中绑定在同一个服务器,实现session保持
缺点:调度粒度大,对负载均衡效果差;session黏性不同,连接时长保持不同
(4)DH :desination ip hash,目标地址哈希。能实现连接追踪,但不考虑负载均衡效果
正向web代理,负载均衡内网用户对互联网的请求;
Client–> Director –> Web Cache Server(正向代理)
2.动态方法:根据算法及各RS当前的负载状态进行评估
Overhead | 负载值,VS转发时记录每个RS的Active和Inactive数量(甚至权重)进行算法计算 |
Active | 活动链接值,当发起新请求后保持在ESTABLISHED状态时,仍有请求响应 |
Inactive | 非活动链接值,在ESTABLISHED状态时,尚未断开保持空闲等待状态 |
(1)LC:least connection,最少连接
Overhead=Active*256+Inactive
后端的RS谁的连接少就分发请求至那台RS,若overhead一样则自上而下轮询列表中的RS
(2)WLC:weighted least connection,加权最小连接
Overhead=(Active*256+Inactive)/weight,计算结果小的将为选中的下一跳RS服务器
缺点:当Overhead一样时,自上而下轮询响应,权重小的若在列表上方则其会响应
(3)SED:Shortest Expection Delay,最短期望延迟
Overhead=(Active+1)*256/weight
缺点:解决WLC问题,但时无法确保权重小的主机一定响应
(4)NQ:never Queue,永不排队,SED算法改进
RS权重大小排列,每台RS服务器先分配一个请求,其余的按照权重大小计算分配
(5)LBLC:Locality-Based LC,基于本地的最少连接,动态的 DH连接算法
(6)LBLCR:LBLC with Replication,带复制功能的LBLC
四、ipvsadm命令
1.管理集群服务:
ipvsadm -A|E -t|u|f service-address [-s scheduler][-p [timeout]]
ipvsadm -D -t|u|f service-address
-A:添加、-E:修改、-D:删除
service-address | 服务地址和 -t|u|f 结合使用,具体格式如下 |
-t, tcp, vip:port | TCP的ip和port |
-u, udp, vip:port | UDP的ip和port |
-f, fwm, MARK | 防火墙标记 |
-s scheduler:默认为WLC调度算法,可省;
-p [timeout] :超出时长,持久连接相关,默认时长为300秒
2.管理集群服务上的RS:
ipvsadm-a|e -t|u|f service-address -rserver-address [-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -rserver-address
-a:添加一个RS、-e:修改一个RS、-d:删除一个RS
server-address指的是rip[:port],端口可省表示与之前的service-address相同,只有nat模式支持端口映射才会使用
[-g|i|m]
-g:GATEWAY (默认),lvs-dr模型
-i: IPIP, lvs-tun隧道模型
-m: MASQUERADE,lvs-nat模型
3.查看
ipvsadm -L|l[options]
-n:numeric,数字格式显示地址和端口;
-c:connection,显示ipvs连接;
–stats:显示统计数据;
–rate:速率
–exact:精确值,不经过单位换算的数值
4.清空规则:
ipvsadm -C
5.数器清零:
ipvsadm -Z [-t|u|f service-address]
6.保存和重载:
保存:
ipvsadm-S > /PATH/TO/SOME_RULE_FILE
ipvsadm-save > /PATH/TO/SOME_RULE_FILE
重载:
ipvsadm -R < /PATH/FROM/SOME_RULE_FILE
ipvsadm-restore< /PATH/FROM/SOME_RULE_FILE
注意:需要结合重定向一起使用,从自定义的规则文件中导入导出
附录(ipvsadm -h):
ipvsadm-A|E -t|u|f service-address [-s scheduler]
[-p[timeout]] [-M netmask] [-b sched-flags]
ipvsadm-D -t|u|f service-address
ipvsadm-C
ipvsadm-R
ipvsadm-S [-n]
ipvsadm-a|e -t|u|f service-address -r server-address
[-g|i|m][-w weight] [-x upper] [-y lower]
ipvsadm-d -t|u|f service-address -r server-address
ipvsadm-L|l [options]
ipvsadm-Z [-t|u|f service-address]
ipvsadm–set tcp tcpfin udp
ipvsadm-h
五、lvs-nat模型构建
1.lvs-nat模型示意图
本次构建的lvs-nat模型的示意图如下,其中所有的服务器和测试客户端均使用VMware虚拟机模拟,所使用的CentOS 7
VS内核都支持ipvs功能,且安装ipvsadm控制书写lvs规则工具。
RS端两台服务器为httpd服务器做请求的负载均衡。
注意;
1) 客户端可以使用Windows上的浏览器,会后缓存影响结果,所以采用CentOS上的curl命令请求http协议显示更加直观
2) DIP上不能配置iptables规则
2.VS网卡配置
(1)增加网卡
在”虚拟机设置”中增加一个网络适配器设备,并将其自定义特定网络为VMnet2模式,此处为了模拟负载均衡服务器的两张网卡处于不同网段
(2)配置VS两张网卡的IP地址
[root@localhost ~]# nmtui # CentOS 7 文本图形界面配置网卡命令
[root@localhost ~]# systemctl start network.service
注意:
网络适配器1(172.16.249.57)模拟为外网网卡,网络适配器2(192.168.100.1)模拟为内网,且该网卡的Ip地址要和RS服务器得ip在同一网段,DIP作为RIP的网络调度(网关),无需配置GATEWAY
[root@localhost~]# ifconfig
3.RS网卡配置
此处使用两台CentOS 7虚拟机作为负载均衡后端真实响应主机,安装RPM包格式httpd服务,并启动服务。nmtui命令配置网卡信息,RS1的IP:192.168.100.2,RS2的IP:192.168.100.3,RIP和DIP在同一网段,虚拟机网卡和DIP同时匹配值为VMnet2模式,且两台RS服务器主机网关指向DIP:192.168.100.1
[root@localhost~]# yum install -y httpd
[root@localhost ~]# systemctl start httpd.service
注意:安装完成后在各httpd服务器上配置测试页面,/var/www/html/index.html.
[root@localhost ~]# nmtui # 配置方法同上,此处省略
… …
[root@localhost ~]# systemctl start network.service
[root@localhost~]# ifconfig
4.测试所有主机是否能够通信
用ping命令测试各节点的通信,例如RIP1和VIP、DIP、RIP2之间是否能够通信
[root@localhost ~]# ping IPADDR
5.VS主机:核心转发和安装ipvsadm
(1)安装ipvsadm组件:[root@localhost ~]# yum install -y ipvsadm
(2)启动网卡间核心转发功能:[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1
[root@localhost~]# cat /proc/sys/net/ipv4/ip_forward
6.VS主机:定义配置lvs-nat服务(此处采用rr算法)
(1)定义ipvsadm负载均衡集群规则,并查看
此处定义DIP是以-s指定为rr算法进行轮询调度,-m指定模式为lvs-nat,配置命令如下:
[root@localhost~]# ipvsadm -A -t 172.16.249.57:80 -s rr
[root@localhost~]# ipvsadm -a -t 172.16.249.57:80 -r 192.168.100.2:80 -m
[root@localhost~]# ipvsadm -a -t 172.16.249.57:80 -r 192.168.100.3:80 -m
[root@localhost~]# ipvsadm -L -n
(2)Client客户机测试
在客户端主机上使用curl命令对VIP发起请求,负载均衡服务器会将请求按照rr算法依次将请求调度给不同的主机进行处理,依次请求给分发给192.168.100.2和192.168.100.3主机响应。
[root@localhost~]# curl http://172.16.249.57
7.VS主机:定义配置lvs-nat服务(此处采用wrr算法)
(1)定义ipvsadm负载均衡集群规则,并查看
此处将在上面lvs-nat的rr的基础上进行修改,改成wrr加权轮询算法;将192.168.100.2的权重设置为1,192.168.100.3的权重设置为3。
[root@localhost~]# ipvsadm -E -t 172.16.249.57:80 -s wrr
[root@localhost~]# ipvsadm -e -t 172.16.249.57:80 -r 192.168.100.2 -w 1 -m
[root@localhost~]# ipvsadm -e -t 172.16.249.57:80 -r 192.168.100.3 -w 1 -m
[root@localhost~]# ipvsadm -L -n
(2)Client客户机测试
在客户端主机用curl发起请求,负载均衡主机VS会将其按照权重大小转发给各个主机,四个请求有三个发给了192.168.100.3请求响应,一个发给了192.168.100.2主机处理。并以此算法做轮询负载请求
[root@localhost~]# curl http://172.16.249.57
六、lvs-dr模型构建
1.lvs-dr模型示意图
三台主机为虚拟机CentOS 7,每台主机仅有一块网卡,且使用桥接方式都指向外部网络的网关172.16.100.1
2.配置VS和RS服务器的VIP
此处的VIP均已别名的形式配置在往卡上,VS是配置在对外通信的DIP的网卡上;RS配置在lo本地回环网卡
注意:此时配置的VIP的子网掩码必须为255.255.255.255,广播地址为自己本身
VS:[root@localhost~]# ifconfig eno16777736:0 172.16.50.50 netmask 255.255.255.255 broadcast172.16.50.50 up
RS:[root@localhost~]# ifconfig lo:0 172.16.50.50 netmask 255.255.255.255broadcast 172.16.50.50 up
3.RS服务器上配置路由
[root@localhost~]# route add -host 172.16.50.50 dev lo:0
4.RS服务器配置APR内核参数修改
[root@localhost~]# ll /proc/sys/net/ipv4/conf
(1)ARP响应行为和ARP解析行为内核参数:
1)arp_annouce定义通告级别
0:默认级别,将本地的任何接口上的配置的地址都在网络中通告
1:尽量避免向本主机上的其他网卡进行网络通信,特殊情况下其他接口也可以
2:总是使用最佳网络地址接口(仅使用定义的网卡接口在同网络通信)
2)arp_ignore定义响应级别(0-8九个级别),响应时忽略方式
0:都全都响应
1:只对从本接口进入的请求响应,且本接口地址是个网络地址
… …
注释:一般使用arp_annouce=2,arp_ignore=1
(2)配置各RS主机参数
注意:all必须配置、eno16777736(本地)和lo两个可以同时全部配置或者配置其中一个
RealServer内核参数:
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#echo 1 > /proc/sys/net/ipv4/conf/INTERFACE/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/INTERFACE/arp_announce
注意:INTERFACE为你的物理接口;此处网卡接口指的是eno16777736和lo
5.VS主机:定义配置lvs-dr模式(此处采用rr算法)
(1)配置查看
[root@localhost~]# ipvsadm -A -t 172.16.50.50:80 -s rr
[root@localhost~]# ipvsadm -a -t 172.16.50.50:80 -r 172.16.200.10 -g
[root@localhost~]# ipvsadm -a -t 172.16.50.50:80 -r 172.16.200.11 -g
[root@localhost~]# ipvsadm -L -n
(2)测试
[root@localhost~]# curl http://172.16.50.50
因为基于rr算法调度,依次分发给RS主机
七、通过防火墙标记来定义lvs
1.FWM防火墙标记功能
防火墙标记可以实现多个集群服务绑定为同一个,实现统一调度;将共享一组RS的集群服务统一进行定义
FWM基于iptables的mangle表实现防护墙标记功能,定义标记做策略路由
2.FWM定义集群的方式
(1)在director上netfilter的mangle表的PREROUTING定义用于”打标”的规则
~]#iptables -t mangle -A PREROUTING -d $vip -p $protocol –dport $port -j MARK–set-mark #
$vip:VIP地址
$protocol:协议
$port:协议端口
(2)基于FWM定义集群服务:
~]#ipvsadm -A -f # -s scheduler
3.实例演示
[root@localhost~]# iptables -t mangle -A PREROUTING -d 172.16.50.50 -p tcp –dport 80 -j MARK–set-mark 5
[root@localhost~]# ipvsadm -A -f 5 -s rr
[root@localhost~]# ipvsadm -a -f 5 -r 172.16.200.10 -g
[root@localhost~]# ipvsadm -a -f 5 -r 172.16.200.11 -g
八、LVS持久连接功能:lvs persistence
1.lvs persistence功能
无论ipvs使用何种scheduler,其都能够实现在指定时间范围内始终将来自同一个ip地址的请求发往同一个RS;实现方式和lvs调度的十种算法无关,通过lvs持久连接模板(hash表)实现,当超过自定义的可持节连接时长候再根据LVS算法本身进行调度。
ipvsadm命令中-p选项实现,在-p后不指定具体数字(单位:秒),默认为300,到时候会自动延长2分钟,对于web本身就是15秒
2.模式
(1)每端口持久(PPC)
客户端对同一服务端口发起请求,会基于该服务的端口实现请求在一段时间内对同一RS服务器持久连接;
例如:有两台主机做为RS服务器做http和hssh的两种服务的集群,仅http做每端口持久,Client请求会实现绑定在,但是22号端口请求不会绑定在同一台RS
(2)每客户端持久(PCC):定义tcp或udp协议的0号端口为集群服务端口
director会将用户的任何请求都识别为集群服务,并向RS进行调度;同一客户端的请求任何端口都发往同一台第一次选定的RS服务器
(3)每防火墙标记持久(PFWMC)
将两个或两个以上服务通过防火墙打标绑定在一起,这些服务的请求实现同时定向与同一台RS服务器,服务绑定同一RS
实例:
lvs-dr模式下以rr算法绑定http和https服务
~]#iptables -t mangle -A PREROUTING -d 172.16.100.9 -p tcp –dport 80 -j MARK–set-mark 99
~]#iptables -t mangle -A PREROUTING -d 172.16.100.9 -p tcp –dport 443 -j MARK–set-mark 99
~]#ipvsadm -A -f 99 -s rr -p
~]#ipvsadm -a -f 99 -r 172.16.100.68 -g
~]#ipvsadm -a -f 99 -r 172.16.100.69 -g
附录:LVS-DR类型RS脚本示例
#!/bin/bash
#
vip=172.16.50.50
interface=”lo:0″
case$1 in
start)
echo1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig$interface $vip broadcast $vip netmask 255.255.255.255 up
routeadd -host $vip dev $interface
;;
stop)
echo0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo0 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig$interface down
;;
status)
ififconfig lo:0 |grep $vip &> /dev/null; then
echo”ipvs is running.”
else
echo”ipvs is stopped.”
fi
;;
*)
echo”Usage: `basename $0` {start|stop|status}”
exit1
esac
转自:http://xuding.blog.51cto.com/4890434/1740228
原文链接:LVS负载均衡集群搭建,转载请注明来源!