lvs

作者: Miracle001 | 来源:发表于2018-04-02 07:18 被阅读7次
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


相关文章

网友评论

    本文标题:lvs

    本文链接:https://www.haomeiwen.com/subject/vjbecftx.html