
image.png
会话保持的3种方法

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png
LVS:Linux Virtual Server,负载调度器,集成内核
官网:http://www.linuxvirtualserver.org/
VS: Virtual Server,负责调度
RS: Real Server,负责真正提供服务
L4:四层路由器或交换机
工作原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS
lvs集群类型中的术语:
VS:Virtual Server, Director, Dispatcher(调度器),Load Balancer
RS:Real Server(lvs), upstream server(nginx),backend server(haproxy)
CIP:Client IP
VIP: Virtual serve IP VS外网的IP
DIP: Director IP VS内网的IP
RIP: Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP
lvs: ipvsadm/ipvs
ipvsadm:用户空间的命令行工具,规则管理器,用于管理集群服务及RealServer
ipvs:工作于内核空间netfilter的INPUT钩子上的框架
lvs集群的类型:
lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
lvs-dr:操纵封装新的MAC地址
lvs-tun:在原请求IP报文之外新加一个IP首部
lvs-fullnat:修改请求报文的源和目标IP
-------------------------------------------------------------------
lvs-nat
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
(1)RIP和DIP必须在同一个IP网络,且应该使用私网地址(公有地址也ok);RS的网关要指向DIP(前提是VS与RS之间无网关)
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统
LVS-DR:Direct Routing,直接路由
LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发;
源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;
源IP/PORT,以及目标IP/PORT均保持不变
重点:Director和各RS都配置有VIP
(1) 确保前端路由器将目标IP为VIP的请求报文发往Director
方法1: 在前端网关做静态绑定VIP和Director的MAC地址
方法2: 在RS上使用arptables工具
yum info arptables; route -n
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP(简单举例,不这么用)
方法3: 在RS上修改内核参数以限制arp通告及应答级别
arp_announce
arp_ignore
yum -y install kernel-doc
less /usr/share/doc/kernel-doc-3.10.0/Documentation/networking/ip-sysctl.txt
/arp_announce /arp_ignore
tree /proc/sys/net/ipv4/conf/
(2) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;
RIP的网关不能指向DIP,以确保响应报文不会经由Director
(3) RS和Director要在同一个物理网络
(4) 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
(5) 不支持端口映射(端口不能修改)
(6) RS可使用大多数OS系统
避免同一个网络的IP冲突:
方法1: 如上所释
方法2: RS服务器的VIP绑定到回环网卡,再加路由
centos6(不操作)
route add -net 1.1.1.0/24 dev eth0
ip a a 1.1.1.1/32 dev lo
ping 1.1.1.2
route -n
centos7: ip a a 1.1.1.2/24 dev ens33
lvs-tun(跨网络)
转发方式
不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),
而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),
将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
(1) DIP, VIP, RIP都应该是公网地址(可以是私网地址-->拉专线,网络规模较大)
(2) RS的网关不能,也不可能指向DIP
(3) 请求报文要经由Director,但响应不能经由Director
(4) 不支持端口映射
(5) RS的OS须支持隧道功能
lvs-fullnat(跨城市网络)
通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP
VIP --> RIP
(1) VIP是公网地址,RIP和DIP是私网地址(或公网),且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
(2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
(3) 请求和响应报文都经由Director
(4) 支持端口映射;
注意:此类型kernel默认不支持
总结
vs-nat与lvs-fullnat:请求和响应报文都经由Director
lvs-nat:RIP的网关要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信
lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信
4种模式
-------------------------------------------------------------------
ipvs scheduler 调度算法
根据其调度时是否考虑各RS当前的负载状态,分为两种:
静态方法--不考虑RS负载
动态方法--根据RS负载来调整
静态方法:仅根据算法本身进行调度
1、RR:roundrobin,轮询(平等对待)
1和3请求发送至RS1
2和4请求发送至RS2
2、WRR:Weighted RR,加权轮询
RS1--权重=1--接受1/3的请求
RS2--权重=2--接受2/3的请求
3、SH:Source Hashing,实现session sticky,源IP地址hash;
将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
用户发送请求到达RS1,刷新界面后,新的请求仍然发送至RS1,数据不会丢失
4、DH:Destination Hashing,目标地址哈希,
将发往同一个目标地址的请求始终转发至第一次挑中的RS,
典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
外网访问内网--反响代理
内网访问外网--正向代理
局域网用户1(发送aqy视频请求)--VS服务器(调度)--RS1(代理服务器)--互联网
局域网用户2(发送tx视频请求)--VS服务器(调度)--RS2(代理服务器)--互联网
当用户3发送aqy视频请求,VS服务器会自动调度至RS1
当用户3发送tx视频请求,VS服务器会自动调度至RS2
动态方法:主要根据每RS当前的负载状态及调度算法进行调度
Overhead(负载)=value(负载值) 较小的RS将被调度
1、LC:least connections 适用于长连接应用
Overhead=activeconns*256+inactiveconns
inactiveconns:仅连接,无请求
activeconns:有连接,还有并发数
2、WLC:Weighted LC,默认调度方法
Overhead=(activeconns*256+inactiveconns)/weight
权重(weight)越大,负载值越小,会被优先调度使用
3、SED:Shortest Expection Delay,初始连接高权重优先(同2)
Overhead=(activeconns+1)*256/weight
4、NQ:Never Queue,第一轮均匀分配,后续SED
避免了权重高的机器累的要死,权重低的机器一个请求也没有
5、LBLC:Locality-Based LC,动态的DH算法,使用场景:
根据负载状态实现正向代理
aqy视频请求-->RS1(代理服务器)
tx视频请求-->RS2(代理服务器)
6、LBLCR:LBLC with Replication,带复制功能的LBLC;
解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS
aqy视频请求-->RS1(代理服务器)--独家播放“人民的正义”电视剧--服务器累的要死
tx视频请求-->RS2(代理服务器)--没有版权--请求少--轻松的要死
LBLCR-->RS1的记录复制到RS2,平衡负载
10种算法,静态前3种,动态前4种,较常用

image.png
ipvsadm/ipvs
centos7:grep -i -A 20 ipvs /boot/config-3.10.0-693.el7.x86_64 协议和算法(scheduler)
centos6:grep -i -A 20 ipvs /boot/config-2.6.32-696.el6.x86_64
支持的协议:TCP, UDP, AH, ESP, AH_ESP, SCTP
ipvs集群
管理集群服务
管理服务上的RS
ipvsadm包构成
yum install ipvsadm
rpm -qi ipvsadm; rpm -ql ipvsadm
程序包:ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
ipvsadm命令(和iptables的命令有点类似)
集群服务管理:增、删、改(大写选项)
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] 增,改
-A 增
-E 改
-t|u|f service-address
-t: TCP协议的端口,VIP:TCP_PORT
-u: TCP协议的端口,VIP:UDP_PORT
-f:firewall MARK,标记,一个数字
-s scheduler:指定集群的调度算法,默认为wlc
ipvsadm -D -t|u|f service-address 删除
ipvsadm –C 清空定义的所有内容
ipvsadm –R 重载
ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
ipvsadm -R < /PATH/FROM/IPVSADM_FILE
systemctl restart ipvsadm.service
ipvsadm -S [-n] ... 保存
保存:建议保存至/etc/sysconfig/ipvsadm
ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service
ipvsadm -L|l [options] 查看规则
--numeric/-n:以数字形式输出地址和端口号
--exact:扩展信息,精确值
--connection/-c:当前IPVS连接输出
--stats:统计信息
--rate :输出速率信息
ipvsadm -Z [-t|u|f service-address] 清空计数器,数值归0
集群服务的RS管理:增、删、改(小写选项)
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-a 增(针对RS服务器,小写)
-e 改
-r server-address
server-address-->rip[:port] 如省略port,不作端口映射
lvs类型
-g: gateway,dr类型,默认
-i: ipip,tun类型
-m: masquerade,nat类型(支持端口映射)
-w weight:权重(要根据集群服务的调度算法来设置,如果算法不是关于权重的,则不用设置)
ipvsadm -d -t|u|f service-address -r server-address 删除
ipvs规则: /proc/net/ip_vs(配置好,才会有)
ipvs连接:/proc/net/ip_vs_conn(配置好,才会有)
负载均衡集群设计时要注意的问题
(1) 是否需要会话保持
(2) 是否需要共享存储
共享存储:NAS, SAN, DS(分布式存储)
数据同步

