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

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。

LVS 安装

下载

http://www.linuxvirtualserver.org/software/index.html

编译安装

yum install -y kernel-devel gcc gcc-c++

yum install libnl* libpopt* popt-static -y

解压完之后进入解压目录执行

make && make install

 

 

 

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

 

 

keepalived

下载

http://www.keepalived.org/download.html

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客户端发包测试成功

 

 

 

 

 

你可能感兴趣的:(LVS,Keepalived)