Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境部署】
1、环境说明:
系统版本:Ubuntu 14.04
LVS1物理IP:14.17.64.2 初始接管VIP:14.17.64.13
LVS2物理IP:14.17.64.3 初始接管VIP:14.17.64.14
真实web服务器IP:14.17.64.4-12
实现效果:去往14.17.64.13或14的报文,转发给14.17.64.4-12中的一台服务器处理,实现负载均衡。
要求1:当一台真实web服务器故障后,自动把该IP从负载均衡中踢除,恢复后自动加入集群。
要求2:当一台LVS服务器故障后,正常的LVS服务器会接管故障LVS服务器上的VIP,故障恢复后自动抢占回VIP,继续负载分担。
2、安装LVS与Keepalived
#aptitude install ipvsadm #安装lvs
#ipvsadm #加载lvs,ipvsadm的规则由keepalived来配置,所以安装即可,如果要对lvs手动配置详细了解,可参考我的另一篇文章:http://yangrong.blog.51cto.com/6945369/1574991
#aptitude install keepalived #安装keepalived
#配置文件目录/etc/keepalived/keepalived.conf,默认并没有配置文件,需要手动创建。
#Keepalived配置文件详解参考地址:http://www.360doc.com/content/11/1228/16/834950_175607432.shtml
3、keepalived配置
此处是单台LVS上keepalived.conf的配置,另一台LVS上的keepalived.conf的配置文件,只需把下列红色与蓝色字体参数对换一下即可。
配置文件如下:
! Configuration File for keepalived
vrrp_instance VI_1 { #定义一个实例,keepalived间的高可用只能接管相同实例名称
stateMASTER #指定Keepalived的角色,MASTER表示此主机是主服务器 BACKUP表示此主机是备用服务器,所以设置priority时要注意MASTER比BACKUP高。
interface p1p1 #指定监测网络的接口,当LVS接管时,将会把IP地址添加到该网卡上。
virtual_router_id 51 #虚拟路由标识,同一个vrrp实例使用唯一的标识,同一个vrrp_instance下,MASTER和BACKUP必须一致。
priority120 #指定这个实例优先级
advert_int 1 #心跳报文发送间隔
#notify_master/path/xx.sh #这个实例切换为master时执行的脚本
#notify_backup /path/xx.sh #这个实例切换为backup时执行的脚本
#track_interface{ #设置额外的监控,里面某个网卡故障也会进行切换,这个一般用来监控上行链路
#eth1
#}
authentication {
auth_type PASS #设置验证类型,主要有PASS和AH两种
auth_pass 1111 #设置验证密码,同一个vrrp_instance下,MASTER和BACKUP的密码必须一致才能正常通信
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
14.17.64.13
}
}
vrrp_instance VI_2 { #定义另一个实例
state BACKUP
interface p1p1
virtual_router_id 52
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
14.17.64.14
}
}
virtual_server 14.17.64.13 0 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
delay_loop 6 #设置运行情况检查时间,单位是秒
lb_algo wrr #设置负载调试算法,这里设置为wrr即加权论询算法
lb_kind DR #设置LVS实现负载均衡的机制,有NAT,TUN和DR三个模式可选
persistence_timeout 50 #设置会话保持时间,单位是秒
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 14.17.64.4 0 { #配置服务节点1,需要指定real server的真实IP地址和端口
weight 1 #配置服务节点的权值,
TCP_CHECK {
connect_timeout 8 #表示8秒无响应超时
nb_get_retry 3 #表示重试次数
delay_before_retry 3 #表示重试间隔
connect_port 80 #使用80端口进行保活
}
}
real_server 14.17.64.5 0 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
#connect_port 80
}
}
#更多real_server略掉。
}
virtual_server 14.17.64.14 0 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
delay_loop 6 #设置运行情况检查时间,单位是秒
lb_algo wrr #设置负载调试算法,这里设置为wrr即加权论询算法
lb_kind DR #设置LVS实现负载均衡的机制,有NAT,TUN和DR三个模式可选
persistence_timeout 50 #设置会话保持时间,单位是秒
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 14.17.64.4 0 { #配置服务节点1,需要指定real server的真实IP地址和端口
weight 1 #配置服务节点的权值,
TCP_CHECK {
connect_timeout 8 #表示8秒无响应超时
nb_get_retry 3 #表示重试次数
delay_before_retry 3 #表示重试间隔
connect_port 80
}
}
real_server 14.17.64.5 0 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
#更多real_server略掉
}
4、真实服务器健康检查测试
由于是线上环境,我不能通过关闭机器或网卡进行测试,但是他保活是通过tcp 80端口来保活的,所以只需关闭真实服务器上的http服务就OK。
如下所示,关掉nginx服务后,果真从lvs负载里踢出了。
root@ubuntu:/etc/keepalived# ipvsadm-L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 14.17.64.13:0 wrr persistent50
-> 14.17.64.4:0 Route 1 0 0
-> 14.17.64.5:0 Route 1 0 0
-> 14.17.64.6:0 Route 1 0 0
-> 14.17.64.7:0 Route 1 3 0
-> 14.17.64.8:0 Route 1 0 0
-> 14.17.64.9:0 Route 1 0 0
-> 14.17.64.10:0 Route 1 2 1
-> 14.17.64.11:0 Route 1 1 1
-> 14.17.64.12:0 Route 1 0 0
TCP 14.17.64.14:0 wrr persistent50
-> 14.17.64.4:0 Route 1 0 0
-> 14.17.64.5:0 Route 1 0 0
-> 14.17.64.6:0 Route 1 0 0
-> 14.17.64.7:0 Route 1 0 0
-> 14.17.64.8:0 Route 1 0 0
-> 14.17.64.9:0 Route 1 0 0
-> 14.17.64.10:0 Route 1 0 0
-> 14.17.64.11:0 Route 1 0 0
-> 14.17.64.12:0 Route 1 0 0
root@ubuntu:/etc/keepalived# /etc/init.d/nginxstop
root@ubuntu:/etc/keepalived# ipvsadm-L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 14.17.64.13:0 wrr persistent50
-> 14.17.64.4:0 Route 1 0 0
-> 14.17.64.5:0 Route 1 0 0
-> 14.17.64.6:0 Route 1 0 0
-> 14.17.64.7:0 Route 1 3 0
-> 14.17.64.8:0 Route 1 0 0
-> 14.17.64.9:0 Route 1 0 0
-> 14.17.64.11:0 Route 1 1 1
-> 14.17.64.12:0 Route 1 0 0
TCP 14.17.64.14:0 wrr persistent50
-> 14.17.64.4:0 Route 1 0 0
-> 14.17.64.5:0 Route 1 0 0
-> 14.17.64.6:0 Route 1 0 0
-> 14.17.64.7:0 Route 1 0 0
-> 14.17.64.8:0 Route 1 0 0
-> 14.17.64.9:0 Route 1 0 0
-> 14.17.64.11:0 Route 1 0 0
-> 14.17.64.12:0 Route 1 0 0
启动真实服务器上nginx后,该真实服务器又加入ipvsadm转发规则中。
root@ubuntu:/etc/keepalived# /etc/init.d/nginxstart
root@ubuntu:/etc/keepalived# ipvsadm-L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 14.17.64.13:0 wrr persistent50
-> 14.17.64.4:0 Route 1 0 0
-> 14.17.64.5:0 Route 1 0 0
-> 14.17.64.6:0 Route 1 0 0
-> 14.17.64.7:0 Route 1 3 0
-> 14.17.64.8:0 Route 1 0 0
-> 14.17.64.9:0 Route 1 0 0
-> 14.17.64.10:0 Route 1 1 1
-> 14.17.64.11:0 Route 1 0 0
-> 14.17.64.12:0 Route 1 0 0
TCP 14.17.64.14:0 wrr persistent50
-> 14.17.64.4:0 Route 1 0 0
-> 14.17.64.5:0 Route 1 0 0
-> 14.17.64.6:0 Route 1 0 0
-> 14.17.64.7:0 Route 1 0 0
-> 14.17.64.8:0 Route 1 0 0
-> 14.17.64.9:0 Route 1 0 0
-> 14.17.64.10:0 Route 1 0 0
-> 14.17.64.11:0 Route 1 0 0
-> 14.17.64.12:0 Route 1 0 0
从测试结果得知,keepalived真实服务器保活测试成功。
5、LVS高可用自动切换测试
由于都是在IDC机房服务器上操作,不可能断掉网卡,所以重启一台LVS服务器。
VIP接管查看:
其中一台LVS接管了14.17.64.14:
root@ubuntu:~# ip add |grep14.17.64
inet 14.17.64.2/24 brd14.17.64.255 scope global p1p1
inet 14.17.64.14/32 scopeglobal p1p1
另一台LVS接管了14.17.64.13:
root@ubuntu:/etc/keepalived# ipadd |grep 14.17.64
inet 14.17.64.3/24 brd14.17.64.255 scope global p1p1
inet 14.17.64.13/32 scopeglobal p1p1
把ipvsadm和keepalived加入开机自启动:
#cat /etc/rc.local
ipvsadm
/etc/init.d/keepalived start
重启14.17.64.3服务器查看VIP切换情况:
经过测试,重启几秒钟后,14.17.64.2服务器就把VIP 14.17.64.13接管了过来。同时使用ssh登录14.17.64.13测试,能够正常的转发。
root@ubuntu:~# ip add|grep 14.17.64
inet 14.17.64.2/24 brd14.17.64.255 scope global p1p1
inet 14.17.64.14/32 scopeglobal p1p1
inet 14.17.64.13/32 scopeglobal p1p1
root@ubuntu:~# ipvsadm -L -c #从这儿可以看出,14.17.64.13转发到10真实服务器上。
IPVS connection entries
pro expire state source virtual destination
TCP 14:58 ESTABLISHED242.103.143.219.broad.bj.bj.dynamic.163data.com.cn:54106 14.17.64.13:62222 14.17.64.10:62222
在lvs服务器重新启动之后,还会把VIP抢占回来
root@ubuntu:~# ip add|grep 14.17.64
inet 14.17.64.2/24 brd14.17.64.255 scope global p1p1
inet 14.17.64.14/32 scopeglobal p1p1
到此,LVS+Keepalived高可用搭建完成,并能实现多端口的转发(即转发所有TCP端口)。
思考:
此处只部署了两台LVS,如果要部署更多LVS,也是同样的配置,因为keepalived的心跳报文是广播的,所以只要在同一个局域网内,无论多少个keepalived程序都能够进行选举与VIP接管。
Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境部署】的更多相关文章
- 测试LVS+Keepalived高可用负载均衡集群
测试LVS+Keepalived高可用负载均衡集群 1. 启动LVS高可用集群服务 此时查看Keepalived服务的系统日志信息如下: [root@localhost ~]# tail -f /va ...
- LVS+Keepalived高可用负载均衡集群架构实验-01
一.为什么要使用负载均衡技术? 1.系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...
- 配置LVS + Keepalived高可用负载均衡集群之图文教程
负载均衡系统可以选用LVS方案,而为避免Director Server单点故障引起系统崩溃,我们可以选用LVS+Keepalived组合保证高可用性. 重点:每个节点时间都同步哈! C++代码 [r ...
- Keepalived+LVS(dr)高可用负载均衡集群的实现
一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+lvs双主高可用负载均衡集群及LAMP应用keepalived-1.2 ...
- LVS+Keepalived搭建MyCAT高可用负载均衡集群
LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...
- Linux 笔记 - 第十八章 Linux 集群之(三)Keepalived+LVS 高可用负载均衡集群
一.前言 前两节分别介绍了 Linux 的高可用集群和负载均衡集群,也可以将这两者相结合,即 Keepalived+LVS 组成的高可用负载均衡集群,Keepalived 加入到 LVS 中的原因有以 ...
- LVS+Keepalived 实现高可用负载均衡集群
LVS+Keepalived 实现高可用负载均衡集群 随着网站业务量的增长,网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如 F5 ,Array又太贵,你们又是创业型互联公司如何有效 ...
- RabbitMQ(四):使用Docker构建RabbitMQ高可用负载均衡集群
本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群.受限于自身条件,本 ...
- Keepalived+Nginx实现高可用负载均衡集群
一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+nginx双主高可用负载均衡集群及LAMP应用keepalived-1 ...
随机推荐
- Vue 获取dom元素中的自定义属性值
方法一: HTML <div id="app"> <button @click="getData($event,'100')">点我&l ...
- POJ-2478-Farey Sequence(欧拉函数)
链接: https://vjudge.net/problem/POJ-2478 题意: The Farey Sequence Fn for any integer n with n >= 2 i ...
- Substring Anagrams
Given a string s and a non-empty string p, find all the start indices of p's anagrams in s. Strings ...
- Greenplum table 之 appendonly表
一.压缩表 1.appendonly压缩表的数据视图为pg_appendonly 2.appendonly在Greenplum后也可更新与删除
- 递归函数返回值 undefined
getItem(obj, arr, index) { if (arr.length - 1 !== index) { const tempObj = obj[arr[index]]; this.get ...
- Airflow 配置celery+rabbitmq和celery+redis
Airflow 配置celery+rabbitmq 1.安装celery和rabbitmq组件 pip3 install apache-airflow[celery] pip3 install apa ...
- python 使用PyKDL 四元数转欧拉角
安装: sudo apt-get install ros-indigo-kdl-parser-py 使用: import PyKDLimport math def quat_to_angle(quat ...
- html页面引入vue组件
html页面引入vue组件需要在页面引入http-vue-loader.js 注意:要查看页面引入vue组件的效果不能直接在本地打开index.html,会有跨域问题,可以在本地配置一个nginx转发 ...
- java继承内存分配
java继承内存分配 继承的基本概念: * Java不支持多继承,也就是说子类至多只能有一个父类. * 子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法. * 子类中定义的成员 ...
- 如何在openfoam中使用probes?【转载】
The probes functionObject 可以监测结果和在后处理中提出结果处理结果.基本用法如下: in $FOAM_TUTORIAL/oodles/pitzDaily/ case func ...