image.png
lvs-nat 设计要点
(1) RIP与DIP在同一IP网络, RIP的网关要指向DIP
(2) 支持端口映射
(3) Director要打开核心转发功能
VS和RS中间可以有路由
centos6--客户机
centos7--VS服务器
centos7-3--RS1--仅主机模式
centos7-4--RS2--仅主机模式
以上机器的防火墙都要关闭
iptables -vnL; iptables -F
iptables -vnL -t nat; iptables -F -t nat
iptables -vnL -t mangle; iptables -F -t mangle
centos7-3和cenos7-4
关机-->设置-->移除桥接模式-->只剩仅主机模式
cdnet
rm -rf ifcfg-ens34
vim ifcfg-ens33
添加网关
GATEWAY=192.168.29.127
systemctl restart network
route -n 看到添加的gateway
yum -y install httpd
systemctl httpd restart
hostname RS1/2(可不做)
echo RS1/2 webserver > /var/www/html/index.html
ping 192.168.29.127 ping通
ping 192.168.29.129 ping通
ping 192.168.29.130 ping通
centos6
关机-->设置-->移除仅主机模式-->只剩桥接模式
ip a 注意看mac和IP的对应
ping 192.168.29.127 ping不通
ping 192.168.29.129 ping不通
ping 192.168.29.130 ping不通
ping 192.168.1.7 ping通
curl 192.168.1.7 可以通,centos7自己的web网站(centos7安装httpd服务的前提下)
centos7
yum install httpd -y
systemctl restart httpd
echo VS Server > /var/www/html/index.html
yum install ipvsadm
vim /etc/sysctl.conf
添加信息
net.ipv4.ip_forward=1 打开核心转发功能
sysctl -p 使设置生效
hostname VS(可不做)
注意做调度时,时间要同步才可以;做高可用的时候,一定要做
ntpdate server-ip(不做,生产中要做)
curl 192.168.29.129 可以通
curl 192.168.29.130 可以通
ipvsadm -A -t 192.168.1.7:80 -s rr 算法--轮询
ipvsadm -a -t 192.168.1.7:80 -r 192.168.29.129:80 -m 采用nat模式(VS采用轮询算法,不用加-w)
RS的端口不写,默认端口映射,也是80端口
ipvsadm -Ln
curl 192.168.1.7 访问自己转发至192.168.29.129
for i in {1..20};do curl 192.168.1.7;sleep 1;done 都是RS1
ipvsadm -a -t 192.168.1.7:80 -r 192.168.29.130:80 -m
ipvsadm -Ln
for i in {1..20};do curl 192.168.1.7;sleep 1;done 交替出现RS1和RS2
centos6
curl 192.168.1.7 不能连接(?)
原因可能是centos7缺少路由记录,192.168.29网段不能连接192.168.1.6
centos7(待定)
cdnet; vim route-ens33(192.168.29.127):添加192.168.29.0/24 via 192.168.1.7
centos7
ipvsadm -Lcn 可以看到已经连接
ipvsadm -Ln --stats 统计信息
ipvsadm -Ln --rate 输出速率信息
cat /proc/net/ip_vs ipvs规则
cat /proc/net/ip_vs_conn ipvs连接
ab -c 100 -n 10000 http://192.168.1.7/ 测性能(可以不做)
centos7-3/4
cut -d" " -f1 /var/log/httpd/access_log |sort -nr|uniq -c |sort -n
进行分析,次数多的IP--可能是一种攻击行为
注意:
当RS1服务器关闭http服务时,systemctl stop httpd
用户访问时,VS服务器还会把请求调度至RS1服务器,
因为VS服务器虽有超强的调度能力,但没有检查后端服务器是否还提供服务的能力
需要配合其他工具
centos7
更改算法
ipvsadm -E -t 192.168.1.7:80 -s wrr 加权轮询(权重)
ipvsadm -e -t 192.168.1.7:80 -r 192.168.29.129 -m -w 3
ipvsadm -Ln
for i in {1..20};do curl 192.168.1.7;sleep 1;done 请求的3/4都发送至RS1
nat
client--router--(vip)vs(dip)--router--rs(rip)
dr
client--router--switch----vs(vip,dip)
|----rs(vip,rip)
tun
client--router--vs(vip,dip)--dip,rip|cip,vip--router--rs(vip,rip)
fulnat
cip,vip--dip,rip--router(夸网络也行)--rip,dip--vip,cip

