目录
两种日志
/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
1 写道开机自启文件里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 断掉回环网卡的announceecho 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头 用的特殊命令