# 学习 ```bash # 查看系统模块 sudo lsmod |grep ip find /lib/modules/$(uname -r)/ -iname "**.ko*" | cut -d/ -f5- |grep ip sudo ipvsadm --list -n --persistent-conn --exact --sort sudo ipvsadm --list -n --thresholds --exact --sort sudo ipvsadm --list -n --rate --exact --sort sudo ipvsadm --list -n --stats --exact --sort sudo ipvsadm --list -n -c sudo ipvsadm --list -n sudo ipvsadm --list -n --tcp-service 127.0.0.1:30001 sudo ipvsadm --list -n --udp-service 10.254.0.2:53 sudo ipvsadm -Ln -t 10.254.0.1:443 sudo ipvsadm -Ln -u 10.254.0.2:53 sudo ipvsadm -Ln --stats -t 10.254.0.1:443 sudo ipvsadm -Ln --stats -u 10.254.0.2:53 mtr -r -n -c5 10.254.0.1 # sudo ipvsadm --list -n --fwmark-service ######## # ipvsadm -A -t : -s sudo ipvsadm -A -t 1.2.3.4:80 -s rr sudo ipvsadm -a -t 1.2.3.4:80 -r 172.17.0.3 -m sudo ipvsadm -a -t 1.2.3.4:80 -r 172.17.0.4 -m sudo ipvsadm -E -t 1.2.3.4:80 -s wrr sudo ipvsadm -e -t 1.2.3.4:80 -r 172.17.0.3 -m -w 3 ########## # -A, --add-service # -a, --add-server ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-O] [-M netmask] ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower] ############### # [packet-forwarding-method] # -g 设置LVS工作模式为DR直连路由模式 # -i 设置LVS工作模式为TUN隧道模式 # -m 设置LVS的工作模式为NAT模式 # -g, --gatewaying Use gatewaying (direct routing). This is the default. # -i, --ipip Use ipip encapsulation (tunneling). # -m, --masquerading Use masquerading (network access translation, or NAT). ############### # -s 使用LVS所采用的调度算法 # 轮询调度:RR 按依次循环的方式请求调度到不同的服务器,特点是简单,平均分配给每台服务器 # 加权轮询调度:WRR,对RR的一种补充和优化,给每台服务器一个权重,假如A为1,B为2,则优先调度A,权重值越高处理的请求越多 # 最小连接调度:LC,把请求调度到连接数最小的服务器上 # 加权最小连接调度 WLC,给每个服务器一个权值,调度尽可能保证每台服务器的均衡 # 基于局部性最少的连接:lblc,请求数据包的目标IP地址的一种调度算法,先根据目标IP地址寻找最近的该目标地址的所使用的服务器,如果服务器可用并且有能力处理请求,则调度算法会尽可能的选择相同的服务器,否则选择其他 # 带复制的基于局部性的最少连接:lblcr,它记录的不是一个目标IP与另外一台服务器直接的连接记录,它维护的是一个目标IP到一组服务器直接的映射关系,防止单点负载过高 # 目标地址散列调度:DH,根据目标地址通过散列函数将目标IP与服务器建立映射关系,出现服务器不可用或负载高,发往该服务器的请求会会固定发往该服务器。 # 源地址散列调度:SH,与上面的类似,但是它是根据源地址散列算法进行静态分配固定的服务器资源。 ############### # -p session 保持 ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] ################################## # 打标记方法(在Director主机): iptables -t mangle -A PREROUTING -d $vip -p $proto --dport $port -j MARK --set-mark NUMBER # 示例:将目的ip是192.168.253.192,目的端口是80和443的数据包都打上80443的标记 iptables -t mangle -A PREROUTING -d 192.168.253.192 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 80443 # 基于标记定义集群服务: ipvsadm -A -f NUMBER [options] # 示例:新增一个集群服务,基于防火墙标记进行划分,调度方法为轮询 ipvsadm -A -f 80443 -s rr ################################## # 0端口 ipvsadm -A -t 192.168.253.192:0 -s rr -p 10 ipvsadm -a -t 192.168.253.192:0 -r 192.168.253.129 ipvsadm -a -t 192.168.253.192:0 -r 192.168.253.140 ################################## # 查看默认的值使用如下命令 sudo ipvsadm --list --timeout # 修改 LVS 表中的 fin_timeout 使用指令如下 sudo ipvsadm --set 900 60 300 中间的 60 就是 tcp 的 fin_timeout 时间 ##################### # 打印IPVS表 sudo ipvsadm-save -n > /tmp/ipvs.txt ###################### # 二层(MAC寻址) # 三层(IP路由) # 四层(IP+端口) # 七层(http协议+端口) # cat /proc/meminfo | grep Vmalloc # systemd 111端口 # rpcbind 713端口 # coredns(DNS) 53 # dhcp 68 # nginx(HTTP) 80 # pop3 110 # bird(BGP) 179 # chronyd 323 # sshd 22 # smtp 25 # mysqld 3306 ``` # 参考 * [让LVS更持久](https://ieevee.com/tech/2017/08/15/lvs-persistence.html) * [ipvsadm使用手册](https://www.linuxblogs.cn/articles/ipvsadm-user-manual.html) * [ipvsadm(8) - Linux man page](https://linux.die.net/man/8/ipvsadm) * [LVS-HOWTO](http://www.austintek.com/LVS/LVS-HOWTO/)