image.png
lvs-nat
VS和RS中间有路由
添加不同的网络
VMware--编辑--虚拟网络编辑器--更改配置(管理员权限)-->
添加网络--VMnet10--确定--去掉最下面的两个"√"即变为"自定义的网络"--应用
centos6--客户机--桥接模式
centos7--VS服务器--桥接和自定义模式
centos7-5--router路由--仅主机和自定义模式
centos7-3--RS1--仅主机模式
centos7-4--RS2--仅主机模式
以上机器的防火墙都要关闭
systemctl stop firewalld
systemctl disable firewalld
iptables -vnL; iptables -F
iptables -vnL -t nat; iptables -F -t nat
centos7-3和cenos7-4
关机-->设置-->移除桥接模式-->只剩仅主机模式
cdnet
rm -rf ifcfg-ens34
vim ifcfg-ens33
添加网关
GATEWAY=192.168.29.131
systemctl restart network
route -n
yum -y install httpd
systemctl httpd restart
echo RS1/2 webserver > /var/www/html/index.html
centos7-5
关机-->设置-->把网络调整为仅主机和自定义模式
ip a
cdnet
vim ifcfg-ens34
BOOTPROTO=none
IPADDR=10.0.0.100
PREFIX=8
ONBOOT=yes
systemctl restart network; ip a
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p 使设置生效
ping 192.168.29.129 ping通
ping 192.168.29.130 ping通
centos7-3和cenos7-4
ping 192.168.29.131 ping通
ping 10.0.0.100 ping通
centos7
关机-->设置-->把网络调整为桥接和自定义模式
ip a
cdnet
vim ifcfg-ens33
BOOTPROTO=none
IPADDR=10.0.0.200
PREFIX=8
ONBOOT=yes
systemctl restart network
ip a; route -n
centos7上加路由才可以连接centos7-5(路由)
方法1:ip route add 192.168.29.0/24 via 10.0.0.100 命令添加易丢失
方法2:手工写文件,不易丢失
cdnet
vim route-ens33
192.168.29.0/24 via 10.0.0.100
systemctl restart network
route -n
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p 使设置生效
yum install httpd -y
systemctl restart httpd
echo VS Server > /var/www/html/index.html
ping 10.0.0.100 ping通
ping 192.168.29.129 ping通
ping 192.168.29.130 ping通
curl 192.168.29.129 ok
curl 192.168.29.130 ok
centos7-3和cenos7-4:curl 10.0.0.200 ok
以上使环境搭建
centos7
yum install ipvsadm -y
ipvsadm -A -t 192.168.1.7:80 -s wrr
ipvsadm -a -t 192.168.1.7:80 -r 192.168.29.129 -m -w 3 nat模式
ipvsadm -a -t 192.168.1.7:80 -r 192.168.29.130 -m -w 5
ipvsadm -Ln
centos6
关机-->设置-->移除仅主机模式-->只剩桥接模式
ip a 注意看mac和IP的对应
ping 192.168.1.7 ok
curl 192.168.1.7 不能访问,原因是centos7-5(路由器)不能连接到外网,需要加路由记录
centos7-5(让RS可以到达外网)
route add default gw 10.0.0.200; route -n 不稳定,易丢失
cdnet
vim route-ens34(10.0.0.100)
0.0.0.0/0 via 10.0.0.200
systemctl restart network
route -n
centos7-3/4: ping 192.168.1.7 ok
centos6:
curl 192.168.1.7 可以访问至已经转发的结果
for i in {1..20};do curl --connect-timeout 1 192.168.1.7;done
centos7
把ipvsadm制作成脚本
vim lvs_nat.sh
#!/bin/bash
vip=192.168.1.7:80
rip1=192.168.29.129:8080
rip2=192.168.29.130
sch=wrr
case $1 in
start)
ipvsadm -A -t $vip -s $sch
ipvsadm -a -t $vip -r $rip1 -m -w 3
ipvsadm -a -t $vip -r $rip2 -m -w 1
;;
stop)
ipvsadm -C
;;
status)
ipvsadm -ln
;;
*)
echo "Usage: `basename $0` start|stop"
exit 1
;;
esac
bash -n lvs_nat.sh 检查语法
bash lvs_nat.sh status
bash lvs_nat.sh stop
bash lvs_nat.sh status
bash lvs_nat.sh start
centos6
for i in {1..20};do curl --connect-timeout 1 192.168.1.7;done
centos7-3
vim /etc/httpd/conf/httpd.conf
/Listen 80-->8080
systemctl restart httpd
centos6
for i in {1..20};do curl --connect-timeout 1 192.168.1.7;done
--------------------------------------------------------------------------
NAT模型实现https负载均衡集群
注意:RS: 都要提供同一个私钥和同一个证书
以前面的实验为基础
cnetos7--CA
cat /etc/pki/tls/openssl.cnf 根据[ CA_default ]的内容来写
cd /etc/pki/CA; ll
(umask 077; openssl genrsa -out private/cakey.pem 1024) 生成私钥
066也可以
tree
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
自签名证书
CN,henan,zhengzhou,fgq.com,IT,www.fgq.com,回车 邮箱不用了
touch index.txt 索引文件,只需要创建,系统自动会往里添加内容
echo 00 > serial 序列号,16进制,不能写一个0
cnetos7-3--CA的下一级
http的证书,所以放在http的配置文件里
cd /etc/httpd/conf.d/; ls
(umask 066; openssl genrsa -out httpd.key 1024)
openssl req -new -key httpd.key -out httpd.csr
CN,henan,xinxiang,fgq.com,beiguo,www.fgq.com,回车...
国家,省份,公司名必须与centos7--CA相同
scp httpd.csr 192.168.1.7:/etc/pki/CA
cnetos7
cd /etc/pki/CA; ll
openssl ca -in httpd.csr -out certs/httpd.crt -days 365 颁发证书
y, y
ls newcerts/; ls certs/; tree 前面二者里面的内容相同
cat serial; cat index.txt 更新序列号和索引
scp certs/httpd.crt 192.168.29.129:/etc/httpd/conf.d/
scp cacert.pem 192.168.29.129:/etc/httpd/conf.d/ 传输CA证书至cnetos7-3
cnetos7-3
cd /etc/httpd/conf.d
scp cacert.pem httpd.crt httpd.key 192.168.29.130:/etc/httpd/conf.d/
实现https
yum -y install mod_ssl 生成ssl.conf配置文件
vim ssl.conf
rpm -q --scripts mod_ssl
vim ssl.conf
443端口,路径-->默认不更改
SSLCertificateFile /etc/httpd/conf.d/httpd.crt 证书路径
SSLCertificateKeyFile /etc/httpd/conf.d/httpd.key
SSLCACertificateFile /etc/httpd/conf.d/cacert.pem
systemctl restart httpd
cnetos7-4
cd /etc/httpd/conf.d
yum -y install mod_ssl
vim ssl.conf
SSLCertificateFile /etc/httpd/conf.d/httpd.crt
SSLCertificateKeyFile /etc/httpd/conf.d/httpd.key
SSLCACertificateFile /etc/httpd/conf.d/cacert.pem
systemctl restart httpd
centos7
vim lvs_nat.sh
vip=192.168.1.7:80-->443 80端口更改为443即可
rip1=192.168.29.129
rip2=192.168.29.130
bash lvs_nat.sh status
bash lvs_nat.sh stop
bash lvs_nat.sh start
bash lvs_nat.sh status
centos6
vim /etc/hosts
手工添加:192.168.1.7 www.fgq.com
firefox https://www.fgq.com--Advanced--Add Exception--View/Get/Confirm--刷新
centos7 两个lvs集群服务:1个是443端口,1个是80端口
cp lvs_nat.sh lvs_nat2.sh
vim lvs_nat2.sh
vip=192.168.1.7:80
rip1=192.168.29.129:8080
rip2=192.168.29.130
bash lvs_nat.sh status
bash lvs_nat2.sh start
bash lvs_nat2.sh status
centos6
firefox https://www.fgq.com ok
for i in {1..20};do curl --connect-timeout 2 192.168.1.7;done ok

