一、前言

前两节分别介绍了 Linux 的高可用集群和负载均衡集群,也可以将这两者相结合,即 Keepalived+LVS 组成的高可用负载均衡集群,Keepalived 加入到 LVS 中的原因有以下几点:

1)LVS 拥有一个很关键的角色 Dir(分发器),如果分发器宕机,所有的服务和访问都将会中断。因为入口全部都在 Dir 上,所以需要对分发器做高可用,使用 Keepalived 来实现高可用,Keepalived 其实也具有负载均衡的作用。

2)在使用 LVS 时,如果没有其他额外的操作,把其中一个 Real Server 关机,再去访问是会出现问题的,因为 LVS 依然会把请求转发给已经宕机的服务器,Keepalived 的出现 就可以解决这个问题,即使有一台 Real Server 宕机了,它也能正常提供服务,当请求分发过来时它能够自动检测到后端的 Real Server 宕机,就不会再把请求继续转发到有问题的 Real Server 上。

一个完整的 Keepalived+LVS 架构至少需要有两台调度器(角色为 Dir),分别安装 Keepalived 来实现高可用。Keepalived 内置了 ipvsadm 功能,所以不需要再安装 ipvsadm 包,也不用编写和执行 lvs_dir.sh 脚本。

二、创建 Keepalived+LVS 高可用负载均衡集群

以下使用 Keepalived+LVS 来实现高可用负载均衡集群。

2.1 准备集群节点

准备4台服务器,其中两台作为主备分发器(也叫作调度器,简称 Dir),均安装 Keepalived 服务,另外两台是 Real Server,均安装 nginx 服务,用作处理用户请求的服务器。

主机名 masternode:主调度器,网卡 IP 是 192.168.93.140 是内网(VMWare 网络地址转换 NAT)。

主机名 backupnode:备用调度器,网卡 IP 是 192.168.93.139 是内网(VMWare 网络地址转换 NAT)。

主机名 datanode1:Real Server 1,IP 为 192.168.93.141。

主机名 datanode2:Real Server 2,IP 为 192.168.93.142。

VIP:192.168.93.200

为4台服务器分别设置好 IP 地址和主机名,并关闭防火墙。

2.2 设置 master 主服务器的 Keepalived

编辑配置文件 /etc/keepalived/keepalived.conf,设置为如下内容:

[root@masternode keepalived]# vim /etc/keepalived/keepalived.conf
! Configuration File for master node keepalivedglobal_defs {notification_email {admin@moonxy.com}notification_email_from root@moonxy.comsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVEL
}vrrp_instance VI_1 {state MASTER#绑定VIP的网卡为ens33interface ens33virtual_router_id 51#设置主服务器优先级为100priority 100advert_int 1authentication {auth_type PASSauth_pass moonxy}virtual_ipaddress {192.168.93.200}
}virtual_server 192.168.93.200 80 {#每隔10秒钟检查一次Real Server状态delay_loop 6#LVS 负载均衡算法lb_algo rr#LVS DR 模式lb_kind DR#同一个IP的连接多少秒内被分配到同一台Real Server上,此处设置为0persistence_timeout 0#用TCP协议检查Real Server状态protocol TCPreal_server 192.168.93.141 80 {#权重weight 100TCP_CHECK {#10秒无响应超时connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 80}}real_server 192.168.93.142 80 {#权重weight 100TCP_CHECK {#10秒无响应超时connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 80}}
}

主服务器好的配置文件和备份服务器的配置文件的设置基本相同,将 state 设置为 BACKUP,将 priority 设置为 90

2.3 设置 backup 备份服务器的 Keepalived

编辑配置文件 /etc/keepalived/keepalived.conf,设置为如下内容:

[root@backupnode keepalived]# vim /etc/keepalived/keepalived.conf
! Configuration File for master node keepalivedglobal_defs {notification_email {admin@moonxy.com}notification_email_from root@moonxy.comsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVEL
}vrrp_instance VI_1 {state BACKUP#绑定VIP的网卡为ens33interface ens33virtual_router_id 51#设置备用服务器优先级为90priority 90advert_int 1authentication {auth_type PASSauth_pass moonxy}virtual_ipaddress {192.168.93.200}
}virtual_server 192.168.93.200 80 {#每隔10秒钟检查一次Real Server状态delay_loop 6#LVS 负载均衡算法lb_algo rr#LVS DR 模式lb_kind DR#同一个IP的连接多少秒内被分配到同一台Real Server上,此处设置为0persistence_timeout 0#用TCP协议检查Real Server状态protocol TCPreal_server 192.168.93.141 80 {#权重weight 100TCP_CHECK {#10秒无响应超时connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 80}}real_server 192.168.93.142 80 {#权重weight 100TCP_CHECK {#10秒无响应超时connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 80}}
}

如果在之前执行过 LVS 的脚本,需要提前执行一些操作:

# ipvsadm -C

# systemctl restart network

或者可重启调度服务器。

2.4 启动相关服务

