热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

项目实战3—Keepalived实现高可用

实现基于Keepalived高可用集群网站架构环境:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可

技术分享

实现基于Keepalived高可用集群网站架构

  环境:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展,后端节点已经通过集群技术保障了可用性,但对于前端负载均衡器来说,是个比较大的安全隐患,因为当前端负载均衡器出现故障时,整个集群就处于瘫痪状态,因此,负载均衡器的可用性也显得至关重要,那么怎么来解决负载均衡器的可用性问题呢?

 总项目流程图,详见http://www.cnblogs.com/along21/p/7435612.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
30
router_id keepalived_lvs
}
② 配置虚拟路由器的实例段,VI_1是自定义的实例名称,可以有多个实例段
vrrp_instance VI_1 {  #VI_1是自定义的实例名称
state MASTER      #初始状态,MASTER|BACKUP
interface eth1      #通告选举所用端口
virtual_router_id
51 #虚拟路由的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 80 { #设置一个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 80 { #后端真实节点主机的权重等设置
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 80 {
weight
2
HTTP
_GET {
url {
path
/
}
connect_timeout
3
nb_get_retry
3
delay_before_retry
3
}
}
}

 

(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
51
priority
99
advert_int
1
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 = 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/

技术分享

也可以详细测试

① 在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
51
priority
100
advert_int
1
authentication {
auth_type PASS
auth_pass along
}
virtual_ipaddress {
172.17.100.100
}
}
virtual_server
172.17.100.100 80 {
delay_loop
6
lb_algo wrr
lb_kind DR
nat_mask
255.255.255.255
persistence_timeout
600
protocol TCP
real_server
172.17.1.7 80 {
weight
1
HTTP_GET {
url {
path
/
}
connect_timeout
3
nb_get_retry
3
delay_before_retry
3
}
}
real_server
172.17.22.22 80 {
weight
1
HTTP_GET {
url {
path
/
}
connect_timeout
3
nb_get_retry
3
delay_before_retry
3
}
}
}

 

② 从的设置 VI_2

vrrp_instance VI_2 {
state BACKUP
interface eth1
virtual_router_id
52
priority
98
advert_int
1
authentication {
auth_type PASS
auth_pass along
}
virtual_ipaddress {
172.17.100.101
}
}
virtual_server
172.17.100.101 443 {
delay_loop
6
lb_algo wrr
lb_kind DR
nat_mask
255.255.255.255
persistence_timeout
600
protocol TCP
real_server
172.17.1.7 443 {
weight
1
HTTP_GET {
url {
path
/
}
connect_timeout
3
nb_get_retry
3
delay_before_retry
3
}
}
real_server
172.17.22.22 443 {
weight
1
HTTP_GET {
url {
path
/
}
connect_timeout
3
nb_get_retry
3
delay_before_retry
3
}
}
}

 

(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
51
priority
98
advert_int
1
authentication {
auth_type PASS
auth_pass along
}
virtual_ipaddress {
172.17.100.100
}
}
② vrrp_instance VI_2 {
state MASTER
interface eth1
virtual_router_id
52
priority
100
advert_int
1
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
30
router_id keepalived_lvs
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id
51
priority
100
advert_int
1
authentication {
auth_type PASS
auth_pass along
}
virtual_ipaddress {
172.17.100.100
192.168.30.100
}
}
virtual_server
172.17.100.100 80 {
delay_loop
6
lb_algo wrr
lb_kind NAT
nat_mask
255.255.255.255
persistence_timeout
100
protocol TCP
real_server
192.168.30.107 80 {
weight
1
HTTP_GET {
url {
path
/
}
connect_timeout
3
nb_get_retry
3
delay_before_retry
3
}
}
real_server
192.168.30.7 80 {
weight
2
HTTP_GET {
url {
path
/
}
connect_timeout
3
nb_get_retry
3
delay_before_retry
3
}
}
}

 

(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
51
priority
99
advert_int
1
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 $1 in
master)
notify master
exit
0
;;
backup)
notify backup
exit
0
;;
fault)
notify fault
exit
0
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit
1
;;
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秒检查一次
}

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 -0 检测这个进程是否还活着,不存在就减权重
interval
2 #每2秒检查一次
fall
2 #失败2次就打上ko的标记
rise
2 #成功2次就打上ok的标记
weight
-4 #权重,优先级-4,若为ko
}

 

2、在instance 实例段可以直接调用这个脚本

track_script {
chk_nginx
}

 

3、检测

若主的nginx服务没有开启,则每2秒-4的权重,当优先级小于从,VIP漂到从上,从接上服务;

若主的nginx服务开启,重读配置文件,优先级恢复,VIP回到主上,主恢复服务;

  


推荐阅读
  • 1.dd命令dd命令的全称为diskdump,对系统所有用户开放。该命令用于复制磁盘的数据块,且可在复制文件的同时指定转换的文件格式。命令选项参数说明ifFILE:输入文件名称,默 ... [详细]
  • 本文介绍在使用vmware中配置centos6.5时遇到的网络问题,包括host-only和natip的配置,以及无法上网的原因。同时提供了解决方法,包括去掉host-only配置文件中的gateway。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
author-avatar
手机用户2502924641
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有