image.png
实现:LAMP+LVS
centos6--客户机--桥接模式
centos7--VS服务器--桥接和自定义模式
centos7-5--router路由--仅主机和自定义模式
centos7-3--RS1--仅主机模式
centos7-4--RS2--仅主机模式
前面的实验为基础,额外配置下面的几个即可
centos7.4-3--mysql--仅主机模式
centos7.4-4--nfs--仅主机模式
centos7.4--dns--桥接模式
centos7.4--dns--桥接模式
ip和网络模式进行设定
yum -y install bind
vim /etc/named.conf
更改下面两个选项
listen-on port 53 { 127.0.0.1; }; 127.0.0.1; --> localhost;
allow-query { localhost; }; localhost; --> any;
vim /etc/named.rfc1912.zones
zone "fgq.com" IN {
type master;
file "fgq.com.zone";
};
cd /var/named
vim fgq.com.zone
$ttl 1d
@ IN SOA admin.fgq.com. dnssrv ( 1 1d 10m 1w 3d )
NS dnssrv(继承上面,不能顶头写)
dnssrv A 192.168.1.40
websrv A 192.168.1.7(VIP--VS的IP)
www CNAME websrv
named-checkconf
named-checkzone fgq.com fgq.com.zone
systemctl restart named
centos6
指向dns服务器
cdnet
vim ifcfg-eth0
DNS=192.168.1.40
service network restart
for i in {1..20};do curl -k --connect-timeout 2 192.168.1.7;done ok(-k忽略证书)
centos7.4-3--mysql--仅主机模式
yum -y install mariadb-server
systemctl restart mariadb
systemctl stop firewalld
systemctl disable firewalld
iptables -F
iptables -F -t nat ?
mysql_secure_installation
mysql -uroot -p
create database blogdb;
grant all on blogdb.* to wpuser@'192.168.29.%' identified by '123456';
flush privileges;
mysql -uwpuser -p -h192.168.29.141
show databases; 看到blogdb就ok
给数据库添加防火墙策略
iptables -vnL; iptables -F
iptables -A INPUT -s 192.168.29.129 -p tcp --dport 3306 -j ACCEPT
只允许此IP且只能访问此端口服务
iptables -A INPUT -s 192.168.29.130 -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -s 192.168.29.1 -j ACCEPT
只允许此网段访问
iptables -A INPUT -j REJECT
其他不能访问
centos7.4-4--nfs--仅主机模式
rpm -q nfs-utils 有则不装
systemctl stop firewalld
systemctl disable firewalld
tar xvf wordpress-4.9.4-zh_CN.tar.gz -C /app
cd /app
mv wordpress/ blog
cd blog/
cp wp-config-sample.php wp-config.php
vim wp-config.php
define('DB_NAME', 'database_name_here'); 变为 define('DB_NAME', 'blogdb');
define('DB_USER', 'username_here'); 变为 define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'password_here'); 变为 define('DB_PASSWORD', '123456');
define('DB_HOST', 'localhost'); 变为 define('DB_HOST', '192.168.29.141');
centos7-3(RS1)和centos7-4(RS2)
ll /var/www/html 属主和属组都是root
ps aux |grep httpd apache身份运行
给apache权限,可以访问/var/www/html和centos7.4-4(nfs服务器)的/app/blog
id apache id号是48
centos7.4-4
cd /app; ll; ll blog/ 属主和属组分别是nobody,nfsnobody
getent passwd |grep apache; getent passwd |grep 48 无apache(48)用户
useradd -u 48 -r -s /sbin/nologin apache
id apache
chown -R apache.apache blog/; ll 给apache权限,可以访问/app/blog
vim /etc/exports 设置共享和用户权限
/app/blog 192.168.29.0/24(rw,all_squash,anonuid=48,anongid=48)
systemctl start nfs-server(centos6是nfs)
centos7-3(RS1)和centos7-4(RS2)
关闭selinux
vim /etc/fstab
192.168.29.142:/app/blog /var/www/html/ nfs defaults 0 0
mount -a; df
centos7.4-4: ll /app blog属主和属组都是apache ok
yum -y install php php-mysql
vim /etc/httpd/conf/httpd.conf
/Listen 80端口
systemctl restart httpd
centos7(VS)
bash lvs_nat.sh status
bash lvs_nat.sh stop
vim lvs_nat.sh
vip=192.168.1.7:80
rip1=192.168.29.129
rip2=192.168.29.130
sch=wrr
bash lvs_nat.sh start
centos7-5(让RS可以到达外网)
route add default gw 10.0.0.200; route -n 不稳定,易丢失
cdnet
vim route-ens34(10.0.0.100)
0.0.0.0/0 via 10.0.0.200
systemctl restart network
route -n
centos7-3/4: ping 192.168.1.7 ok
centos6--client
firefox www.fgq.com
浏览器:192.168.1.7
标题 英雄联盟
用户名 fgq
密码 fgq123456
邮箱 594634660@qq.com
安装 Wordpress
登陆
fgq,fgq123456 进入网站
算法是wrr
用户刷新界面,可能会丢失,使用sh
centos7
bash lvs_nat.sh status
bash lvs_nat.sh stop
bash lvs_nat2.sh stop
bash lvs_nat.sh status
vim lvs_nat.sh
vip=192.168.1.7:80
rip1=192.168.29.129
rip2=192.168.29.130
sch=sh
bash lvs_nat.sh start
centos6--client
for i in {1..20};do curl -k -dump --connect-timeout 2 https://www.fgq.com;done
不能访问,443端口没有开启,只开启80端口
for i in {1..20};do curl -k -dump --connect-timeout 2 http://www.fgq.com;done ok
不清楚访问哪个RS
centos7-3(RS1): systemctl stop httpd
for i in {1..20};do curl -k -dump --connect-timeout 2 http://www.fgq.com;done no
centos7-3(RS1): systemctl restart httpd
for i in {1..20};do curl -k -dump --connect-timeout 2 http://www.fgq.com;done ok
RS1关闭服务,则不能访问;RS1开启服务,则可访问,表明访问的是RS1
支持https
centos7
bash lvs_nat.sh status
bash lvs_nat.sh stop
vim lvs_nat.sh
vip=192.168.1.7:443
rip1=192.168.29.129
rip2=192.168.29.130
sch=sh
bash lvs_nat.sh start
centos6--client
for i in {1..20};do curl -k -dump --connect-timeout 2 https://www.fgq.com;done ok
显示php网页,可以分清访问RS1/RS2
centos7-3(RS1)和centos7-4(RS2)
umount /var/www/html
mkdir /var/www/html/blog
vim /etc/fstab
192.168.29.142:/app/blog /var/www/html/blog nfs defaults 0 0
mount -a; df
vim /var/www/html/index.php
<?php
$conn=mysql_connect("192.168.29.141","wpuser","123456");
if ($conn)
echo "RS1/2连接MySQL成功";
else
echo "RS1/2连接失败";
mysql_close();
?>
systemctl restart httpd
centos7(VS)
bash lvs_nat.sh status
bash lvs_nat.sh stop
vim lvs_nat.sh
vip=192.168.1.7:443
rip1=192.168.29.129
rip2=192.168.29.130
sch=wlc(默认模式)
bash lvs_nat.sh start
centos6--client
for i in {1..20};do curl -k --connect-timeout 1 https://www.fgq.com/index.php;sleep 1;done ok
-----------------------------------------------------------------------------------
rpm -ql ipvsadm ipvsadm是一个服务
systemctl stop ipvsadm
systemctl restart ipvsadm
cat /usr/lib/systemd/system/ipvsadm.service
建议保存至/etc/sysconfig/ipvsadm(开始无此文件)
ipvsadm-save = ipvsadm ln
ipvsadm-save > /etc/sysconfig/ipvsadm
或者 ipvsadm -S > /PATH/TO/IPVSADM_FILE
ipvsadm -C; ipvsadm-save 清空后无内容
ipvsadm-restore < /etc/sysconfig/ipvsadm
或者 ipvsadm -R < /PATH/FROM/IPVSADM_FILE
ipvsadm -ln; ipvsadm-save 上面命令执行后,又出现规则了

