备注:开通虚拟IP时,一定备注清楚作为LVS使用,系统底层要进行一些策略
的配置
一、架构
先看看:高可用软件keepalived详解
Lvs+Keepalived的基本使用架构如下图如下:

当然,我们这里就没有必要一整套都实现下来,我们主要做的就是LVS+Keepalived实验,
所以我们只需要2台LVS+Keepalived(DR模式),2台WEB即可测试即可,基本 信息如下:
Lvs+Keepalived Master的IP地址为:172.28.16.140
Lvs+Keepalived Backup的IP地址为:172.28.16.146
Lvs+Keepalived VIP地址为:172.28.16.235
WEB01的IP地址为:172.28.16.138
WEB02的IP地址为:172.28.16.149
二、实施方案
1.Lvs+Keepalived Master配置
#配置DIP
ifconfig eth0 172.28.16.140 netmask 255.255.255.0
#安装keepalived和ipvsadm。
yum install keepalived
yum install ipvsadm
yum install -y nc
#配置Keepalived
#Keepalived 配置文件路径:/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc #设置报警邮件地址,可以设置多个,每行一个。
failover@firewall.loc #需开启本机的sendmail服务
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #设置邮件的发送地址
smtp_server 127.0.0.1 #设置smtp server地址
smtp_connect_timeout 30 #设置连接smtp server的超时时间
router_id LVS_DEVEL #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
}
vrrp_instance VI_1 {
state MASTER #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此
主机是备用服务器
interface eno0 #指定HA监测网络的接口
virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。
即同一vrrp_instance下,MASTER和BACKUP必须是一致的
priority 100 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,
MASTER的优先级必须大于BACKUP的优先级
advert_int 1 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码
auth_type PASS #设置验证类型,主要有PASS和AH两种
auth_pass 1111 #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相
同的密码才能正常通信
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
172.28.16.235
}
}
virtual_server 172.28.16.235 1181 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之
间用空格隔开
delay_loop 6 #设置运行情况检查时间,单位是秒
lb_algo rr #设置负载调度算法,这里设置为rr,即轮询算法
lb_kind DR #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
nat_mask 255.255.255.0
persistence_timeout 50 #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,
为集群系统中的session共享提供了一个很好的解决方案。
#有了这个会话保持功能,用户的请求会被一直分发到某个服务节
点,直到超过这个会话的保持时间。
#需要注意的是,这个会话保持时间是最大无响应超时时间,也就
是说,用户在操作动态页面时,如果50秒内没有执行任何操作
#那么接下来的操作会被分发到另外的节点,但是如果用户一直在
操作动态页面,则不受50秒的时间限制
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 172.28.16.138 1181 { #配置服务节点1,需要指定real server的真实IP地址和端口,
IP与端口之间用空格隔开
weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权值越
高,设置权值大小可以为不同性能的服务器
#分配不同的负载,可以为性能高的服务器设置较高的权值,而为
性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
TCP_CHECK { #realserver的状态检测设置部分,单位是秒
connect_timeout 3 #表示3秒无响应超时
nb_get_retry 3 #表示重试次数
delay_before_retry 3 #表示重试间隔
connect_port 1181
}
}
real_server 172.28.16.149 1181 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 1181
}
}
}#
UDP
virtual_server 172.28.16.235 35688 {
delay_loop 30
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
#persistence_timeout 50
protocol UDP
real_server 172.28.16.143 35688 {
weight 100
MISC_CHECK {
misc_path “/etc/keepalived/udp_check.sh 172.28.16.143 35688”
misc_timeout 10
}
}
}
keepalived支持的健康检测方式有:HTTP_GET|SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK
由于keepalived自身并不支持udp检测,有TCP_CHECK但是没有UDP_CHECK,所以这里只能使用
MISC_CHECK混合检测方式调用外部脚本来对udp协议进行健康检测。
#编写UDP服务检测脚本

vim /etc/keepalived/udp_check.sh

