【LVS+Keepalived】 LVS+Keepalived实现tcp、udp负载均衡及HA高可用

LVS 安装
下载
编译安装
yum install -y kernel-devel gcc gcc-c++
yum install libnl* libpopt* popt-static -y
解压完之后进入解压目录执行
make && make install

编译成功后通过ipvsadm命令验证成功。


keepalived
下载
yum install curl gcc openssl-devel libnl3-devel net-snmp-devel
yum install -y libnfnetlink-devel
./configure --prefix=/usr/local/keepalived

make && make install


先配置LVS能够跑起来
VIP
172.23.26.233
DR
172.23.26.212
RS IP
172.23.26.210
172.23.26.211

212机器安装lvs
执行以下脚本
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=172.23.26.233
rs1=172.23.26.210
rs2=172.23.26.211
ifconfig eth0:0 down
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth0:0
$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -g
$ipv -a -t $vip:80 -r $rs2:80 -g
-t tcp负载
-g 集群模式DR
rr 轮训负载算法
210 211上执行以下脚本
#! /bin/bash
vip=172.23.26.233
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
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
测试


轮训请求,测试成功

ipvs命令解释
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface]
ipvsadm --stop-daemon
ipvsadm -h
命令选项解释:
有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可以。
-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。
-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。 修改定义过的集群服务
-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C --clear 清除内核虚拟服务器表中的所有记录。
-R --restore 恢复虚拟服务器规则
-S --save 保存虚拟服务器规则,输出为-R 选项可读的格式
-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器
-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l --list 显示内核虚拟服务器表 userver 列表;
-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
--set tcp tcpfin udp 设置连接超时值
--start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的VRRP 功能。
--stop-daemon 停止同步守护进程
-h --help 显示帮助信息
其他的选项:
-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]
-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]
-f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。通常用于将两个或两个以上的服务绑定为一个服务进行处理时使用;
-s --scheduler scheduler 使用的调度算法,有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是:wlc.
-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。 持久连接;
-M --netmask netmask persistent granularity mask
-r --real-server server-address 真实的服务器[Real-Server:port]
-g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式) DR模型
-i --ipip 指定LVS 的工作模式为隧道模式
-m --masquerading 指定LVS 的工作模式为NAT 模式
-w --weight weight 真实服务器的权值
--mcast-interface interface 指定组播的同步接口
-c --connection 显示LVS 目前的连接 如:ipvsadm -L -c
--timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
--daemon 显示同步守护进程状态
--stats 显示统计信息 ipvsadm –Ln --state 总共的数量
--rate 显示速率信息 ipvsadm –Ln --rete 平均值
--sort 对虚拟服务器和真实服务器排序输出
--numeric -n 输出IP 地址和端口的数字形式

LVS解决了负载均衡的问题
但是LVS没有健康检查,即使下游的RS故障了,LVS仍然会转发到故障节点
keepalived则可以解决这个问题,而且还能解决LVS自身的单点故障问题,实现LVS的高可用

keepalived编译安装完之后执行如下操作:
mkdir /etc/keepalived  
keepalived.conf拷贝上上述文件夹
cp keepalived-1.4.3/keepalived/etc/init.d/keepalived /etc/init.d/
cp keepalived-1.4.3/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

vrrp_instance VI_1 {
state BACKUP
interface eth0 #指定HA监测网络的接口
virtual_router_id 51 #虚拟路由标识,同一个vrrp_instance下,master和backup一致
priority 90
advert_int 10 #设定master与backup负载均衡之间同步检查的时间间隔,单位秒
authentication {
auth_type PASS #验证类型 PASS AH两种
auth_pass 1111 #验证密码,同一个vrrp_instance下的master与backup一致
}
virtual_ipaddress {
172.23.26.233
}
}


virtual_server 172.23.26.233 80 { #VIP
delay_loop 6 #运行情况检查时间,单位秒
lb_algo rr #设置负载调度算法
lb_kind DR #设置LVS负载均衡机制DR
net_mask 255.255.255.0
persistence_timeout 0 #会话保持时间,单位秒
protocol TCP
real_server 172.23.26.210 80 { #真实服务地址
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 172.23.26.211 80 { #真实服务地址
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
service keepalived start启动kp
这种方式启动读取的KEEPALIVE_OPTIONS参数如下:

然后在kp机器上再执行lvs_dr脚本即可
测试验证成功,能自动将包转发到活的服务上


下面测试UDP的负载均衡及HA
lvs_dr脚本如下:
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=172.23.26.233
rs1=172.23.26.210
rs2=172.23.26.211
ifconfig eth0:0 down
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth0:0
$ipv -C
$ipv -A -u $vip:62000 -s rr
$ipv -a -u $vip:62000 -r $rs1:62000 -g
$ipv -a -u $vip:62000 -r $rs2:62000 -g
UDP检测脚本,安装nc
nc -uvz 172.23.26.210 62000
输出Connection to 172.23.26.210 62000 port [udp/*] succeeded!说明udp检测成功
keepalived.conf配置文件如下:

vrrp_instance VI_1 {
state MASTER
interface eth0 #指定HA监测网络的接口
virtual_router_id 51 #虚拟路由标识,同一个vrrp_instance下,master和backup一致
priority 100
advert_int 10 #设定master与backup负载均衡之间同步检查的时间间隔,单位秒
authentication {
auth_type PASS #验证类型 PASS AH两种
auth_pass 1111 #验证密码,同一个vrrp_instance下的master与backup一致
}
virtual_ipaddress {
172.23.26.233
}
}


virtual_server 172.23.26.233 62000 { #VIP
delay_loop 6 #运行情况检查时间,单位秒
lb_algo rr #设置负载调度算法
lb_kind DR #设置LVS负载均衡机制DR
net_mask 255.255.255.0
persistence_timeout 0 #会话保持时间,单位秒
protocol UDP
real_server 172.23.26.210 62000 { #真实服务地址
weight 1
MISC_CHECK {
misc_path "/home/lvs/udp_check.sh 172.23.26.210 62000"
misc_timeout 10
}
}
real_server 172.23.26.211 62000 { #真实服务地址
weight 1
MISC_CHECK {
misc_path "/home/lvs/udp_check.sh 172.23.26.211 62000"
misc_timeout 10
}
}
}
自己找个UDP客户端工具或者写个UDP客户端发包测试成功




猜你喜欢

转载自blog.csdn.net/chiweitree/article/details/79957011