image.png
lvs-dr模型
各主机上均需要配置VIP,解决地址冲突的方式有三种
(1) 在前端网关做静态绑定
(2) 在各RS使用arptables
(3) 在各RS修改内核参数,来限制arp响应和通告的级别
限制响应级别:arp_ignore
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1: 仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应(√)
限制通告级别:arp_announce
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告(√)
接着lvs-nat实验的基础修改即可
防火墙和selinux都要关闭
iptables -vnL; iptables -F
iptables -vnL -t nat; iptables -F -t nat
VIP是内网IP
centos6--客户机--桥接模式
centos7--VS--仅主机模式
centos7-3--RS1--仅主机模式
centos7-4--RS2--仅主机模式
centos7-5--router路由--仅主机和桥接模式
centos7--VS--仅主机模式
cdnet; ip a
rm -rf ifcfg-ens33
vim ifcfg-ens34
IPADDR=192.168.29.127(DIP;使用脚本来做VIP)
PREFIX=24
删除uuid
vim route-ens34
0.0.0.0/0 via 192.168.29.131
systemctl restart network; ip a; route -n ok
centos7-5--router路由--仅主机和桥接模式
ens33:192.168.29.131仅主机
cdnet
vim ifcfg-ens34(桥接)
IPADDR=192.168.1.11
PREFIX=24
rm -rf route-ens34
systemctl restart network; route -n
centos7-3和cenos7-4--仅主机模式
cdnet
vim ifcfg-ens33
添加网关
GATEWAY=192.168.29.131
systemctl restart network; route -n ok
centos6--客户机--桥接模式
ping 192.168.1.11 ok
ping 192.168.29.131 no,需要添加路由或者网关指向centos7-5(router)
cdnet
vim route-eth0
0.0.0.0/0 via 192.168.1.11(可以连接内网)
service network restart
ping 192.168.29.131 ok
ping 192.168.29.127 ok,访问VS可以
ping 192.168.29.129 ok,访问RS1可以
ping 192.168.29.130 ok,访问RS2可以
centos7--VS--仅主机模式
配置VIP
cp lvs_nat.sh lvs_dr.sh
vim lvs_dr.sh
#!/bin/bash
vip=192.168.29.137
ser=$vip:80
rip1=192.168.29.129
rip2=192.168.29.130
sch=wlc
dev=ens34:1
case $1 in
start)
ifconfig $dev $vip/32 broadcast $vip up (把VIP添加至此网卡)
iptables -F (避免iptables策略影响)
ipvsadm -A -t $ser -s $sch
ipvsadm -a -t $ser -r $rip1 -g -w 3
ipvsadm -a -t $ser -r $rip2 -g -w 1
;;
stop)
ipvsadm -C
ifconfig $dev down (关闭服务时,down掉VIP)
;;
status)
ipvsadm -ln
;;
*)
echo "Usage: `basename $0` start|stop"
exit 1
;;
esac
bash lvs_dr.sh status
bash lvs_dr.sh start
bash lvs_dr.sh status; ip a 发现ens34上有VIP
centos7-3和cenos7-4--仅主机模式(RS)
配置VIP
VIP绑定在回环网卡上,默认回环,不出去
若绑定在实体网卡上,用户广播后可能就会收到,造成冲突
vim lvs_dr_rs.sh
#!/bin/bash
vip=192.168.29.137
mask='255.255.255.255'
dev=lo:1
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore arp广播忽略,避免IP地址冲突
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 对外不发布arp请求,避免IP地址冲突
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig $dev $vip netmask $mask broadcast $vip up
route add -host $vip dev $dev 增加到机路由(可以不写)
echo "VS server is Ready!"
;;
stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "VS server is Cancel!"
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac
bash lvs_dr_rs.sh start; ip a lo网卡出现VIP
centos6--客户机
for i in {1..20};do curl -k --connect-timeout 1 192.168.29.137;sleep 1;done ok