#!/bin/bash
nc -unvz -w 1 $1 $2 2>&1 | grep successfully &> /dev/null
exit $?
(每台主机nc 别的ip返回结果可能不同,nc –unvz –w 1 ip port 试下看看)
#把同样的配置复制一份到BACKUP主机,只需要改两个参数即可:
state BACKUP
priority 5
参考 https://blog.csdn.net/simonchi/article/details/79957011
2.Lvs+Keepalived Slave配置
#配置DIP。
ifconfig eth0 172.28.16.146 netmask 255.255.255.0
#先需要安装keepalived和ipvsadm
yum install keepalived
yum install ipvsadm
yum install -y nc

启动keepalived(web服务配置启动成功后再来查看映射情况)

service keepalived start
或者
systemctl startkeepalived

通过ipvsadm –Ln 命令查看VIP是否能成功映射到web服务

通过 ip addr 查看虚IP是否配置成功

如果失败了,可通过/var/log/messages日志定位keepalived启动失败的原因

3.WEB01(RealServer)配置
#设置RIP地址。
ifconfig eth0 172.28.16.138 netmask 255.255.255.0
#分别在两个web服务器执行以下脚本:realserver.sh
#!/bin/bash
#./etc/init.d/functions

description :Config realserver

VIP=172.28.16.235
case “$1” in
start)
echo “start LVS of Realserver DR mode”
#在loopback上设置VIP地址只用于响应数据包
/sbin/ifconfig lo:0 ${VIP} netmask 255.255.255.255 broadcast ${VIP} up
#设置路由策略如果目标地址访问的是VIP那么响应地址就设为lo:0的地址。
route add -host ${VIP} 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)
/sbin/ifconfig lo:0 ${VIP} netmask 255.255.255.255 down
route del -host ${VIP} dev lo
echo “stop LVS of Realserver DR mode”
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

启动命令:

./realserver.sh start
#安装nginx,修改端口为:1181

nginx 配置文件路径:/etc/nginx/nginx.conf

yum install nginx
nginx
echo 172.29.32.202 > /usr/share/nginx/html/index.html

执行ip addr查看VIP是否绑定成功

4.WEB02(RealServer)配置
#设置RIP地址。
ifconfig eth0 172.28.16.149 netmask 255.255.255.0

复制文件到:/home/lvs/

启动命令:

./realserver.sh start
#安装nginx
yum install nginx
nginx
echo 172.28.16.149 > /usr/share/nginx/html/index.html

备注

UDP协议需要额外执行如下操作:
在RealServer 配置iptables
不同RealServer的IP地址不同,请根据实际情况修改,差异化的
–172.28.16.143:RealServer服务器IP
–172.28.16.235/32:虚拟VIP
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A PREROUTING -d 172.28.16.235/32 -p udp -m udp --dport 35688 -j DNAT –
to- 172.28.16.143

http://tangay.iteye.com/blog/1128084
那么UDP的服务呢?
非常令人失望,客户端通过公网ip–61.147.xxx.xxx连接udpserver,并不能得到正确回应。
这是为什么呢?我们来分析一下过程:

经过wireshark和tcpdump,分析得出通讯的过程如下:

cleint—>Client NAT—61.147.xxx.xxx---->Server NAT---->VIP(172.19.1.19)----->RealServer----->Server NAT------>Client NAT—>Client

在NAT 地址映射中:

172.19.1.19<------>61.147.xxx.xxx

但是RealServer(172.19.1.15或者172.19.1.16)却是对应了别的公网ip。

所以客户端的NAT接受到一个非61.147.xxx.xxx发过来的UDP包时,会把它丢弃掉,这样client就收不到任何东西了。

解决方案:
用iptables的NAT和DNAT

在RealServer1(172.19.1.15)上用iptables添加

iptables -t nat -A PREROUTING -d 172.19.1.19/32 -p udp -m udp --dport 3478 -j DNAT --to-destination 172.19.1.15

iptables -t nat -A POSTROUTING -p udp -m udp --sport 3478 -j SNAT --to-source 172.19.1.19

意思就是:
1 收到目的端口为3478的udp,且目的地址为172.19.1.19的包,把目的地址改为172.19.1.15,以便应用程序turnserver处理,因为turnserver绑定的地址172.19.1.15。
2 往外发出源端口为3478的udp包,源地址都被改成172.19.1.19,这样server nat就会把地址映射为61.147.xxx.xxx,这样client NAT就会就收这个udp包了。

在RealServer2(172.19.1.16)上用iptables添加

