负载均衡服务LVS

目录

 LVS集群的工作模式

1 LVS的NAT模式 

2 DR模型的工作原理DR模式的特点:​编辑  

3. LVS的TUN模式 

4 LVS的FULLNAT模式  (阿里专属可以忽略)

LVS工作模式总结和比较

 LVS 调度算法  静 动

 动态方法  (问问行不行)慢

LVS 相关软件

持久保存方法

实验NAT

 排除 

LVS-DR模式多网段 

LVS-TUNNEL隧道模式案例


两种日志

/var/log/messages,secure,wtmp,btmp                                    
/var/log/syslog,auth.log,wtmp,btmp

LVS集群类型中的术语(也就是名称)

VS:Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer   (接受调度)
RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)      (被指挥干活的)
CIP:Client IP                                                                                                (客户端互联网用户)
VIP:Virtual serve IP VS外网的IP                                 (虚拟IP对外提供服务的ip外面看得见的)
DIP:Director IP VS内网的IP                                                        (对内的IP里面看得见的用的)
RIP:Real server IP                                                                        (真正的IP)
访问流程:CIP <--> VIP == DIP <--> RI 

 LVS集群的工作模式

  • lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
  • lvs-dr:操纵封装新的MAC地址
  • lvs-tun:在原请求IP报文之外新加一个IP首部
  • lvs-fullnat:修改请求报文的源和目标IP,默认内核不支持

1 LVS的NAT模式 

lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和
PORT实现转发

