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



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

实验一:实现keepalived主从方式高可用基于LVS-DR模式的应用实战:

实验原理

  主从:一主一从,主的在工作,从的在休息;主的宕机了,VIP漂移到从上,由从提供服务

1、环境准备:

  两台centos系统做DR、一主一从,两台实现过基于LNMP的电子商务网站

机器名称 IP配置 服务角色 备注
lvs-server-master VIP:172.17.100.100 DIP:172.17.66.66 负载均衡器 主服务器 开启路由功能 配置keepalived
lvs-server-backup VIP:172.17.100.100 DIP:172.17.251.66 后端服务器 从服务器 开启路由功能 配置keepalived
rs01 RIP:172.17.77.77 后端服务器 网关指向DIP(桥接)
rs02 RIP:172.17.251.111 后端服务器 网关指向DIP(桥接)

2、配置 lvs-server-master(主服务器)

  修改keepalived主(lvs-server-master)配置文件实现 virtual_instance 实例

2.1 配置文件中修改三段

  配置文件为/etc/keepalived/keepalived.conf

全局段,故障通知邮件配置

global_defs {
notification_email {
root@localhost
}
notification_email_from root@keer.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id keepalived_lvs
}

② 配置虚拟路由器的实例段,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 keer
}
virtual_ipaddress {
172.17.100.100
}
}

③ 设置一个virtual server段

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段

	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 2
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

  一定要注意大小写

2.2 开启keepalived 服务

  service keepalived start

  能看到网卡别名 和 负载均衡策略已经设置好了



  我们来使用ipvsadm -Ln来查看一下:

2.3 后续

  因为是主从方式,所以从上的配置和主只有一点差别;所以可以把这个配置文件拷贝到从服务器上在进行修改即可:

	scp /etc/keepalived/keepalived.conf @172.17.11.11:

3、配置lvs-server-backup (从服务器)

3.1 修改配置文件

  因为这个配置文件是从主服务器上拷贝过来的,所以只需要修改②实例段,其他都不要变,保证一模一样

vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass keer
}

3.2 开启keepalived 服务

service keepalived start

  负载均衡策略已经设置好了,注意:主director没有宕机,从上就不会有VIP

  可以用ipvsadm -Ln 来查看,可能过一会才会显示

4、配置 real server

4.1 开启事前准备好的web服务

	systemctl start nginx
systemctl start mariadb
systemctl start php-fpm

4.2 因为是DR模式,需在rs上进行设置

4.2.1 配置路由

  配置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
4.2.2 使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:必须避免将接口信息向非本网络进行通告

4.2.3 想永久生效,可以写到配置文件中
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、测试

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

5.2 测试keepalived的主从方式

① 使keepalive 的主宕机

	service keepalived stop

  会发现服务能照常访问,但是VIP 漂移到了从上

  从多了网卡别名,且地址是VIP

[root@server-backup ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:22:8d:75 brd ff:ff:ff:ff:ff:ff
inet 172.17.251.66/16 brd 172.17.255.255 scope global eth0
inet 172.17.100.100/32 scope global eth1
inet6 fe80::20c:29ff:fe22:8d75/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:22:8d:7f brd ff:ff:ff:ff:ff:ff
inet 192.168.37.128/24 brd 192.168.37.255 scope global eth1
inet6 fe80::20c:29ff:fe22:8d7f/64 scope link
valid_lft forever preferred_lft forever
4: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
link/ether ba:21:04:5b:66:60 brd ff:ff:ff:ff:ff:ff

② 使keepalive 的主重新开启服务,因为主的优先级高,所以VIP又重新漂移到了主上

实验二:实现keepalived双主方式高可用基于LVS-DR模式的应用实战:

实验原理

互为主从:主从都在工作;其中一个宕机了,VIP漂移到另一个上,提供服务

1、实验环境,基本同上

机器名称 IP配置 服务角色 备注
lvs-server-1 VIP:172.17.120.120 DIP:172.17.66.66 负载均衡器 主服务器 开启路由功能 配置keepalived
lvs-server2 VIP:172.17.120.121 DIP:172.17.251.66 后端服务器 从服务器 开启路由功能 配置keepalived
rs01 RIP:172.17.77.77 后端服务器 网关指向DIP(桥接)
rs02 RIP:172.17.252.111 后端服务器 网关指向DIP(桥接)

2、配置 lvs-server-master1(第一个主服务器)

  配置基本同上,就是加了一个实例段

  修改keepalived主(lvs-server-master)配置文件实现 virtual_instance 实例

2.1 主的设置 VI_1

vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass keer
}
virtual_ipaddress {
172.17.120.120
}
} virtual_server 172.17.120.120 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
}
}
}