iptables -t nat -A PREROUTING -d 172.19.1.19/32 -p udp -m udp --dport 3478 -j DNAT --to-destination 172.19.1.16

iptables -t nat -A POSTROUTING -p udp -m udp --sport 3478 -j SNAT --to-source 172.19.1.19

然后测试,发现udp服务可以正常使用啦。

5.测试效果
#可以使用客户端访问172.16.16.1查看轮询访问变化,如下:
curl http://172.28.16.235:1181
172.28.16.138
curl http://172.28.16.235:1181
172.28.16.149
curl http://172.28.16.235:1181
172.28.16.138
#或者使用ab压力测试访问172.28.16.235:1181查看加权轮询变化
ab -n 1000 -c 100 http://172.28.16.235:1181
#测试LVS的高可用
手动断掉Master节点的keepalived服务,测试业务是否正常
#测试keepalived对web服务的监控检测
关闭其中一个web服务节点,通过ipvsadm -L查看VIP映射关系中是否剔除该节点
#查看当前连接数
ipvsadm -L -n -c
#通过当前连接数,可以看出连接协议,以及tcp keepalive的剩余时间和状态信息。 还有源和目标IP以及虚拟
IP。
最后,还可以更改RealServer的权重,再使用AB压力测试一下,看看统计信息是否跟 权重调整
的对比。
PS:你在测试过程中,当LVS调度算法使用轮询或加权轮询默认时,如果你使用浏览 器(同一个
IP)访问VIP,可能会出现跟你想象的轮询调度不一样的结果,那就是一直 刷新网页却无法轮询,
每次都需要等待2分钟才有轮询效果。而如果你使用curl这种工 具进行访问VIP则可以每次都轮
询,主要因为浏览器默认使用了keepalive,而curl没有 使用,当然这是LVS的默认特性,详情请
看LVS负载均衡—tcp keepalive问题分析?
附录:
1、iptables操作说明
参考地址:http://www.cnblogs.com/love3556/p/5923392.html

service iptables save

The service command supports only basic LSB actions (start, stop, restart, try-restart, reload,
force-reload, status). For other actions, please try to use systemctl.
With RHEL 7 / CentOS 7, firewalld was introduced to manage iptables. IMHO, firewalld is more suited
for workstations than for server environments.
It is possible to go back to a more classic iptables setup. First, stop and mask the firewalld service:
systemctl stop firewalld
systemctl mask firewalld
Then, install the iptables-services package:
yum install iptables-services
Enable the service at boot-time:
systemctl enable iptables
Managing the service
systemctl [stop|start|restart] iptables
Saving your firewall rules can be done as follows:
service iptables save
or
/usr/libexec/iptables/iptables.init save
二:附件
keepalived.conf 如下:

! Configuration File for keepalived

global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 235
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#VIP 虚拟IP
172.28.20.234
}
}

virtual_server 172.28.20.233 35688 {
delay_loop 5
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
#persistence_timeout 50
protocol UDP
real_server 172.28.16.143 35688 {
weight 100
MISC_CHECK {
misc_path “/etc/keepalived/udp_check.sh 172.28.20.233 35688”
misc_timeout 10
}
}
}

virtual_server 172.28.16.235 8080 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 172.28.16.143 8080 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 8080
}
}
}

realserver.sh 如下:
#!/bin/bash
#./etc/init.d/functions

description :Config realserver

VIP=172.28.16.235

case “$1” in
start)
echo “start LVS of Realserver DR mode”
/sbin/ifconfig lo:0 ${VIP} netmask 255.255.255.255 up
route add -host ${VIP} 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)
/sbin/ifconfig lo:0 ${VIP} netmask 255.255.255.255 down
route del -host ${VIP} dev lo
echo “stop LVS of Realserver DR mode”
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

udp_check.sh 如下:

vim /etc/keepalived/UDP_CHECK.sh

#!/bin/bash
nc -unvz -w 1 $1 $2 2>&1 | grep successfully &> /dev/null
exit $?

注:下面这个暂时没发现用处,先存着
vi /etc/sysctl.conf
添加: net.ipv4.ip_forward=1

以上实验均是在centos7以上系统实验,centos6系统暂未成功