(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP

(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统

2 DR模型的工作原理DR模式的特点:  

 同过广播找到RS1 所以RS1需要两个IP地址,一个管着用来转发(这个需要关闭广播回应,防止在冲突),一个需要开启用来接受LVP的转发,  中间可以加交换机不能跨网段

DR模式的特点: 

1. Director和各RS都配置有VIP
2. 确保前端路由器将目标IP为VIP的请求报文发往Director

  • 在前端网关做静态绑定VIP和Director的MAC地址
  • 在RS上使用arptables工具

arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP

  •  在RS上修改内核参数以限制arp通告及应答级别

不主动不负责不拒绝--M49-强福安语录
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce 

3. RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向
DIP,以确保响应报文不会经由Director
4. RS和Director要在同一个物理网络
5. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
6. 不支持端口映射(端口不能修改)
7. 无需开启 ip_forward
8. RS可使用大多数OS系统

3. LVS的TUN模式 

支持跨地域(两个IP头跨路由器解析)

4 LVS的FULLNAT模式  (阿里专属可以忽略)

通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP
VIP --> RIP
fullnat模式特点:

1. VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向
DIP
2. RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
3. 请求和响应报文都经由Director
4. 相对NAT模式,可以更好的实现LVS-RealServer间跨VLAN通讯
5. 支持端口映射
注意:此类型kernel默认不支持

LVS工作模式总结和比较

 LVS 调度算法  静 动

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
分为两种:静态方法和动态方法

静态方法        (不问直接给你)快
仅根据算法本身进行调度

1、RR:roundrobin,轮询,较常用,雨露均沾,大锅饭
2、WRR:Weighted RR,加权轮询,较常用
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存

 动态方法  (问问行不行)慢

主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度

1、LC:least connections 适用于长连接应用

  • Overhead=activeconns*256+inactiveconns

2、WLC:Weighted LC,默认调度方法,较常用

  • Overhead=(activeconns*256+inactiveconns)/weight

3、SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接

  • Overhead=(activeconns+1)*256/weight

4、NQ:Never Queue,第一轮均匀分配,后续SED
5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现WebCache等
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,,实现Web Cache等

LVS 相关软件

  •  程序包:ipvsadm 
  • 创建集群 ipvsadm -A -t 10.0.0.100:80   A代表增   t代表协议tcp。ucp之类。IP地址加端口号 
  • 加入集群 ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.101:8080  a加入集群,t指定协议,r加入的IP
  •  查看集群 ipvsadm   -L       Ln(顺序) 以数字方式查看集群
  • 删除集群 ipvsadm -d -t 10.0.0.100:80 -r 10.0.0.8:80          d删指定一个,D删所有
  • ipvsadm -D -t 10.0.0.100:80                                                    删除所有
  • 清楚所有规则 ipvsadm -C

持久保存方法

导出到文件里 ipvsadm-save  > ipvs.rule     

写道开机自启文件里vim /etc/rc.local(需自行创建加权限)   

 ipvsadm-restore < ipvs.rule (自行导入·)

[root@ubuntu2004 ~]#ipvsadm-save  -n >> /etc/ipvsadm.rules    (加n是转换处数字,防止出现错误解析)

2 导入到软件自带的文件里然后把软件设为开机自启 

[root@ubuntu2004 ~]#vim /etc/default/ipvsadm   

AUTO="false"  把这个设置为yes

AUTO="true"

红帽系统

#保存规则
[root@rocky8 ~]#ipvsadm-save  -n > /etc/sysconfig/ipvsadm

#开机自启
[root@rocky8 ~]#systemctl enable ipvsadm.service

实验NAT

  • [root@internet ~] 192.168.10.123
  • [root@lvs ~]# 10.0.0.100
  • [root@rs1 ~] 10.0.0.8
  • [root@root2 ~] 10.0.0.18

[root@lvs ~]#vim /etc/netplan/01-netcfg.yaml     加快网卡   仅主机
[root@lvs ~]#netplan apply 

eth1:
     addresses:
      - 192.168.10.100/24

[root@root2 ~]#yum install nginx  httpd mysql-server.x86_64 redis -y

[root@rocky8 ~]#yum install nginx httpd mysql-server.x86_64 redis -y

 启动相关软件

#systemctl enable --now nginx.service redis mysqld   

systemctl enable --now httpd

systemctl disable --now nginx.service 

[root@root2 ~]#hostnamectl set-hostname rs2.wang.org                     重启生效(改ip记得)
[root@root2 ~]#hostname > /var/www/html/index.html                       在一二里面写如内容

[root@lvs ~]#ipvsadm -A -t 192.168.10.100:80 -s rr                创建轮询
[root@lvs ~]#ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.8:80 -m      加入 指定模式(NAT)
[root@lvs ~]#ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.11:80 -m

[root@lvs ~]#vim /etc/sysctl.conf          FORWARD 出去                 回去的路未启动所以需要开启(去掉注释)

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

[root@lvs ~]#sysctl  -p                               生效 

[root@internet ~]# curl 192.168.10.100      拼一下测试是否成功

各种类型      改端口号的话需要删了重加    如果其中一个·挂了还是会往哪里跳转

[root@lvs ~]#ipvsadm -e -t 192.168.10.100:80 -r 10.0.0.8:80 -w 3 -m       改期权重 3次
[root@lvs ~]#ipvsadm -E  -t 192.168.10.100:80 -s wrr                   改掉轮询

[root@lvs ~]#ipvsadm -E -t 192.168.10.100:80 -s sh   源地址哈希依旧是 熟人找熟人

[root@lvs ~]#ipvsadm -E -t 10.0.0.100:80 -p   会话保持默认360秒 内你多次访问都是同一人

ipvsadm -E -t 10.0.0.100:80 -p 3 -s rr                                三秒内访问同一人

iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 10         将各种端口合成一个端口访问,指定合并集群号

[root@lvs ~]#iptables -t mangle -vnL   显示且传承16进制端口号
 


 排除 

  • 网络通不通 ping下
  • telnet 连接下端口看看是否能通
  • 用MySQL命令连一下,看看是不是命令或者权限的问题

httpd

[root@rs1 ~]#yum install mod_ssl.x86_64 -y            在一和二上操作

[root@rs1 ~]#systemctl restart httpd

[root@lvs ~]#curl -k https://10.0.0.11                          查看 -k是忽略证书检查


[root@lvs ~]#ipvsadm -A -t 192.168.10.100:443 -s rr           创建http的集群
[root@lvs ~]#ipvsadm -a -t192.168.10.100:443 -r 10.0.0.11:443 -m
[root@lvs ~]#ipvsadm -a -t192.168.10.100:443 -r 10.0.0.8:443 -m
[root@lvs ~]#ipvsadm -Ln
[root@internet ~]# curl -k https://192.168.10.100

MySQL

create user test@'192.168.10.%' identified by '123456';             创建MySQL账号

[root@lvs ~]#ipvsadm -A -t 192.168.10.100:3306 -s rr           创建http的集群
[root@lvs ~]#ipvsadm -a -t192.168.10.100:3306 -r 10.0.0.11:3306 -m
[root@lvs ~]#ipvsadm -a -t192.168.10.100:3306-r 10.0.0.8:3306 -m

[root@internet ~]# mysql -uroot -p123456 -h192.168.10.100 -e select @@hostame;"  查看访问呢的谁  

[root@router ~]#10.0.0.101   (路由器)

[root@internet ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 (改一下或者加上)

 GATEWAY="192.168.10,200"

[root@internet ~]# systemctl restart network    重启

[root@router ~]#vim /etc/netplan/01-netcfg.yaml                             改IP信息加网卡

 ethernets:
    eth0:
      addresses:
      - 10.0.0.200/24
    eth0:
      addresses:
      - 192.168.10.200/24

[root@router ~]#netplan apply                                         重启1

[root@lvs ~]#vim /etc/netplan/01-netcfg.yaml     (不需要两块网卡所以删一个,改一下)

 eth0:
      addresses:
      - 10.0.0.10/24
      gateway4: 10.0.0.200                                  ip必须有,这是为骗他一下,我有远程工具

[root@lvs ~]#netplan apply 
[root@lvs ~]#ifconfig lo:1 10.0.0.100/32                     配置回环网卡vip

[root@lvs ~]#vim /etc/sysctl.conf                                     不用转发不需要开启(关掉)

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

[root@lvs ~]#sysctl -w net.ipv4.ip_forward=0                       手动关闭(重读注释没用)

[root@rs2 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0                 将网关改成200 一二都改
[root@rs2 ~]#nmcli connection reload ;nmcli connection up eth0    重启
 

[root@rs1 ~]#ifconfig lo:1 10.0.0.100/32          配置回环网卡vip

直接复制粘贴在里面      加上之后哪怕ip一样也不会其冲突                (一二都改)

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/lo/arp_ignore                 断掉回环网卡的ignore
echo 2 >   /proc/sys/net/ipv4/conf/lo/arp_announce           断掉回环网卡的announce

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/lo/arp_ignore
echo 2 >   /proc/sys/net/ipv4/conf/lo/arp_announce 

修改内核参数                                                                                            解释(可有可无)
[root@rs1 ~]#echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
[root@rs1 ~]#echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
[root@rs1 ~]#echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]#echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
#以下参数用来控制系统是否开启对数据包源地址的校验。0表示不开启地址校验;1表示开启严格的反向路径校验。对每一个进行的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包;2标示开启松散的反向路径校验,对每个进行的数据包,校验其源地址是否可以到达,即反向路径是否可以ping通,如反向路径不通,则直接丢弃该数据包。

[root@rs1 ~]#echo "0" > /proc/sys/net/ipv4/conf/all/ap_filter                   lvs 没有地址也能通

[root@rs1 ~]#echo "0" > /proc/sys/net/ipv4/conf/eth0/ap_filter                    关闭地址校验

[root@rs1 ~]# vim /etc/sysctl.conf       永久改的话需要在这里

[root@lvs ~]#ipvsadm -A -t 10.0.0.100:80 -s rr
[root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.8:80
[root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.18:80 -g    g指定模式(默认g)(-m-g-i模式)

[root@router ~]#vim /etc/sysctl.conf                      开启转在里面
[root@router ~]#sysctl -p
net.ipv4.ip_forward = 1 

LVS-DR模式多网段 

看其脚本文档,和上面差不多就是多加了一个ip

LVS-TUNNEL隧道模式案例

看其脚本文档,和上面差不多就是多加了一个ip头  用的特殊命令

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值