2.2 从的设置 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.120.121
}
} virtual_server 172.17.120.121 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.77.77 443 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.17.252.111 443 {
weight 2
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

2.3 开启keepalived 服务

	service keepalived start

  能看到网卡别名 和 负载均衡策略已经设置好了

2.4 后续

  因为是主从方式,所以从上的配置和主只有一点差别;所以可以把这个配置文件拷过去

	scp /etc/keepalived/keepalived.conf @172.17.11.11:

3、配置 lvs-server-master2(第二个主服务器)

  在lvs-server2 上,基本同1,就是把实例的主从调换一下

3.1 从的设置 VI_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 keer
}
virtual_ipaddress {
172.17.120.120
}
}

3.2 主的设置 VI_2

vrrp_instance VI_2 {
state MASTER
interface eth1
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass keer
}
virtual_ipaddress {
172.17.120.121
}
}

3.3 开启keepalived 服务

	service keepalived start

  能看到网卡别名 和 负载均衡策略已经设置好了,显示结果会等段时间再显示

  

4、配置 real server

4.1 开启事前准备好的web服务

        systemctl start nginx
systemctl start mariadb
systemctl start php-fpm

4.2 因为是DR模式,需在rs上进行设置

4.2.1 配置路由

  配置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
4.2.2 使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:必须避免将接口信息向非本网络进行通告

4.2.3 想永久生效,可以写到配置文件中
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、测试

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

5.2 测试keepalived的双主方式

  使keepalive 的任意一个宕机

	service keepalived stop

  会发现服务能照常访问,另一个机器80、443都能访问,且宕机的VIP漂移到了另一个服务器上

实验三:实现keepalived主从方式高可用基于LVS-NAT模式的应用实战:

实验原理

主从:一主一从,主的在工作,从的在休息;主的宕机了,VIP漂移到从上,由从提供服务

1、环境准备

机器名称 IP配置 服务角色 备注
lvs-server-1 VIP:172.17.120.120 DIP:192.168.37.120 负载均衡器 主服务器 开启路由功能 配置keepalived
lvs-server-2 VIP:172.17.120.120 DIP:192.168.37.120 后端服务器 从服务器 开启路由功能 配置keepalived
rs01 RIP:192.168.37.222 后端服务器 网关指向DIP
rs02 RIP:192.168.37.111 后端服务器 网关指向DIP

注意:要确保rs和DIP在一个网段,且不和VIP在一个网段

2、配置 lvs-server-master(主服务器)

2.1 配置文件中修改三段

  配置文件为 /etc/keepalived/keepalived.conf

① 全局段,故障通知邮件配置

global_defs {
notification_email {
root@localhost
}
notification_email_from root@keer.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id keepalived_lvs
}

② 配置虚拟路由器的实例段,VI_1是自定义的实例名称,可以有多个实例段

vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 190
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass keer
}
virtual_ipaddress {
172.17.120.120
192。168.37.120
}
}

③ 设置一个virtual server段

virtual_server 172.17.120.120 80 {
delay_loop 6
lb_algo wrr
lb_kind NAT
nat_mask 255.255.255.255
persistence_timeout 120
protocol TCP

④ 配置real server段

    real_server 192.168.37.222 80 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
} real_server 192.168.37.111 80 {
weight 2
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

2.2 因为是NAT模式,所以需开启路由转发功能

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

  接着使用sysctl -p 读一下,使参数生效

2.3 开启keepalived 服务

	service keepalived start

  能看到网卡别名 和 负载均衡策略已经设置好了



2.4 后续

  因为是主从方式,所以从上的配置和主只有一点差别;所以可以把这个配置文件拷过去

scp /etc/keepalived/keepalived.conf @172.17.251.66:

3、配置 lvs-server-backup (从服务器)

3.1 修改配置文件

  因为这个配置文件是从主服务器上拷贝过来的,所以只需要修改②实例段,其他都不要变,保证一模一样:

vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 190
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass keer
}
virtual_ipaddress {
172.17.120.120
192.168.37.120
}
}

3.2 因为是NAT模式,所以需开启路由转发功能

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

  接着使用sysctl -p读一下,使参数生效

3.3 开启keepalived 服务

	service keepalived start

  负载均衡策略已经设置好了,注意:主director没有宕机,从上就不会有VIP

4、配置 real server

4.1 开启事前准备好的web服务

systemctl start nginx
systemctl start mariadb
systemctl start php-fpm

4.2 因为是NAT模式,需在rs上设置

  只需把网关指向DIP

route add default gw 192.168.37.123

  此时,我们可以查看一下网关:

