keepalived+lvs 实现tcp负载均衡
  xjKcUHdcLtgr 2023年11月02日 62 0


因为测试机其有限,而且也只是为了看看lvs负载均衡tcp端口能否正确获取到客户端的真实IP,之前用过nginx,haproxy,对非http协议的获取客户端真实IP都毫无办法。安装过程就不叙述。

keepalived+lvs server 192.168.53.10
DR server 192.168.53.10
real server 192.168.53.12

keepalived server :执行以下操作

[ root@keepalived ]cat keepalived.conf
! Configuration File for keepalived #!表示注释
global_defs {
notification_email {
! root@example.com #接收警报的邮箱,可以添加多个
mortal@gmail.com #接收警报的邮箱,可以添加多个
}
notification_email_from root@localhost
smtp_server 127.0.0.1 #使用本机转发 email
smtp_connect_timeout 30
router_id LVS_HA_R1 #本服务器的名称,备份组内唯一
}
!vrrp_script chk_dispth {
! script "killall -0 dispatcher"
! interval 2
! weight 2
!}
vrrp_instance VI_1 { #定义VRRP热备实例
state MASTER #热备状态,MASTER(主);SLAVE(从);BACKUP(备份)
interface eth1 #承载VIP地址的物理接口
virtual_router_id 50 #虚拟路由器的ID号,组内保存一致
priority 100 #优先级,数值越大优先级越高。
advert_int 1 #主备之间的通告间隔秒数(心跳频率)
authentication { #认证信息,每个热备组保持一致
auth_type PASS #认证类型,主备切换时的验证
auth_pass 1111 #密码字串
}
! track_script {
! chk_dispth
!}
virtual_ipaddress { #指定漂移地址(VIP),可以有多个
115.92.70.65 #HA 虚拟 ip,可加多个
}
}
virtual_server 115.92.70.65 8001 { #虚拟服务器地址(VIP)、端口
delay_loop 6 #健康检查的间隔时间(秒)
lb_algo rr #lvs 调度算法,这里使用轮询
lb_kind DR #lvs 负载均衡机制,这里使用直连路由
persistence_timeout 50 #同一IP连接50秒内被分配到同一台服务器
protocol TCP #用 TCP 协议检查 realserver 状态
real_server 192.168.53.12 8001 { #第一个WEB节点的地址、端口
weight 1 #节点的权重
TCP_CHECK { #健康检查方式
connect_port 8001 #检查的目标端口
connect_timeout 3 #故障重试秒数(即连接超时)
nb_get_retry 3 #重试延迟(即重试次数)
delay_before_retry 3 #重试间隔(秒)
}
}
! real_server 192.168.53.9 8001 { #第二个WEB节点的地址、端口
! weight 1
! TCP_CHECK {
! connect_port 8001
! connect_timeout 3
! nb_get_retry 3
! delay_before_retry 3
! }
! }
}
[ root@keepalived ]ipvsadm -Ln        
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 115.92.70.65:8001 rr persistent 50
-> 192.168.53.12:8001 Route 1 10 0

 

这里可以看到IP可以正常的漂移。

如果有备机keepalived,配置文件修改下

 

state BACKUP
priority 99

基本这样就可以了。

如果你需要master 断了之后不抢占回资源,导致一些正常的链接断掉

master keepalived 需要修改下配置

state BACKUP     #代替master
nopreempt #不抢占资源,意思就是它活了之后也不会再把主抢回来,备机不需要设置该项

 

realserver上操作,更改一些内核参数,支持lvs

每台realserver都要操作

[root@MonitorANDBack ~]$ cat keepalive_vip.sh 
#!/bin/bash
#
# Script to start LVS DR real server.
# description: LVS DR real server
#
. /etc/rc.d/init.d/functions
VIP=115.92.70.65 #VIP地址
host=`/bin/hostname` #定义host变量
case "$1" in
start) #start的时候设置本机arp不被外部主机解析
# Start LVS-DR real server on this machine.
/sbin/ifconfig lo down
/sbin/ifconfig lo up
echo 1 > /proc/sys/net/ipv4/conf/default/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/default/arp_announce
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
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
#配置vip在lo:0,并且设置广播地址和子网掩码,此处使用32位是保证此vip不能与其他地址通信。
/sbin/route add -host $VIP dev lo:0 #增加路由
;;
stop) #stop的时候恢复到系统的初始化arp参数
# Stop LVS-DR real server loopback device(s).
/sbin/ifconfig lo:0 down
echo 0 > /proc/sys/net/ipv4/conf/default/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/default/arp_announce
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
;;
status)
# Status of LVS-DR real server.
islothere=`/sbin/ifconfig lo:0 | grep $VIP`
isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
if [ ! "$islothere" -o ! "isrothere" ];then
# Either the route or the lo:0 device
# not found.
echo "LVS-DR real server Stopped."
else
echo "LVS-DR real server Running."
fi
;;
*)
# Invalid entry.
echo "$0: Usage: $0 {start|status|stop}"
exit 1
;;
esac

 

因为一些工作原因不贴图了,不过确实可以获取到客户端的真实IP。并且对keepalived也加深了点理解。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  ehrZuhofWJiC   2024年05月17日   36   0   0 服务器linux
xjKcUHdcLtgr