【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】 LVS+Keepalived实现tcp、udp负载均衡及HA高可用相关推荐
- Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
前奏 我们都知道 nginx 是一款优秀的反向代理服务,用过 nginx 的也应该都知道 upstream,upstream 节点一般置于 http 节点大括号中,常规在 upstream 中配置需要 ...
- LVS负载均衡与Keepalive高可用
LVS负载均衡与Keepalive高可用负载均衡 一.LVS介绍 二.LVS的三种工作模式 1.NAT模式 2.TUN模式 3.DR模式 三.ipvsadm实现Apache负载均衡横 四.keepal ...
- LVSKeepalived—集群、负载均衡、企业高可用详解
LVS负载均衡集群及配置 负载均衡概述 1.集群 通过集群(cluster)技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对高的收益,其任务调度则是集群系统中的核心技术. 集群搭建 ...
- keepalived+nginx负载均衡+ApacheWeb实现高可用
1.Keepalived高可用软件 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,kee ...
- 游戏服务器高性能负载均衡,游戏服务器高可用负载均衡
游戏服务器高可用负载均衡 内容精选 换一换 公有云提供弹性公网IP(EIP).NAT网关.弹性负载均衡(ELB)等方式连接公网.EIPEIP提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务. ...
- Nginx 反向代理 负载均衡 动静分离 高可用 原理
1.Nginx简介 1.1 概述 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理服务器,特点是占有内存少,并发能力强,能经受高负载的考验,有报告表明能 ...
- Nginx 方向代理/负载均衡/动静分离/高可用
一,反向代理 正向代理:正向代理服务器位于客户端和服务器之间,为了向服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端.这里客户端是要进行 ...
- asp.net core 实战之 redis 负载均衡和quot;高可用quot;实现
1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的"高可用"实现, 呵呵双引号的"高可用"并不是 ...
- lvs(+keepalived)、haproxy(+heartbeat)、nginx 负载均衡的比较分析
目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实现的负载均衡的作用,keepalived和heartbeat都是提高高可用性的,避免单点故障.那么他们为什么这么搭配,而又有什么 ...
最新文章
- GDI+需要Dispose的对象(不断更新中)
- 死锁和活锁有什么区别?
- 深度探索C++ 对象模型(6)-Data member的存取
- C++在不使用任何算术运算符的情况下将两个数字相加(附完整源码)
- 从一道面试题说起—js隐式转换踩坑合集
- mac 配置java adb环境_MAC 配置android adb命令的环境变量
- js值的拷贝和值的引用_到达P值的底部:直观的解释
- arm linux head.s,arm-linux head.S 源代码分析
- 电商海报模板|psd分层海报素材轻松教你凸显你的主体产品!
- 【杂谈】excel列表创建后,怎么删除蓝色边框线?
- python语言输入中文_selenium+python 语言编写问题,在执行时无法输入中文用户名...
- 各位玩新浪的SAE的 请点个关注http://weibo.com/i/2062352633
- nfc(近距离无线通讯技术)
- hdu1197(十进制十六进制十二进制位数和)
- pwnthebox-rip
- 设计模式中的七大原则(代码 + 图解)
- Dev-C++下面的编译状态栏信息不显示
- java-php-python-仁爱公益网站计算机毕业设计
- JVM 运行时内存空间详解——元空间
- CRM适用于什么企业?