项目实战3—实现基于Keepalived+LVS的高可用集群网站架构
实现基于Keepalived高可用集群网站架构
环境:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展,后端节点已经通过集群技术保障了可用性,但对于前端负载均衡器来说,是个比较大的安全隐患,因为当前端负载均衡器出现故障时,整个集群就处于瘫痪状态,因此,负载均衡器的可用性也显得至关重要,那么怎么来解决负载均衡器的可用性问题呢?
总项目流程图,详见 http://www.cnblogs.com/along21/p/8000812.html
① 两台服务器都使用yum 方式安装keepalived 服务
yum -y install keepalived
② iptables -F && setenforing 清空防火墙策略,关闭selinux
实验一:实现keepalived主从方式高可用基于LVS-DR模式的应用实战:
实验原理:
主从:一主一从,主的在工作,从的在休息;主的宕机了,VIP漂移到从上,由从提供服务
1、环境准备:
两台centos系统做DR、一主一从,两台实现过基于LNMP的电子商务网站
机器名称 |
IP配置 |
服务角色 |
备注 |
lvs-server-master |
VIP:172.17.100.100 DIP:172.17.1.6 |
负载均衡器 主服务器 |
开启路由功能 配置keepalived |
lvs-server-backup |
VIP:172.17.100.100 DIP:172.17.11.11 |
后端服务器 从服务器 |
开启路由功能 配置keepalived |
rs01 |
RIP:172.17.1.7 |
后端服务器 |
|
rs02 |
RIP:172.17.22.22 |
后端服务器 |
2、在lvs-server-master 主上
修改keepalived主(lvs-server-master)配置文件实现 virtual_instance 实例
(1)vim /etc/keepalived/keepalived.conf 修改三段
① 全局段,故障通知邮件配置
global_defs {
notification_email {
root@localhost
}
notification_email_from root@along.com
smtp_server 127.0.0.1
smtp_connect_timeout
router_id keepalived_lvs
} ② 配置虚拟路由器的实例段,VI_1是自定义的实例名称,可以有多个实例段
vrrp_instance VI_1 { #VI_1是自定义的实例名称
state MASTER #初始状态,MASTER|BACKUP
interface eth1 #通告选举所用端口
virtual_router_id #虚拟路由的ID号(一般不可大于255)
priority 100 #优先级信息 #备节点必须更低
advert_int 1 #VRRP通告间隔,秒
authentication {
auth_type PASS #认证机制
auth_pass along #密码(尽量使用随机)
}
virtual_ipaddress {
172.17.100.100 #vip
}
} ③ 设置一个virtual server段
virtual_server 172.17.100.100 { #设置一个virtual server:
delay_loop 6 # service polling的delay时间,即服务轮询的时间间隔
lb_algo wrr #LVS调度算法:rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #LVS集群模式:NAT|DR|TUN
nat_mask 255.255.255.255
persistence_timeout 600 #会话保持时间(持久连接,秒),即以用户在600秒内被分配到同一个后端realserver
protocol TCP #健康检查用的是TCP还是UDP
④ real server设置段
real_server 172.17.1.7 { #后端真实节点主机的权重等设置
weight 1 #给每台的权重,rr无效
HTTP_GET { #http服务
url {
path /
}
connect_timeout 3 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔
}
}
real_server 172.17.22.22 {
weight
HTTP_GET {
url {
path /
}
connect_timeout
nb_get_retry
delay_before_retry
}
}
}
(2)开启keepalived 服务
service keepalived start
能看到网卡别名 和 负载均衡策略已经设置好了
ipvsadm -Ln
(3)因为是主从方式,所以从上的配置和主只有一点差别;所以可以把这个配置文件拷过去
scp /etc/keepalived/keepalived.conf @172.17.11.11:
3、在lvs-server-backup 从上
(1)只需改②实例段,其他都不要变,保证一模一样
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass along
}
(2)开启keepalived 服务
service keepalived start
负载均衡策略已经设置好了,注意:主director没有宕机,从上就不会有VIP
ipvsadm -Ln 可能过一会才会显示
4、在real server 上
(1) 开启事前准备好的web服务
systemctl start nginx
systemctl start mariadb
systemctl start php-fpm
(2)因为是DR模式,需在rs上设置
① 配置VIP到本地回环网卡lo上,并只广播自己
ifconfig lo:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up
配置本地回环网卡路由
route add -host 172.17.100.100 lo:0
② 使RS "闭嘴"
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
忽略ARP广播
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
注意:关闭arp应答
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
2:必须避免将接口信息向非本网络进行通告
③ 想永久生效,可以写到配置文件中
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore =
net.ipv4.conf.lo.arp_announce =
net.ipv4.conf.all.arp_ignore =
net.ipv4.conf.all.arp_announce =
5、测试
(1)lvs负载均衡作用是否开启
客户端访问http://172.17.100.100/
也可以详细测试
① 在rs1 上设置一个测试一面
vim /data/web/test.html
real server 1
② 在rs2 上设置一个测试一面
vim /data/web/test.html
real server 2
③ 网页访问http://172.17.100.100/test.html 发现有real server 1也有real server 2
(2)测试keepalived的主从方式
① 使keepalive 的主宕机
service keepalived stop
会发现服务能照常访问,但是VIP 漂移到了从上
从多了网卡别名,且地址是VIP
③ 使keepalive 的主重新开启服务,因为主的优先级高,所以VIP又重新漂移到了主上
实验二:实现keepalived双主方式高可用基于LVS-DR模式的应用实战:
实验原理:
互为主从:主从都在工作;其中一个宕机了,VIP漂移到另一个上,提供服务
1、实验环境,基本同上
机器名称 |
IP配置 |
服务角色 |
备注 |
lvs-server-1 |
VIP:172.17.100.100 DIP:172.17.1.6 |
负载均衡器 主服务器 |
开启路由功能 配置keepalived |
lvs-server2 |
VIP:172.17.100.101 DIP:172.17.11.11 |
后端服务器 从服务器 |
开启路由功能 配置keepalived |
rs01 |
RIP:172.17.1.7 |
后端服务器 |
|
rs02 |
RIP:172.17.22.22 |
后端服务器 |
2、在lvs-server1 上,基本同上,就是加了一个实例段
修改keepalived主(lvs-server-master)配置文件实现 virtual_instance 实例
(1)vim /etc/keepalived/keepalived.conf
① 主的设置 VI_1
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass along
}
virtual_ipaddress {
172.17.100.100
}
} virtual_server 172.17.100.100 {
delay_loop
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.255
persistence_timeout
protocol TCP real_server 172.17.1.7 {
weight
HTTP_GET {
url {
path /
}
connect_timeout
nb_get_retry
delay_before_retry
}
}
real_server 172.17.22.22 {
weight
HTTP_GET {
url {
path /
}
connect_timeout
nb_get_retry
delay_before_retry
}
}
}
② 从的设置 VI_2
vrrp_instance VI_2 {
state BACKUP
interface eth1
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass along
}
virtual_ipaddress {
172.17.100.101
}
} virtual_server 172.17.100.101 {
delay_loop
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.255
persistence_timeout
protocol TCP real_server 172.17.1.7 {
weight
HTTP_GET {
url {
path /
}
connect_timeout
nb_get_retry
delay_before_retry
}
}
real_server 172.17.22.22 {
weight
HTTP_GET {
url {
path /
}
connect_timeout
nb_get_retry
delay_before_retry
}
}
}
(2)开启keepalived 服务
service keepalived start
能看到网卡别名 和 负载均衡策略已经设置好了
ipvsadm -Ln
(3)因为是主从方式,所以从上的配置和主只有一点差别;所以可以把这个配置文件拷过去
scp /etc/keepalived/keepalived.conf @172.17.11.11:
3、在lvs-server2 上,基本同1,就是把实例的主从调换一下
(1)vim /etc/keepalived/keepalived.conf
① vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass along
}
virtual_ipaddress {
172.17.100.100
}
}
② vrrp_instance VI_2 {
state MASTER
interface eth1
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass along
}
virtual_ipaddress {
172.17.100.101
}
}
(2)开启keepalived 服务
service keepalived start
能看到网卡别名 和 负载均衡策略已经设置好了,显示结果会等段时间再显示
ipvsadm -Ln,显示结果会等段时间再显示
4、在real server 上
(1) 开启事前准备好的web服务
systemctl start nginx
systemctl start mariadb
systemctl start php-fpm
(2)因为是DR模式,需在rs上设置
① 配置VIP到本地回环网卡lo上,并只广播自己
ifconfig lo:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up
ifconfig lo:1 172.17.100.101 broadcast 172.17.100.101 netmask 255.255.255.255 up
配置本地回环网卡路由
route add -host 172.17.100.100 lo:0
route add -host 172.17.100.101 lo:1
② 使RS "闭嘴"
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
忽略ARP广播
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
注意:关闭arp应答
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
2:必须避免将接口信息向非本网络进行通告
③ 想永久生效,可以写到配置文件中
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
5、测试
(1)lvs负载均衡作用是否开启
客户端访问http://172.17.100.100/ 公网172.17.100.100只能访问80
https://172.17.100.101/ 公网172.17.100.101只能访问443
也可以详细测试
① 在rs1 上设置一个测试一面
vim /data/web/test.html
real server 1
② 在rs2 上设置一个测试一面
vim /data/web/test.html
real server 2
③ 网页访问http://172.17.100.100/test.html或https://172.17.100.101/test.html 发现有real server 1也有real server 2
(2)测试keepalived的双主方式
① 使keepalive 的任意一个宕机
service keepalived stop
会发现服务能照常访问,另一个机器80、443都能访问,且宕机的VIP漂移到了另一个服务器上
实验三:实现keepalived主从方式高可用基于LVS-NAT模式的应用实战:
实验原理:
主从:一主一从,主的在工作,从的在休息;主的宕机了,VIP和DIP都漂移到从上,由从提供服务,因为DIP需被rs作为网关,所以也需漂移
1、环境准备
机器名称 |
IP配置 |
服务角色 |
备注 |
vs-server-master |
VIP:172.17.100.100 DIP:192.168.30.100 |
负载均衡器 主服务器 |
开启路由功能 配置keepalived |
lvs-server-backup |
VIP:172.17.100.100 DIP:192.168.30.100 |
后端服务器 从服务器 |
开启路由功能 配置keepalived |
rs01 |
RIP:192.168.30.107 |
后端服务器 |
网关指向DIP |
rs02 |
RIP:192.168.30.7 |
后端服务器 |
网关指向DIP |
注意:要确保rs和DIP在一个网段,且不和VIP在一个网段
2、在lvs-server-master 主上
(1)vim keepalived.conf
global_defs {
notification_email {
root@localhost
}
notification_email_from root@along.com
smtp_server 127.0.0.1
smtp_connect_timeout
router_id keepalived_lvs
} vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass along
}
virtual_ipaddress {
172.17.100.100
192.168.30.100
}
} virtual_server 172.17.100.100 {
delay_loop
lb_algo wrr
lb_kind NAT
nat_mask 255.255.255.255
persistence_timeout
protocol TCP real_server 192.168.30.107 {
weight
HTTP_GET {
url {
path /
}
connect_timeout
nb_get_retry
delay_before_retry
}
} real_server 192.168.30.7 {
weight
HTTP_GET {
url {
path /
}
connect_timeout
nb_get_retry
delay_before_retry
}
}
}
(2)因为是NAT模式,所以需开启路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p 读一些,使参数生效
(3)开启keepalived 服务
service keepalived start
能看到网卡别名 和 负载均衡策略已经设置好了
ipvsadm -Ln
(4)因为是主从方式,所以从上的配置和主只有一点差别;所以可以把这个配置文件拷过去
scp /etc/keepalived/keepalived.conf @172.17.11.11:
3、在lvs-server-backup 从上
(1)只需改②实例段,其他都不要变,保证一模一样
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass along
}
(2)因为是NAT模式,所以需开启路由转发功能
① vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
② sysctl -p 读一些,使参数生效
(3)开启keepalived 服务
service keepalived start
负载均衡策略已经设置好了,注意:主director没有宕机,从上就不会有VIP
ipvsadm -Ln 可能过一会才会显示
4、在real server 上
(1) 开启事前准备好的web服务
systemctl start nginx
systemctl start mariadb
systemctl start php-fpm
(2)因为是NAT模式,需在rs上设置
只需把网关指向DIP
route add default gw 192.168.30.100
5、测试
(1)lvs负载均衡作用是否开启
客户端访问http://172.17.100.100/
也可以详细测试
① 在rs1 上设置一个测试一面
vim /data/web/test.html
real server 1
② 在rs2 上设置一个测试一面
vim /data/web/test.html
real server 2
③ 网页访问http://172.17.100.100/test.html 发现有real server 1也有real server 2
(2)测试keepalived的主从方式
① 使keepalive 的主宕机
service keepalived stop
会发现服务能照常访问,但是VIP 和DIP 都漂移到了从上
从多了网卡别名,且地址是VIP
③ 使keepalive 的主重新开启服务,因为主的优先级高,所以VIP和DIP又重新漂移到了主上
实验四:实现keeaplived 故障通知机制
1、编写好脚本
脚本主要内容:检测到主从发生变化,或错误,给谁发邮件;邮件内容是:在什么时间,谁发生了什么变化
vim /etc/keepalived/notify.sh
#!/bin/bash
# Author: www.magedu.com
contact='root@localhost'
notify() {
mailsubject="$(hostname) to be $1: vip floating"
mailbody="$(date +'%F %H:%M:%S'): vrrp transition, $(hostname) changed to be $1"
echo $mailbody | mail -s "$mailsubject" $contact
}
case $ in
master)
notify master
exit
;;
backup)
notify backup
exit
;;
fault)
notify fault
exit
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit
;;
esac
脚本加权限 chmod +x /etc/keepalived/notify.sh
2、在keepalived 的配置文件调用脚本
在instance 实例段添加,注意脚本的路径
notify_backup "/etc/keepalived/notify.sh backup"
notify_master "/etc/keepalived/notify.sh master"
notify_fault "/etc/keepalived/notify.sh fault"
例:
实验五:实现keepaplived自定义脚本检测功能
原理:在keepalived的配置文件中能直接定义脚本,且能在instance 实例段直接调用生效
方案一:检测是否存在down文件,来实现主从的调整
1、在实例段上边定义一个脚本
vim keepalived.conf
vrrp_script chk_down { #定义一个脚本,脚本名称为chk_down
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" #检查这个down文件,若存在返回值为1,keepalived会停止;不存在返回值为0,服务正常运行;这里的exit和bash脚本里的return很相似
interval #每2秒检查一次
}
2、在instance 实例段可以直接调用这个脚本
track_script {
chk_down
}
3、检测
在主上,创建一个/etc/keepalived/down 文件,主的keepalived服务立刻停止,VIP漂到从上,从接上服务;
down文件一旦删除,主的keepalived服务会立即启动,若优先级高或优先级低但设置的抢占,VIP会重漂回来,接上服务。
方案二:检测nginx服务是否开启,来实现调整主从
1、在实例段上边定义一个脚本
vrrp_script chk_nginx {
script "killall -0 nginx" #killall - 检测这个进程是否还活着,不存在就减权重
interval #每2秒检查一次
fall #失败2次就打上ko的标记
rise #成功2次就打上ok的标记
weight - #权重,优先级-,若为ko
}
2、在instance 实例段可以直接调用这个脚本
track_script {
chk_nginx
}
3、检测
若主的nginx服务没有开启,则每2秒-4的权重,当优先级小于从,VIP漂到从上,从接上服务;
若主的nginx服务开启,重读配置文件,优先级恢复,VIP回到主上,主恢复服务;
项目实战3—实现基于Keepalived+LVS的高可用集群网站架构的更多相关文章
- 实现基于Keepalived主从高可用集群网站架构
背景 上一期我们实现了基于lvs负载均衡集群的电商网站架构,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展 ...
- 实现基于Keepalived高可用集群网站架构的多种方法
实现基于Keepalived高可用集群网站架构 随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展,后端节点已 ...
- Keepalived+LVS(dr)高可用负载均衡集群的实现
一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+lvs双主高可用负载均衡集群及LAMP应用keepalived-1.2 ...
- 基于keepalived搭建MySQL高可用集群
MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...
- Linux keepalived+lvs实现高可用负载均衡
LVS的具有强大的负载均衡功能,但是它缺少对负载层节点(DS)的健康状态检测功能,也不能对后端服务(RS)进行健康状态检测:keepalived是专门用来监控高可用集群架构的中各服务的节点状态,如果某 ...
- 基于keepalived的nginx高可用
#nginx,keepalived安装略过 MASTER 节点配置文件(192.168.1.11) vi /etc/keepalived/keepalived.conf global_defs { # ...
- [转]搭建Keepalived+Nginx+Tomcat高可用负载均衡架构
[原文]https://www.toutiao.com/i6591714650205716996/ 一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最 ...
- Keepalived + Nginx + Tomcat 高可用负载均衡架构
环境: 1.centos7.3 2.虚拟ip:192.168.217.200 3.192.168.217.11.192.168.217.12上分别部署Nginx Keepalived Tomcat并进 ...
- Keepalived+lvs 搭建高可用负载均衡
本站点停止更新,请访问:blog.coocap.com 不了解负载均衡高可用的童鞋,强烈建议先看keepalived+nginx高可用负载均衡: 传送门(求粉):http://www.cnblogs. ...
随机推荐
- 第四范式涂威威:AutoML技术现状与未来展望
以下内容是对AutoML技术现状与未来展望讲座的总结. 1.机器学习定义 <西瓜书>中的直观定义是:利用经验来改善系统的性能.(这里的经验一般是指数据) Mitchell在<Mach ...
- Linux 第十五天
2)环境变量:这种变量中主要保存的是和系统操作环境相关的数据. export 变量名=变量值 设置环境变量 env 查询变量 unset变量名 ...
- java操作FTP的一些工具方法
java操作FTP还是很方便的,有多种开源支持,这里在apache开源的基础上自己进行了一些设计,使用起来更顺手和快捷. 思路: 1.设计FTPHandler接口,可以对ftp,sftp进行统一操作, ...
- Java时间日期格式转换 转自:http://www.cnblogs.com/edwardlauxh/archive/2010/03/21/1918615.html
Java时间格式转换大全 import java.text.*; import java.util.Calendar; public class VeDate { /** * 获取现在时间 * * @ ...
- Excel把数据存入共享字符串文件中并返回该字符串的下标
public static int InsertSharedStringItem(string text, pkg.SharedStringTablePart shareStringPart) { i ...
- PYTHON进阶(3)
学习内容: 1.Python模块redis 2.Python模块memcach 3.Python模块SQLAlchemy 一.Python模块redis redis介绍 二.Python模块memca ...
- Windows环境下MySQL 5.6安装与配置
1将MySQL压缩包解压到自定义目录下. 2.添加环境变量 右键单击我的电脑->属性->高级系统设置(高级)->环境变量. 点击系统变量下的新建按钮 1) 输入变量名:MYSQ ...
- Javascript高级编程学习笔记(58)—— 事件(2)事件处理程序
事件处理程序 事件处理程序即响应某个事件的函数 事件处理程序以 “on” 开头 如“onclick”,“onload” HTML事件处理程序 某个元素支持的每种事件都可以使用一个与响应的事件处理程序同 ...
- Javascript高级编程学习笔记(43)—— 动态脚本
动态脚本 大多数情况下,DOM操作都很简洁明了 因为DOM主要就是用来操作页面中的可视节点的 但有些时候我们又希望可以动态的来进行DOM操作 其中的一部分也就是今天我们的内容动态脚本 动态脚本是什么意 ...
- Java程序员的成长之路
阅读本文大概需要 8.2 分钟. tips:虽然题目是写的Java程序员,但对其他语言的开发来说也会有借鉴作用. 本篇介绍的是大体思路,以及每个节点所需要学习的书籍内容,如果大家对详细的技术点有需要, ...