Linux 笔记 - 第十八章 Linux 集群之(三)Keepalived+LVS 高可用负载均衡集群
一、前言
前两节分别介绍了 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 高可用负载均衡集群相关推荐
- IPVS-DR+keepalived实现高可用负载均衡集群
IPVS-DR+keepalived高可用负载均衡集群方案前端的负载调度器采用双机热备方式,Keepalived主要用来监测RealServer的健康状态以及主负载均衡器和备份负载均衡器之间的故障转移 ...
- RabbitMQ:使用Docker构建RabbitMQ高可用负载均衡集群
目录 一.构建RabbitMQ集群 1. 启动多个RabbitMQ节点 2. 加入集群 3. 配置镜像队列 二.HAProxy负载均衡 1. 安装HAProxy 2. 配置HAProxy 3. 启动 ...
- RHCS套件实现高可用负载均衡集群(三)——共享存储
注:此博文在博文"RHCS套件实现高可用负载均衡集群(二)"的基础上完成 实验开始前设置实验环境 target端配置--server3 [root@server3 ~]# yum ...
- Keepalived+Nginx实现高可用负载均衡集群
转载自 https://www.cnblogs.com/mrlapulga/p/6857294.html 一 环境介绍 1.操作系统 CentOS Linux release 7.2.1511 (Co ...
- Linux下部署lvs+keepalived实现高可用负载均衡
lvs+keepalived是什么? keepalived工作原理 keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障. keepalive ...
- keepalive+nginx实现负载均衡高可用_超详细的LVS+keepalived+nginx实现高性能高可用负载均衡集群教程...
概述 前面已经介绍了前两部分内容,下面主要介绍在nginx服务器方面的配置和测试整个集群是否可用. 在realserver端配置VIP 1.两台nginx服务器都要执行下面脚本: #vi /etc/r ...
- RHCS套件实现高可用负载均衡集群(二)——Fence设备
注:此博文在博文"套件实现高可用负载均衡集群(一)"的基础上完成 环境: 物理机:172.25.54.250,作为fence server1:172.25.54.1 , serve ...
- LVS+keepalived高可用负载均衡集群部署(一) ----数据库的读写分离
l 系统环境: RHEL7 l 硬件环境:虚拟机 l 项目描述:为解决网站访问压力大的问题,需要搭建高可用.负载均衡的 web集群. l 架构说明:整个服务架构采用功能分离的方式部署.后端采用 ...
- 汇总-13台虚拟机搭建一个高可用负载均衡集群架构
要求 用13台虚拟机搭建一个高可用负载均衡集群架构出来,并运行三个站点,具体需求如下. 设计你认为合理的架构,用visio把架构图画出来 搭建lnmp.tomcat+jdk环境 三个站点分别为:dis ...
最新文章
- JAVA中的垃圾回收机制以及其在android开发中的作用
- 《评人工智能如何走向新阶段》后记(再续1)
- 扎心!程序员旅行却只能紧紧抱着电脑加班?
- Grpc+Grpc Gateway实践二 有些复杂的Hello World
- 倒计时 时间校准android,android倒计时器时间
- 该文件夹包含名称过长且无法放入回收站的项目_微软复活20年前生产力工具PowerToys,填补Win10缺失功能,开源且免费...
- 线程被中断跟被阻塞有什么区别_宠物加盟店跟自营店有什么区别
- 完美解决xhost +报错: unable to open display 装oracle的时候总是在弹出安装界面的时候出错...
- java是否安装outlook,Java程序定期检查ms Outlook是否有新邮件
- 采用python的pyquery引擎做网页爬虫,进行数据分析
- 基于PHP+MySQL游戏商城销售网站的设计与实现
- 什么是生命?演讲原稿
- Mind map of holistic learning by Scott Young
- HDU - 4960 Another OCD Patient 记忆化
- 软件测试显卡最高清晰度,硬件碾压机再临? GTA5显卡性能全测试
- tipask火车头采集器文章和提问发布模块|非免登录
- numpy找非零元素并计数 numpy.nonzero 和 numpy.count_nonzero
- PHP - 命名空间(namespace)概述及实例说明
- 个人主页博客网页设计制作HTML5+CSS大作业——个人相册展示留言博客模板(6页) 简单个人网页制作
- 魔方世界服务器文件,魔方世界服务器补丁
热门文章
- 机器学习(MACHINE LEARNING)MATLAB模拟排队论
- python【蓝桥杯vip练习题库】BASIC-14 时间转换(取余 水题)
- qsql 关联_(十八)链接数据库,QSqlTableModel
- 网络营销中SEO是最常用的“圈粉”引流方式之一
- 当下网络营销市场中为何企业可通过网络营销提升自我价值?
- 浅析网站如何才能最大化获得用户访问量?
- 网站优化中站点为什么会出现404页面?
- 浅析充分挖掘网站外链发挥SEO优化作用的4点技巧!
- linux命令匹配path顺序,PATH 中的路径先后顺序的问题
- python 函数进阶_Python学习入门基础:一篇文章搞定函数基础、函数进阶