image.png
VIP是外网IP
centos6--客户机--桥接模式
centos7--VS--仅主机模式
centos7-3--RS1--仅主机模式
centos7-4--RS2--仅主机模式
centos7-5--router路由--仅主机和桥接模式
centos7-5--router路由--仅主机和桥接模式
ens33(仅主机模式)网卡增加一个IP
nmcli connection modify ens33 +ipv4.addresses 10.0.0.200/8(子网掩码不能变)
nmcli connection up ens33 修改文件,已经保存
cdnet; cat ifcfg-ens33
ip a ok
centos7--VS--仅主机模式
vim lvs_dr.sh
vip=10.0.0.100
route -n 有路由
bash lvs_dr.sh stop
bash lvs_dr.sh start
centos7-3和cenos7-4--仅主机模式(RS)
vim lvs_dr_rs.sh
vip=10.0.0.100
bash lvs_dr_rs.sh stop
bash lvs_dr_rs.sh start
centos6--客户机--桥接模式
for i in {1..50};do curl -k --connect-timeout 1 10.0.0.100;sleep 1;done ok
centos7-5--router路由
若192.168.29.131和10.0.0.100是两个接口
注意包回去的时候,是走192.168.29.131这个接口
VIP绑定在RS服务器的物理网卡上(之前绑定在lo网卡上)
centos6--客户机
for i in {1..100};do curl -k --connect-timeout 1 10.0.0.100;sleep 1;done 先连接着
centos7-3和cenos7-4--仅主机模式(RS)
bash lvs_dr_rs.sh stop 服务停止,centos6不能连接
vim lvs_dr_rs.sh
:%s/lo/ens33/g (把lo回环网卡替换为物理网卡,VIP绑定在RS服务器的物理网卡上)
VIP可以绑定在RS服务器的物理网卡上,但是lo回环网卡稳定,不受网络影响
bash lvs_dr_rs.sh start centos6能连接
但是只能连接其中一个,不能调度,应该是有缓存的原因
centos6--客户端
for i in {1..100};do curl -k --connect-timeout 1 10.0.0.100;sleep 1;done
若一直连接RS1,关闭RS1(bash lvs_dr_rs.sh stop)
curl 10.0.0.100 不能连接,虽然RS2开启状态,多重复几次,再使用循环
for i in {1..50};do curl -k --connect-timeout 1 10.0.0.100;sleep 1;done
交替出现连接RS2和未连接时,开启RS1
根据前面实验为基础
centos7(VS)
增加443端口的服务
ipvsadm -A -t 10.0.0.100:443 -s rr
ipvsadm -a -t 10.0.0.100:443 -r 192.168.29.129 -g
ipvsadm -a -t 10.0.0.100:443 -r 192.168.29.130 -g
ipvsadm -ln 80和443端口的服务都出现
centos6(client)
for i in {1..10};do curl -k --connect-timeout 1 10.0.0.100;sleep 1;done ok
for i in {1..10};do curl -k --connect-timeout 1 https://10.0.0.100;sleep 1;done ok
centos7(VS)
ipvsadm -C
ipvsadm -ln
bash lvs_dr.sh start
centos6(client)
for i in {1..10};do curl -k --connect-timeout 1 10.0.0.100;sleep 1;done ok
for i in {1..10};do curl -k --connect-timeout 1 https://10.0.0.100;sleep 1;done 不能访问
此时的80和443端口是两个不同的集群服务
为了使80和443端口成为1个集群服务,需要FireWall Mark
MARK target 可用于给特定的报文打标记
--set-mark value value为十六进制数字
借助于防火墙标记来分类报文,而后基于标记定义集群服务
可将多个不同的应用使用同一个集群服务进行调度
实现方法
在Director主机打标记
iptables -t mangle -A PREROUTING -d $vip -p $proto --dport $port -j MARK --set-mark NUMBER
在Director主机基于标记定义集群服务
ipvsadm -A -f NUMBER [options]
centos7(VS)
iptables -F -t mangle
iptables -vnL -t mangle
iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 10
iptables -vnL -t mangle
ipvsadm -C
ipvsadm -ln
cp lvs_dr.sh lvs_dr_fwm.sh
vim lvs_dr_fwm.sh 更改两处即可
#!/bin/bash
vip=10.0.0.100
ser=10 (自己在防火墙策略上设置的标记位)第一处
rip1=192.168.29.129
rip2=192.168.29.130
mask='255.255.255.255'
sch=rr
dev=ens34:1
case $1 in
start)
ifconfig $dev $vip netmask $mask broadcast $vip up
iptables -F
ipvsadm -A -f $ser -s $sch -p (第二处或者 :%s/-t/-f/g 把"-t"换成"-f")
ipvsadm -a -f $ser -r $rip1 -g -w 3 (第二处)
ipvsadm -a -f $ser -r $rip2 -g -w 1 (第二处)
;;
stop)
ipvsadm -C
ifconfig $dev down
;;
status)
ipvsadm -ln
;;
*)
echo "Usage: `basename $0` start|stop"
exit 1
;;
esac
分析
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-f:firewall MARK,标记,一个数字
bash lvs_dr_fwm.sh start
ipvsadm -ln
centos6(client)
for i in {1..10};do curl -k --connect-timeout 1 10.0.0.100;sleep 1;done ok
for i in {1..10};do curl -k --connect-timeout 1 https://10.0.0.100;sleep 1;done 能访问
for i in {1..10};do curl 10.0.0.100;curl -k https://10.0.0.100;sleep 1;done ok
持久连接(sh+wlc)--脱离算法
老用户--走第一次访问的RS sh
新用户--走权重策略 wlc(其他9种算法)
session绑定
对多个共享同一组RS的服务器,需要统一进行绑定,lvs sh算法无法实现
持久连接(lvs persistence)模板
实现无论使用任何调度算法,在一段时间内(默认360s),能够实现将来自同一个地址的请求始终发往同一个RS
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
持久连接实现方式
每端口持久(PPC)
每个端口对应定义为一个集群服务,每集群服务单独调度
每防火墙标记持久(PFWMC):
基于防火墙标记定义集群服务;
可实现将多个端口上的应用统一调度,即所谓的port Affinity
每客户端持久(PCC)
基于0端口(表示所有服务)定义集群服务
即: 将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式
前面的实验为基础
实现每防火墙标记持久
centos7(VS)
bash lvs_dr_fwm.sh stop
ipvsadm -ln
vim lvs_dr_fwm.sh
ipvsadm -A -f $ser -s $sch -p 6 只需要更改这一个地方
添加-p,不写6,默认360s
bash lvs_dr_fwm.sh start
ipvsadm -ln
centos6(client)
for i in {1..10};do curl 10.0.0.100;curl -k https://10.0.0.100;sleep 1;done ok
一直访问RS2
centos7(VS)
ipvsadm -d -f 10 -r 192.168.29.130 删除RS2
ipvsadm -ln
centos7-4(RS2)
bash lvs_dr_rs.sh stop
centos6(client)
for i in {1..10};do curl 10.0.0.100;curl -k https://10.0.0.100;sleep 1;done ok
一直访问RS1
实现每端口持久
前面已经实现,只需要添加-p即可,不重复了
centos7(VS)
cat lvs_dr.sh
ser=$vip:80
ipvsadm -A -t $ser -s $sch -p 添加-p
实现每客户端持久
centos7(VS)
ipvsadm -C
cp lvs_dr.sh lvs_dr_per.sh
vim lvs_dr_per.sh
ser=$vip:0 (所有服务,一般不这么用)
ipvsadm -A -t $ser -s $sch -p 添加-p
bash lvs_dr_per.sh start
ipvsadm -ln
centos6(client)
for i in {1..10};do curl 10.0.0.100;curl -k https://10.0.0.100;sleep 1;done ok
ssh 10.0.0.100; ip a
centos7(VS)
bash lvs_dr_per.sh stop
ipvsadm -ln
bash lvs_dr.sh start 轮询,没有-p
ser=$vip:80
ipvsadm -A -t $ser -s $sch
ipvsadm -ln
centos6(client)
for i in {1..10};do curl --connect-timeout 1 10.0.0.100;sleep 1;done 没有轮询模式
centos7-3/4(RS1/2)
bash lvs_dr_rs.sh stop RS1和RS2都停止
centos6(client)
for i in {1..10};do curl --connect-timeout 1 10.0.0.100;sleep 1;done
交替出现不能访问
centos7-3/4(RS1/2)
bash lvs_dr_rs.sh start RS1和RS2都开启
centos6(client)
for i in {1..10};do curl --connect-timeout 1 10.0.0.100;sleep 1;done 出现轮询模式
centos7-3/4(RS1/2)
vim /var/www/html/index.php
<?php
$conn=mysql_connect("192.168.29.141","wpuser","123456");
if($conn)
echo "RS1 OK";
else
echo "RS1 ERROR";
mysql_close();
?>
yum -y install mariadb
mysql -uwpuser -p -h192.168.29.141 ok
连接MySQL服务器,NFS服务器(和之前做lvs-dr+lamp一样)
centos7.4-3--MySQL服务器
iptables -F;iptables -F -t nat
iptables -A INPUT -s 192.168.29.130 -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -s 192.168.29.1 -j ACCEPT
iptables -A INPUT -j REJECT
systemctl restart mariadb
centos7.4-4--NFS服务器
iptables -F;iptables -F -t nat
systemctl restart nfs-server
centos7-3(RS1)
systemctl stop httpd
centos6(client)
for i in {1..10};do curl --connect-timeout 1 10.0.0.100;sleep 1;done
出现轮询模式,但是其中RS1的web服务不能访问,仍然往RS1调度请求
lvs不管RS服务器的死活(状态),只管调度,LVS高可用性可以解决
1 Director不可用,整个系统将不可用;SPoF Single Point ofFailure
解决方案:高可用
keepalived heartbeat/corosync
2 某RS不可用时,Director依然会调度请求至此RS
解决方案:由Director对各RS健康状态进行检查,失败时禁用,成功时启用
keepalived heartbeat/corosync, ldirectord
检测方式:
(a) 网络层检测,icmp
(b) 传输层检测,端口探测
(c) 应用层检测,请求某关键资源
RS全不用时:back server, sorry server
ldirectord 监控和控制LVS守护进程,可管理LVS规则
包名
ldirectord-3.9.6-0rc1.1.1.x86_64.rpm centos6
ldirectord-3.9.6-0rc1.1.2.x86_64.rpm centos7
下载地址
感谢开源网站(centos6和centos7)
ftp://ftp5.gwdg.de/pub/opensuse/repositories/network%3A/ha-clustering%3A/Stable/CentOS_CentOS-6/x86_64/
ftp://ftp5.gwdg.de/pub/opensuse/repositories/network%3A/ha-clustering%3A/Stable/CentOS_CentOS-7/x86_64/
centos7(VS)
这里使用centos7的安装路径
rz 上传包--ldirectord-3.9.6-0rc1.1.2.x86_64.rpm
yum -y install ldirectord-3.9.6-0rc1.1.2.x86_64.rpm
yum安装,否则有很多依赖包
rpm -qi ldirectord
rpm -ql ldirectord
/usr/lib/systemd/system/ldirectord.service 服务
/usr/sbin/ldirectord 主程序
/var/run/ldirectord.ldirectord.pid pid文件
/usr/share/doc/ldirectord-3.9.6/ldirectord.cf 配置模版
cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/
vim /etc/ha.d/ldirectord.cf 主配置文件
checktimeout=3 (连接超过3s,没有反应,即为故障)
checkinterval=1 (每隔1s检查一次)
autoreload=yes (配置文件自动加载,不用重启服务)
logfile="/var/log/ldirectord.log" (日志文件,需要去掉注释)
quiescent=no (是否RS--down掉后,把它从列表中删除,no为删除,yes权重为0--降低其优先级)
virtual=10.0.0.100:80 (指定VS的FWM或VIP:port;或者virtual=10)
real=192.168.29.129:80 gate (RIP:port 工作模式--dr/nat/tun)
real=192.168.29.130:80 gate
-g: gateway,dr类型,默认
-i: ipip,tun类型
-m: masquerade,nat类型(支持端口映射)
fallback=127.0.0.1:80 gate (sorry server) 需要手动创建
vim /var/www/html/index.html
Sorry Server
systemctl restart httpd
service=http
scheduler=rr
*protocol=tcp/fwm(当virtual指定的是FWM时,协议应该使用"fwm")
checktype=negotiate (检查类型--协商)
checkport=80
request="index.php" (检查的网页--是/var/www/html/下的哪个文件)
receive="OK" (检查网页内容,包含RS字样,就是正常运行)
systemctl start ldirectord
ipvsadm -ln RS1--down掉,所以没有RS1
ip a 没有10.0.0.100的IP
ifconfig ens34:1 10.0.0.100/32 手动添加此IP
ifconfig 有此IP
centos7-3(RS1):systemctl restart httpd
centos7(VS):ipvsadm -ln RS1出现
centos6(client)
for i in {1..10};do curl --connect-timeout 1 10.0.0.100;sleep 1;done
交替出现RS1和RS2
centos7-3(RS1):systemctl stop httpd
centos7(VS):ipvsadm -ln RS1消失
centos6(client)
for i in {1..10};do curl --connect-timeout 1 10.0.0.100;sleep 1;done
只出现RS2,不会出现连接不到主机,说明已经检测RS1不可用,全部请求调度到RS2,实现了高可用
centos7-4(RS2):systemctl stop httpd
把RS服务器全部down掉
centos6(client)
for i in {1..10};do curl --connect-timeout 1 10.0.0.100;sleep 1;done
RS服务器都down掉,出现Sorry Server(VS本机的/var/www/html/index.html的内容)
centos7(VS)
iptables -vnL -t mangle
iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 10
之前做实验加的策略,有--就不用操作,没有--要操作
vim /etc/ha.d/ldirectord.cf
使用firewalld-mark时,配置文件只需更改如下两个地方
virtual=10
protocol=fwm
ipvsadm -ln ok防火墙标记位生效
centos6(client)
for i in {1..200};do curl -k --connect-timeout 1 https://10.0.0.100;sleep 1;done ok
网友评论