lvs和keepalived
LVS调度算法参考
1 2 3 4 5 6 7 8 9 10 | RR:轮询 WRR :加权轮询 DH :目标地址哈希 SH:源地址 hash LC:最少连接 WLC:加权最少连接,默认 SED:最少期望延迟 NQ:从不排队调度方法 LBLC:基于本地的最少连接 LBLCR:带复制的基于本地的最少连接 |
ipvsadm命令参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | ipvsadm -A|E -t|u virutal-service-address:port [-s scheduler] #-A:添加虚拟服务器记录 #-E:修改虚拟服务器记录 #-t:tcp服务 #-u:udp服务 #-s:调度算法,默认wlc ipvsadm -D -t|u|f virtual-service-address #-D:删除虚拟服务器记录 ipvsadm -C #-C:清空lvs规则 ipvsadm -R #-R:重载lvs配置 ipvsadm -S [-n] > ipvs.save #-S:保存lvs配置 #-n:不解析地址 ipvsadm -a|e -t|u service-address:port -r real-server-address:port [-g|i|m] [-w weight] #-a:添加真实服务器记录 #-e:修改真实服务器记录 #-r:对应的真实服务器地址 #-g:指定lvs工作模式为DR,默认 #-i:指定lvs工作模式为tunnel #-m:指定lvs工作模式为NAT #-w:手工指定权重 ipvsadm -d -t|u|f service-address -r server-address #-d:删除真实服务器记录 ipvsadm -Ln [options] #-L:显示lvs运行状态 #-n:不解析地址 #-c:显示ipvs连接 #--stats:统计数据 #--rate:速率 #--exact:精确值 ipvsadm -Z [-t|u|f service-address] #-Z:清空lvs计数器 ipvsadm -h #-h:显示帮助信息 |
NAT模型
NAT模型可以做端口映射
1 2 3 4 5 6 7 8 9 10 11 12 | 1.首先在两台真实服务器上安装http服务 2.开启lvs服务器的转发功能 echo 1 > /proc/sys/net/ipv4/ip_forward 3.配置lvs服务 #定义一个lvs服务,指定vip和端口,指定调度方式为轮询 ~] # ipvsadm -A -t VIP:PORT -s rr #添加第一台真实服务器,并指定为NAT模型 ~] # ipvsadm -a -t VIP:PORT -r RIP1:PORT -m #添加第二台真实服务器,并指定为NAT模型 ~] # ipvsadm -a -t VIP:PORT -r RIP2:PORT -m #查看ipvs定义的规则 ~] # ipvsadm -L -n |
DR模型
三台服务器的所有ip地址都指向路由器的网关接口,DR模式不能做端口映射,也就是lvs服务器的端口和RS服务器端口必须对应
arp_announce:arp通告
0:全部通告(默认)
1:尽量避免通告非本网段地址
2:不通告非本网段地址
arp_ignore:arp应答
0:有的话就应答(默认)
1:不在请求的接口就不应答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 1.RS服务器添加vip到lo口,并关闭lo口和其他接口的arp通告和应答,添加vip路由到lo口,下面是相应脚本,只需要更改对应vip即可 #!/bin/bash #description:start realserver vip=192.168.159.111 source /etc/rc .d /init .d /functions case $1 in start) echo "Start Realserver" ip addr add $vip /32 dev lo ip route add $vip /32 dev lo echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce ;; stop) echo "Stop Realserver" ip addr del $vip /32 dev lo ip route del $vip /32 echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce ;; *) echo "Usage: $0 (start | stop)" exit 1 esac 2.在RS上开启相应服务 ~] # systemctl start nginx 3.在lvs服务器上添加vip到eth0:0口,并开启转发功能 #添加vip ~] # ip addr add vip/32 dev eth0:0 #开启转发 ~] # echo 1 > /proc/sys/net/ipv4/ip_forward #添加路由 ~] # ip route add vip/32 dev eth0:0 4.添加ipvs记录,DR模式不能做端口映射 ~] # ipvsadm -A -t VIP:80 -s rr ~] # ipvsadm -a -t VIP:80 -r RIP1 -g ~] # ipvsadm -a -t VIP:80 -r RIP2 -g |
keepalived:配置文件不能有中文注释!停止keepalived使用systemctl kill keepalived
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | [root@localhost roles] # cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { #notification_email { # acassen@firewall.loc # failover@firewall.loc # sysadmin@firewall.loc #} #notification_email_from Alexandre.Cassen@firewall.loc #smtp_server 192.168.200.1 #smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr #vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.2.88 } } |
注释,不要复制下面的内容,请复制上面的内容对应更改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | global_defs { #全局配置 router_id mmm #路由器标识,全局唯一 } vrrp_instance VI_1 { #高可用实例1 state MASTER #状态为主节点 interface eno16777736 #使用哪块网卡 virtual_router_id 51 #虚拟路由器标识,同一个高可用内要相同 priority 100 #优先级,主节点要高于备用节点 advert_int 1 #监听时间间隔 authentication { #认证功能 auth_type PASS #明文认证 auth_pass 1111 #认证密码 } virtual_ipaddress { #虚拟出来的ip地址 192.168.1.30 } } #备节点不一样的字段为 #router_id nnn #state BACKUP #priority 99 #interface视网卡而定 |
Keepalived+lvs
RS节点同样需要做lvs DR模型的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 1.RS服务器添加vip到lo口,并关闭lo口和其他接口的arp通告和应答,添加vip路由到lo口,下面是相应脚本,只需要更改对应vip即可 #!/bin/bash #description:start realserver vip=192.168.159.111 source /etc/rc .d /init .d /functions case $1 in start) echo "Start Realserver" ip addr add $vip /32 dev lo ip route add $vip /32 dev lo echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce ;; stop) echo "Stop Realserver" ip addr del $vip /32 dev lo ip route del $vip /32 echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce ;; *) echo "Usage: $0 (start | stop)" exit 1 esac 2.在RS上开启相应服务 ~] # systemctl start nginx |
主节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | ! Configuration File for keepalived global_defs { router_id master vrrp_mcast_group4 224.0.0.7 } vrrp_instance DR1 { state MASTER interface ens33 virtual_router_id 77 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.159.111 } } virtual_server 192.168.159.111 8888 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 0 protocol TCP sorry_server 192.168.159.130 8888 real_server 192.168.159.132 8888 { TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 8888 } } real_server 192.168.159.133 8888 { HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } |
备节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | ! Configuration File for keepalived global_defs { router_id slave vrrp_mcast_group4 224.0.0.7 } vrrp_instance DR1 { state BACKUP interface ens33 virtual_router_id 77 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.159.111 } } virtual_server 192.168.159.111 8888 { #虚拟地址组,就是上面虚拟出来的ip加上业务端口 delay_loop 6 #健康检查周期,单位为秒 lb_algo rr #调度算法 lb_kind DR #调度模型 persistence_timeout 0 #同一ip在多少秒内发来的请求都送给同一realserver protocol TCP sorry_server 192.168.159.130 8888 #当realserver都挂掉的时候,将请求发送给谁 real_server 192.168.159.132 8888 { #rs1的检查 TCP_CHECK { #检查方法,有HTTP_GET,SSL_GET,TCP_CHECK connect_timeout 3 #连接超时时间 nb_get_retry 3 #重试次数 delay_before_retry 3 #重试时间间隔 connect_port 8888 #连接端口 } } real_server 192.168.159.133 8888 { HTTP_GET { url { #检查方法 path / #请求路径 status_code 200 #返回状态码为200代表正常 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } |
初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能