LVS负载均衡—基于Keepalived做高可用相关推荐

  1. 实现基于Keepalived主从高可用集群网站架构

    背景 上一期我们实现了基于lvs负载均衡集群的电商网站架构,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展 ...

  2. LVS (负载均衡、keepalived、lvs高可用)

    一 环境准备如下: server1:172.25.254.1 server2:172.25.254.2server2:172.25.254.2@[TOC]@[TOC]((这里写一 环境准备自定义目录标 ...

  3. 负载均衡集群、高可用集群详解,DR、NAT超详细搭建步骤

    集群概述 流量相关:     PV:PV(page view)即页面浏览量或点击量,是衡量一个网站或网页用户访问量.具体的说,PV值就是所有访问者在24小时(0点到24点)内看了某个网站多少个页面或某 ...

  4. Nginx负载均衡之TCP端口高可用(二)

    在前面我们实现了基本的HTTP反向代理,从互联网过来的请求已经可以分发到后端多台网站服务器上,但不是所有的业务都是网络类型的,此篇文章我们主要讨论的是TCP 端口的负载均衡做法,昨天也有小伙伴提到了, ...

  5. 什么是负载均衡?什么是高可用?说说常见的负载均衡案例

    一. 什么是负载均衡? 什么是负载均衡? 记得第一次接触 Nginx 是在实验室,那时候在服务器部署网站需要用 Nginx .Nginx 是一个服务组件,用来反向代理.负载平衡和 HTTP 缓存等.那 ...

  6. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  7. LVS+Keepalived实现高可用负载均衡

    本文来说下如何使用LVS+Keepalived 实现高可用负载均衡 文章目录 概述 LVS与Keepalived 相关术语 本文小结 概述 在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的.此时 ...

  8. LVS+Keepalived 实现高可用负载均衡

    一.Keepalived介绍 keepalived是在Linux系统下的一个轻量级的高可用解决方案,是使用C语言编写的,在 Keepalived 中实现了一组检查器,可以根据服务集群中服务器的健康状态 ...

  9. 构建百万访问量电子商务网站之LVS负载均衡(前端四层负载均衡器)[连载之电子商务系统架构]...

    构建百万访问量电子商务网站之LVS负载均衡(前端四层负载均衡器)[连载之电子商务系统架构] 版本:V1 出处:http://jimmyli.blog.51cto.com/我站在巨人肩膀上Jimmy L ...

最新文章

  1. python 3d绘图平面_python 用 matplotlib 在 3D 空间中绘制平面 实例详解
  2. react router路径的匹配原则
  3. codility上的问题(26) Hydrogenium 2013
  4. Java Web开发小结
  5. 34、JAVA_WEB开发基础之EL表达式和标签
  6. SSH HTTPS 公钥、秘钥、对称加密、非对称加密、 总结理解
  7. vue图片查看控件v-viewer使用
  8. mysql 存储过程 is_Mysql存储过程语法问题...
  9. 做了那么多营销,为什么没有效果?
  10. 王道考研操作系统笔记(第五章)附:王道考研408所有PPT和思维导图
  11. C语言入门程序——交换两个数
  12. JDK动态代理与CGLIB动态代理
  13. 直播问答的后博弈时代:社交化或许才是未来
  14. 数学智力题 武士数独题目_最新智力题大全及答案-各种最新IQ题目推荐-第1595页-33IQ...
  15. python| requests 访问 https网站
  16. 注册表残留内容的删除
  17. Vue2 组件之间传值
  18. ffmpeg webm 提取_使用 FFmpeg 对 webp转png , webm转mp4或者gif等进行操作
  19. 34. 在排序数组中查找元素的第一个和最后一个位置——二分法的魔鬼细节 小记
  20. Python图像库Pillow (PIL) 入门

热门文章

  1. 使用Linux Tc实现入向和出向限速
  2. 阿里云部署SpringBoot项目
  3. 【C语言】对输入的若干个数去重并排序的算法
  4. 网易云音乐 ubuntu
  5. Andoid-----抽奖转盘----12宫格----实用性商业化
  6. 【实时渲染】RTR4 简要问答版
  7. 人工神经网络模型、人类的大脑和人类社会本身相似性 (一家之言,仅供一笑)。
  8. Windows 那些坑
  9. 时间序列分析这件小事(五)--MA模型
  10. argparse用于解析命令行参数