[root@rs01 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.37.123 0.0.0.0 UG 0 0 0 ens34
0.0.0.0 172.17.0.1 0.0.0.0 UG 100 0 0 ens33
172.17.0.0 0.0.0.0 255.255.0.0 U 100 0 0 ens33
192.168.37.0 0.0.0.0 255.255.255.0 U 100 0 0 ens34
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

  我们发现,还有一个172的网关在生效,所以我们把它down掉:

[root@rs01 ~]# ifconfig ens33 down

  一定要注意这一点,不然多个网关会让数据不知道从哪走~

5、测试

5.1 lvs负载均衡作用是否开启

  客户端访问http://172.17.120.120/

  也可以进行详细测试:

① 在rs1 上设置一个测试页面

vim /data/web/test.html
real server 1

② 在rs2 上设置一个测试页面

vim /data/web/test.html
real server 2

③ 网页访问http://172.17.120.120/test.html 发现有real server 1也有real server 2

5.2 测试keepalived的主从方式

① 使keepalive 的主宕机

	service keepalived stop

  会发现服务能照常访问,但是VIP 漂移到了从上

  从多了网卡别名,且地址是VIP

③ 使keepalive 的主重新开启服务,因为主的优先级高,所以VIP又重新漂移到了主上

	service keepalived start


  以上~如果有不足之处还请大家多多指教喏٩(๑>◡<๑)۶

实现基于Keepalived高可用集群网站架构的多种方法的更多相关文章

  1. 项目实战3—实现基于Keepalived+LVS的高可用集群网站架构

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

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

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

  3. 基于Keepalived高可用集群的MariaDB读写分离机制实现

    一 MariaDB读写分离机制 在实现读写分离机制之前先理解一下三种主从复制方式:1.异步复制:MariaDB默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库 ...

  4. 搭建 Keepalived + Nginx + Tomcat 的高可用负载均衡架构

    1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...

  5. [转]搭建Keepalived+Nginx+Tomcat高可用负载均衡架构

    [原文]https://www.toutiao.com/i6591714650205716996/ 一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最 ...

  6. Keepalived + Nginx + Tomcat 的高可用负载均衡架构搭建

    Keepalived + Nginx + Tomcat 的高可用负载均衡架构搭建 Nginx 是一个高性能的 HTTP反向代理服务器 Keepalived 是一个基于VRRP协议来实现的LVS服务高可 ...

  7. Keepalived + Nginx + Tomcat 高可用负载均衡架构

    环境: 1.centos7.3 2.虚拟ip:192.168.217.200 3.192.168.217.11.192.168.217.12上分别部署Nginx Keepalived Tomcat并进 ...

  8. 搭建Keepalived + Nginx + Tomcat的高可用负载均衡架构

    1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...

  9. Linux(13):期中架构(5)--- 前端部分:keepalived高可用 & HTTPS & iptables防火墙

    keepalived 高可用集群 1. keepalived服务概念说明 # 1.1 keepalived软件的作用? Keepalived软件起初是专为LVS负载均衡软件设计的, 用来管理并监控LV ...

随机推荐

  1. clipboard.js 介绍

    这是著名开源项目 clipboard.js 的 README.md,我把它翻译成中文.发出来,方便自己和他人阅读. 项目地址:https://github.com/zenorocha/clipboar ...

  2. Element-ui Theme浅析

    一.浅析 1.采用BEM方式管理类名 B:block,模块,一个块是一个独立的实体,块可以包含其它块,名字单词间用-连接:如一个搜索块: E:element,元素,一个元素是块的一部分,具有某种功能, ...

  3. apache 安装/mod_dir.so: undefined symbol: apr_array_clear

    apache 安装好后 启动出错: httpd: Syntax error on line 143 of /usr/local/apache2/conf/httpd.conf: Cannot load ...

  4. IDL 存储数组

    IDL中的数组在内存中是按行存储的,这是因为IDL最初设计的设计目的是用来处理行扫描卫星数据. 1.一维数组 m个元素的一维数组arr[m]的存储方式为 arr[0]→arr[1]→...→arr[m ...

  5. asp.net mvc5中使用缓存依赖SqlCacheDependency

    缓存是用来提高应用性能,降低服务器压力.适用于数据不易变,数据易通用的情景, 对于动态查询数据,例如数据分析,最好放弃使用缓存.使用缓存最麻烦的就是保持源数据和缓存的中的数据一致. 缓存(Cache) ...

  6. Jquery+Ajax限制查询间隔

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Jquery20150305.a ...

  7. 笨鸟先飞之ASP.NET MVC系列之过滤器(03动作过滤器过滤器)

    概念介绍 动作过滤器应该是我们平常工作中需要用到最多的过滤器了,动作过滤器,主要在我们的动作方法执行前后执行. 如果我们需要创建动作过滤器需要实现IActionFilter接口. 我们看到该接口里有两 ...

  8. ctp交易平台转java接口转换

    首先感谢倪材@csdn的博客,给了我很大帮助. http://blog.csdn.net/pjjing/article/details/53186394 http://blog.csdn.net/pj ...

  9. JAVA常用API(Date、DateFormat、Calendar、System、Math、基本数据类型包装类)

    注:本文所有内容均属个人见解,如有错误望各位大佬好心指点批评,不胜感激 本章重点单词: parse:解析 format:格式化 pattern:模式 amount:数量 filed :领域 1.Dat ...

  10. python安装(python2.7)

    1.下载python 进入官网下载安装 点击打开链接(官网地址:https://www.python.org/downloads/),进入官网后根据自己需求选择python2 或者 python3 2 ...