在 masternode 和 backupnode 上面分别启动 keepalived 服务,如下:

masternode:

[root@masternode log]# systemctl start keepalived
[root@masternode log]# ps aux |grep keepalived
root       7204  0.0  0.1 122876  1368 ?        Ss   00:46   0:00 /usr/sbin/keepalived -D
root       7205  0.0  0.3 133840  3360 ?        S    00:46   0:00 /usr/sbin/keepalived -D
root       7206  0.0  0.2 133776  2636 ?        S    00:46   0:00 /usr/sbin/keepalived -D
root       7215  0.0  0.0 112708   980 pts/0    R+   00:58   0:00 grep --color=auto keepalived
[root@masternode log]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:3b:90:07 brd ff:ff:ff:ff:ff:ffinet 192.168.93.140/24 brd 192.168.93.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.93.200/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::1bb9:5b87:893c:e112/64 scope link noprefixroutevalid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:3b:90:11 brd ff:ff:ff:ff:ff:ffinet 192.168.150.140/24 brd 192.168.150.255 scope global noprefixroute ens37valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe3b:9011/64 scope linkvalid_lft forever preferred_lft forever
[root@masternode log]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.93.200:80 rr-> 192.168.93.141:80            Route   100    0          0-> 192.168.93.142:80            Route   100    0          0

backupnode:

[root@backupnode keepalived]# systemctl start keepalived
[root@backupnode keepalived]#  ps aux |grep keepalived
root       7185  0.0  0.1 122876  1376 ?        Ss   00:47   0:00 /usr/sbin/keepalived -D
root       7186  0.0  0.3 133840  3364 ?        S    00:47   0:00 /usr/sbin/keepalived -D
root       7187  0.0  0.2 133776  2640 ?        S    00:47   0:00 /usr/sbin/keepalived -D
root       7189  0.0  0.0 112708   980 pts/0    S+   00:47   0:00 grep --color=auto keepalived
[root@backupnode keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:88:29:9b brd ff:ff:ff:ff:ff:ffinet 192.168.93.139/24 brd 192.168.93.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::8055:62bc:4a07:d345/64 scope link tentative noprefixroute dadfailedvalid_lft forever preferred_lft foreverinet6 fe80::1bb9:5b87:893c:e112/64 scope link tentative noprefixroute dadfailedvalid_lft forever preferred_lft foreverinet6 fe80::8cac:8f3b:14b2:47ae/64 scope link noprefixroutevalid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:88:29:a5 brd ff:ff:ff:ff:ff:ffinet 192.168.150.139/24 brd 192.168.150.255 scope global noprefixroute ens37valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe88:29a5/64 scope linkvalid_lft forever preferred_lft forever
[root@backupnode keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.93.200:80 rr-> 192.168.93.141:80            Route   100    0          0-> 192.168.93.142:80            Route   100    0          0

可以看到此时 VIP:192.168.93.200 绑定在了 masternode 的网卡 ens33 上。

由于在 Keepalived 的配置文件中定义的 LVS 模式为 DR,所以还需要在两台 RS 上分别执行 lvs_rs.sh 脚本,这与上一节的脚本相同,如下:

[root@datanode1 sbin]# service nginx start
Redirecting to /bin/systemctl start nginx.service
[root@datanode1 sbin]# sh /usr/local/sbin/lvs_rs.sh
......
[root@datanode2 sbin]# service nginx start
Redirecting to /bin/systemctl start nginx.service
[root@datanode2 sbin]# sh /usr/local/sbin/lvs_rs.sh

相关服务启动完毕之后,可执行测试。

2.5 测试高可用负载均衡集群

在宿主机上请求 VIP 地址:192.168.93.200,如下:

可以看到实现了负载均衡的效果。

1)测试关闭两台调度器中的 maternode 主调度器

再来看看分发器的高可用,关闭 masternode 主分发器,如下:

可以看到 masternode 已经解除了 VIP 地址的绑定,backupnode 自动绑定了这个 VIP,如下:

再次请求 VIP 地址,如下正常显示:

2)测试关闭 Real Server 中的 datanode2 的 nginx 服务

现在我们再关闭 RS 中的 datanode2 的 nginx,如下:

访问 VIP 地址,看到了 Keepalived 已经自动将所有请求都转发到了 datanode1 上面了,如下:

ipvsadm 转发规则会自动将 "删除" datanode2,如下:

3)测试再次启动 Real Server 中的 datanode2 的 nginx

如果再次启动 datanode2 上面的 nginx 服务,此时 ipvsadm 又会自动添加其转发规则,如下:

访问 VIP,如下:

可以发现 Keepalived 功能确实很强大。

转载于:https://www.cnblogs.com/cnjavahome/p/11318691.html

