实现基于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.comsmtp_server 127.0.0.1smtp_connect_timeout 30router_id keepalived_lvs
}

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

vrrp_instance VI_1 {state MASTERinterface eth1virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass keer}virtual_ipaddress {172.17.100.100}
}

③ 设置一个virtual server段

virtual_server 172.17.100.100 80 {delay_loop 6lb_algo wrrlb_kind DRnat_mask 255.255.255.255persistence_timeout 600protocol TCP

④ 配置real server段

    real_server 172.17.1.7 80 {weight 1HTTP_GET {url {path /}connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 172.17.22.22 80 {weight 2HTTP_GET {url {path /}connect_timeout 3nb_get_retry 3delay_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 BACKUPinterface eth1virtual_router_id 51priority 99advert_int 1authentication {auth_type PASSauth_pass keer}

3.2 开启keepalived 服务

service keepalived start

  负载均衡策略已经设置好了,注意:主director没有宕机,从上就不会有VIP
  可以用ipvsadm -Ln来查看,可能过一会才会显示

4、配置 real server

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

    systemctl start nginxsystemctl start mariadbsystemctl 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_ignoreecho "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

忽略ARP广播

    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/all/arp_announce

注意:关闭arp应答
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
2:必须避免将接口信息向非本网络进行通告

4.2.3 想永久生效,可以写到配置文件中
vim /etc/sysctl.confnet.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2net.ipv4.conf.all.arp_ignore = 1net.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:00inet 127.0.0.1/8 scope host loinet6 ::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 1000link/ether 00:0c:29:22:8d:75 brd ff:ff:ff:ff:ff:ffinet 172.17.251.66/16 brd 172.17.255.255 scope global eth0inet 172.17.100.100/32 scope global eth1inet6 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 1000link/ether 00:0c:29:22:8d:7f brd ff:ff:ff:ff:ff:ffinet 192.168.37.128/24 brd 192.168.37.255 scope global eth1inet6 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 MASTERinterface eth1virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass keer}virtual_ipaddress {172.17.120.120}
}virtual_server 172.17.120.120 80 {delay_loop 6lb_algo wrrlb_kind DRnat_mask 255.255.255.255persistence_timeout 600protocol TCPreal_server 172.17.1.7 80 {weight 1HTTP_GET {url {path /}connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 172.17.22.22 80 {weight 1HTTP_GET {url {path /}connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}

2.2 从的设置 VI_2

vrrp_instance VI_2 {state BACKUPinterface eth1virtual_router_id 52priority 98advert_int 1authentication {auth_type PASSauth_pass along}virtual_ipaddress {172.17.120.121}
}virtual_server 172.17.120.121 443 {delay_loop 6lb_algo wrrlb_kind DRnat_mask 255.255.255.255persistence_timeout 600protocol TCPreal_server 172.17.77.77 443 {weight 1HTTP_GET {url {path /}connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 172.17.252.111 443 {weight 2HTTP_GET {url {path /}connect_timeout 3nb_get_retry 3delay_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 BACKUPinterface eth1virtual_router_id 51priority 98advert_int 1authentication {auth_type PASSauth_pass keer}virtual_ipaddress {172.17.120.120}
}

3.2 主的设置 VI_2

vrrp_instance VI_2 {state MASTERinterface eth1virtual_router_id 52priority 100advert_int 1authentication {auth_type PASSauth_pass keer}virtual_ipaddress {172.17.120.121}
}

3.3 开启keepalived 服务

    service keepalived start

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

4、配置 real server

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

        systemctl start nginxsystemctl start mariadbsystemctl 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_ignoreecho "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

忽略ARP广播

    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/all/arp_announce

注意:关闭arp应答
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
2:必须避免将接口信息向非本网络进行通告

4.2.3 想永久生效,可以写到配置文件中
vim /etc/sysctl.confnet.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2net.ipv4.conf.all.arp_ignore = 1net.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.htmlreal server 1

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

    vim /data/web/test.htmlreal 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.comsmtp_server 127.0.0.1smtp_connect_timeout 30router_id keepalived_lvs
}

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

vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 190priority 100advert_int 1authentication {auth_type PASSauth_pass keer}virtual_ipaddress {172.17.120.120192。168.37.120}
}

③ 设置一个virtual server段

virtual_server 172.17.120.120 80 {delay_loop 6lb_algo wrrlb_kind NATnat_mask 255.255.255.255persistence_timeout 120protocol TCP

④ 配置real server段

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

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

vim /etc/sysctl.confnet.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 BACKUPinterface eth1virtual_router_id 190priority 98advert_int 1authentication {auth_type PASSauth_pass keer}virtual_ipaddress {172.17.120.120192.168.37.120}
}

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

vim /etc/sysctl.confnet.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.htmlreal server 1

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

vim /data/web/test.htmlreal 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


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

转载于:https://www.cnblogs.com/keerya/p/7819970.html

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

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

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

  2. 基于keepalived实现多种模式的高可用集群网站架构

    一. 实现主从服务器高可用技术. 大概网络拓扑图: 前提准备条件: 准备四台机器,一台为keepalived的master,一台为keepalived的backup,一台为rs1,一台为rs2,同时都 ...

  3. keepalived高可用集群技术介绍及实战演练

    一.Keepalived是什么 Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务 ...

  4. 企业中MySQL高可用集群架构三部曲之MM+keepalived

    各位老铁们,老张与大家又见面了.看到各位在博客里面给我的留言和访问量的情况,我很是欣慰,也谢谢大家对我的认可.我写这些博客,就是想把自己对于MySQL数据库的一些看法和自己平时的实战经验分享出来,我们 ...

  5. nginx+keepalived高可用web架构

    nginx+keepalived高可用web架构 1.下载所需的软件包 (1).keepalived软件包keepalived-1.1.20.tar.gz (2).nginx软件包nginx-1.1. ...

  6. linux 双mysql_MySQL双主互备+Keepalived高可用架构实现案例

    一.环境介绍 1.1.规划 序号 类别 版本 主机名 IP 端口 备注 1 OS CentOS release 6.9 (Final) (minimal) my1 172.16.210.180 830 ...

  7. Redis基础与高可用集群架构进阶详解

    一.NoSQL简介 1.问题引入 每年到了过年期间,大家都会自觉自发的组织一场活动,叫做春运!以前我们买票都是到火车站排队,后来呢,有了 12306,有了它以后就更方便了,我们可以在网上买票,但是带来 ...

  8. 高可用 Redis 服务架构分析与搭建

    基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量 ...

  9. Keepalived高可用集群来实现web服务器负载均衡集群

    Keepalived高可用集群来实现web服务器负载均衡集群 一.Keepalived的介绍 Keepalived是一个提供HA重要的底层工具,最早期的作用是为ipvs提供HA功能的,还是一个可以提供 ...

  10. 高可用Redis服务架构分析与搭建

    作者:HorstXu 原文:https://www.cnblogs.com/xuning/p/8464625.html 基于内存的Redis应该是目前各种Web开发业务中最为常用的Key-Value数 ...

最新文章

  1. AtomicInteger原子性
  2. VTK:vtkCursor3D用法实战
  3. 个人编程思想理解的片段(主要是面向对象的,参考了许多人的观点,还不成熟,没形成系统,请大家多指点)...
  4. 使用Docker快速部署禅道V11.6版本
  5. Servlet容器如何处理请求资源路径
  6. X509证书中RSA公钥的提取与载入
  7. c++ opencv4.5.0 头文件_简单的C程序分析(first.c程序)
  8. 两行代码开启 Ubuntu ftp服务
  9. 电机FOC电流环参数整定
  10. Device owner调研
  11. ADO的七个对象详情解读
  12. RabbitMQ实现即时通讯
  13. 小老弟研发之路面筋大汇总——关于C/C++(三)
  14. Ubuntu16.04 安装NVIDIA英伟达驱动教程
  15. csdn博客使用反馈,bug
  16. Tomcat之点击startup.bat出现闪退的解决办法
  17. 本地maven仓库配置
  18. uni--ReferenceError plus is not defined
  19. js通过对象通过value找key
  20. Bi-LSTM-CRF命名实体识别实战

热门文章

  1. 关于man命令后面加数字
  2. 请确保dx环境安装正常后进行开播_虎牙直播助手常见问题汇总
  3. 【Python】如何在Python项目中使用相对路径正确的导入模块/包
  4. linux 围棋界面,围棋GUI界面Sabaki怎么用?
  5. C语言打印杨辉三角(C笔记)
  6. 非平衡数据(imbalanced data)简单介绍
  7. springboot批量更新实体_springboot快速集成swagger
  8. 卢卡奇总体性原则_读书笔记|卢卡奇物化与无产阶级意识无产阶级的立场(1)...
  9. matlab仿真环境运行,第7章 Simulink仿真环境.ppt
  10. 图像特征的匹配-OpenCV3.0