Linux 笔记 - 第十八章 Linux 集群之(三)Keepalived+LVS 高可用负载均衡集群相关推荐

  1. IPVS-DR+keepalived实现高可用负载均衡集群

    IPVS-DR+keepalived高可用负载均衡集群方案前端的负载调度器采用双机热备方式,Keepalived主要用来监测RealServer的健康状态以及主负载均衡器和备份负载均衡器之间的故障转移 ...

  2. RabbitMQ:使用Docker构建RabbitMQ高可用负载均衡集群

    目录 一.构建RabbitMQ集群 1. 启动多个RabbitMQ节点 2. 加入集群 3. 配置镜像队列 二.HAProxy负载均衡 1. 安装HAProxy 2. 配置HAProxy 3. 启动 ...

  3. RHCS套件实现高可用负载均衡集群(三)——共享存储

    注:此博文在博文"RHCS套件实现高可用负载均衡集群(二)"的基础上完成 实验开始前设置实验环境 target端配置--server3 [root@server3 ~]# yum ...

  4. Keepalived+Nginx实现高可用负载均衡集群

    转载自 https://www.cnblogs.com/mrlapulga/p/6857294.html 一 环境介绍 1.操作系统 CentOS Linux release 7.2.1511 (Co ...

  5. Linux下部署lvs+keepalived实现高可用负载均衡

    lvs+keepalived是什么? keepalived工作原理 keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障. keepalive ...

  6. keepalive+nginx实现负载均衡高可用_超详细的LVS+keepalived+nginx实现高性能高可用负载均衡集群教程...

    概述 前面已经介绍了前两部分内容,下面主要介绍在nginx服务器方面的配置和测试整个集群是否可用. 在realserver端配置VIP 1.两台nginx服务器都要执行下面脚本: #vi /etc/r ...

  7. RHCS套件实现高可用负载均衡集群(二)——Fence设备

    注:此博文在博文"套件实现高可用负载均衡集群(一)"的基础上完成 环境: 物理机:172.25.54.250,作为fence server1:172.25.54.1 , serve ...

  8. LVS+keepalived高可用负载均衡集群部署(一) ----数据库的读写分离

    l  系统环境: RHEL7 l  硬件环境:虚拟机 l  项目描述:为解决网站访问压力大的问题,需要搭建高可用.负载均衡的 web集群. l  架构说明:整个服务架构采用功能分离的方式部署.后端采用 ...

  9. 汇总-13台虚拟机搭建一个高可用负载均衡集群架构

    要求 用13台虚拟机搭建一个高可用负载均衡集群架构出来,并运行三个站点,具体需求如下. 设计你认为合理的架构,用visio把架构图画出来 搭建lnmp.tomcat+jdk环境 三个站点分别为:dis ...

最新文章

  1. JAVA中的垃圾回收机制以及其在android开发中的作用
  2. 《评人工智能如何走向新阶段》后记(再续1)
  3. 扎心!程序员旅行却只能紧紧抱着电脑加班?
  4. Grpc+Grpc Gateway实践二 有些复杂的Hello World
  5. 倒计时 时间校准android,android倒计时器时间
  6. 该文件夹包含名称过长且无法放入回收站的项目_微软复活20年前生产力工具PowerToys,填补Win10缺失功能,开源且免费...
  7. 线程被中断跟被阻塞有什么区别_宠物加盟店跟自营店有什么区别
  8. 完美解决xhost +报错: unable to open display 装oracle的时候总是在弹出安装界面的时候出错...
  9. java是否安装outlook,Java程序定期检查ms Outlook是否有新邮件
  10. 采用python的pyquery引擎做网页爬虫,进行数据分析
  11. 基于PHP+MySQL游戏商城销售网站的设计与实现
  12. 什么是生命?演讲原稿
  13. Mind map of holistic learning by Scott Young
  14. HDU - 4960 Another OCD Patient 记忆化
  15. 软件测试显卡最高清晰度,硬件碾压机再临? GTA5显卡性能全测试
  16. tipask火车头采集器文章和提问发布模块|非免登录
  17. numpy找非零元素并计数 numpy.nonzero 和 numpy.count_nonzero
  18. PHP - 命名空间(namespace)概述及实例说明
  19. 个人主页博客网页设计制作HTML5+CSS大作业——个人相册展示留言博客模板(6页) 简单个人网页制作
  20. 魔方世界服务器文件,魔方世界服务器补丁

热门文章

  1. 机器学习(MACHINE LEARNING)MATLAB模拟排队论
  2. python【蓝桥杯vip练习题库】BASIC-14 时间转换(取余 水题)
  3. qsql 关联_(十八)链接数据库,QSqlTableModel
  4. 网络营销中SEO是最常用的“圈粉”引流方式之一
  5. 当下网络营销市场中为何企业可通过网络营销提升自我价值?
  6. 浅析网站如何才能最大化获得用户访问量?
  7. 网站优化中站点为什么会出现404页面?
  8. 浅析充分挖掘网站外链发挥SEO优化作用的4点技巧!
  9. linux命令匹配path顺序,PATH 中的路径先后顺序的问题
  10. python 函数进阶_Python学习入门基础:一篇文章搞定函数基础、函数进阶