首页 > 系统相关 >linux集群 keepalived+nginx实现高可用集群

linux集群 keepalived+nginx实现高可用集群

时间:2024-09-25 13:20:58浏览次数:13  
标签:优先级 root keepalived nginx 集群 master backup

用keepalived配置高可用

搭建高可用集群

高可用集群,即“HA集群”,也常称作“双机热备”,用于关键业务。常见实现高可用的开源软件有heartbeat和keepalived,其中keepalived还有负载均衡的功能。这两个软件类似,核心原理都是通过心跳线连接两台服务器,正常情况下由一台服务器提供服务,当这台服务器宕机,备用服务器顶替。

Keepalived 工作原理

在讲述keepalived工作原理之前,大家先来了解一个协议VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)。它是实现路由高可用的一种通信协议,在这个协议里会将多台功能相同的路由器组成一个小组,这个小组里会有1个master(主)角色和N(N>=1)个backup(备用)角色。工作时 master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的master。

而keepalived就是采用这种VRRP协议实现的高可用。keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析; check模块负责健康检查;vrrp模块用来实现VRRP协议。

 1.基础准备

(1)准备两台机器

准备两台机器130和132,130作为master,132作为backup

Master:

Backup:

(2)改名

Master:

[root@localhost ~]# hostnamectl set-hostname master

[root@localhost ~]# bash

Backup:

[root@localhost ~]# hostnamectl set-hostname backup

[root@localhost ~]# bash

(3)安装yum源

在两台虚拟机上:

[root@master ~]# mkdir /opt/centos

[root@master ~]# mount /dev/cdrom /opt/centos

mount: /dev/sr0 写保护,将以只读方式挂载

[root@master ~]# mv /etc/yum.repos.d/* /media

[root@master ~]# vi /etc/yum.repos.d/local.repo

[centos7]

name=centos7

baseurl=file:///opt/centos

gpgcheck=0

enabled=1

(4)关闭防火墙

在两台虚拟机上:

[root@master ~]# setenforce 0

[root@master ~]# systemctl stop firewalld

2.安装keepalived

安装 keepalived 使用 yum 方式直接安装即可,该方式会自动安装依赖。安装 keepalived 命令:

[root@master ~]# yum -y install keepalived

   在两个节点上:

安装完成后可以输入 rpm -q -a keepalived 命令检验安装是否成功:

[root@backup ~]# rpm -q -a keepalived

通过 yum 方式安装的 keepalived 在安装完成之后,会在 /ect 目录下生成一个 keepalive 目录,该目录下存放着 keepalived 的配置文件 keepalived.conf :

[root@master ~]# cd /etc/keepalived/

[root@master keepalived]# ls

keepalived.conf

3.安装nginx

安装4个依赖

[root@backup ~]# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

有些系统还需要多安装几个依赖

[root@master ~]# yum -y install make gcc-c++ libtool

[root@backup ~]# yum -y install wget

[root@master ~]# wget http://nginx.org/download/nginx-1.13.7.tar.gz

[root@master ~]# tar -zxvf nginx-1.13.7.tar.gz

[root@backup ~]# cd nginx-1.13.7

[root@backup nginx-1.13.7]# ./configure --prefix=/usr/local/nginx

[root@backup nginx-1.13.7]# make && make install

修改nginx首页面内容为节点的ip地址,方便测试观察

[root@master nginx-1.13.7]# vi /usr/local/nginx/html/index.html

<body>

<h1>192.168.147.130</h1>

 4.启动nginx

[root@backup nginx-1.13.7]# cd /usr/local/nginx/sbin

[root@backup sbin]# ./nginx

防火墙开启80端口

[root@backup sbin]# firewall-cmd --permanent --add-port=80/tcp

FirewallD is not running

[root@backup sbin]# firewall-cmd --reload

FirewallD is not running

5.浏览器访问nginx

http://192.168.147.130

http://192.168.147.132

6.编辑配置文件

(1)编辑master(主)节点配置文件

[root@master ~]# vi /etc/keepalived/keepalived.conf

#全局配置

global_defs {

   notification_email {

     [email protected]

     [email protected]

     [email protected]

   }

   notification_email_from [email protected]

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

#路由id,不能重复,通常为hostname

   router_id 192.168.147.130

   vrrp_skip_check_adv_addr

   vrrp_strict

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}

#keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。

#如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。

#如果脚本执行结果为0,并且weight配置的值小于0,则优先级相应的减少。

#其他情况,维持原本配置的优先级,即配置文件中priority对应的值。

vrrp_script chk_nginx {

#检测nginx状态的脚本路径

    script "etc/keepalived/nginx_check.sh"

#每2秒运行一次上面的脚本

    interval 2

#失败一次,将自己的优先级-20,如果master的priority=100,backup的priority=70

#那么master要失败2次后变为60,低于backup的70,master节点会降级为backup,而backup节点升级为master

    weight -20

}

#定义实例

vrrp_instance VI_1 {

#可选值为master或者backup

    state MASTER

#网卡名称,与本机IP地址所在的网卡名称相同

    interface eth0

#虚拟路由的id,master和backup必须是一致的。

    virtual_router_id 51

#定义优先级,数字越大,优先级越高,master的优先级必须大于backup的优先级

    priority 100

#设定master与backup负载均衡之间同步检查的时间间隔,单位为秒

    advert_int 1

#设置验证类型和密码,两个节点必须一致

    authentication {

#认证方式,此处pass表示为密码

        auth_type PASS

#生产环境设置6位随机密码

        auth_pass 123456

    }

#设置虚拟IP地址

virtual_ipaddress {

        192.168.147.250

    }

#执行脚本

track_script {

#对应vrrp_script配置的脚本

    chk_nginx

    }

}

(2)编辑backup(备)节点配置文件

global_defs {

   notification_email {

     [email protected]

     [email protected]

     [email protected]

   }

   notification_email_from [email protected]

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

#路由id,不能重复,通常为hostname

   router_id 192.168.147.132

vrrp_script chk_nginx {

    script "/etc/keepalived/nginx_check.sh"

    interval 2

    weight -20

}

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 99

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 123456

}

track_script {

        chk_nginx

    }

(3)编写nginx状态检测脚本

[root@master ~]# vi /etc/keepalived/nginx_check.sh

#keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instabce的优先级。

#如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。

#如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少。

#其他情况,维持原本配置的优先级,即配置文件中priority对应的值。

result=`pidof nginx`

if [ ! -z "${result}" ];

then

   exit 0

else

   exit 1

fi

给脚本添加执行权限

[root@master ~]# chmod 755 /etc/keepalived/nginx_check.sh

[root@backup ~]# chmod 755 /etc/keepalived/nginx_check.sh

(4)开启组播防火墙

centos7放行组播地址224.0.0.18,协议vrrp

   [root@master ~]# firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT

success

[root@master ~]# firewall-cmd --reload

success

[root@master ~]# firewall-cmd --permanent --direct --get-all-rules

--direct:指定将要使用直接规则

--permanent:表示永久生效 ,没有此参数重启后失效

--add-rule ipv4 filter:表示添加一个新的策略

设置一条IPV4规则,表为防火墙表 :filter, 处理输入数据包 INPUT ,0 代表在头部添加。后面就是常用的iptables语法

--in-interface ens33:设置网卡名,这里我的网卡名是ens33

--destination 224.0.0.18:设置目标ip地址,也就是设置放行组播地址224.0.0.18

--protocol vrrp:设置拦截的协议

-j ACCEPT:表示放行,-j DROP表示丢弃(不放行)

(5)启动keepalived

启动

[root@master ~]# systemctl start keepalived.service

重启

[root@master ~]# systemctl restart keepalived.service

停止

[root@master ~]# systemctl stop keepalived.service

查看运行状态

[root@master ~]# systemctl status keepalived

查看运行进程

[root@master ~]# ps -ef|grep keepalived

Master(主)节点成功标志

[root@master ~]# ip addr

可以看到,192.168.147.130拿到了VIP192.168.147.250.

Backup(备)节点成功标志

[root@backup ~]# ip addr

Backup上只有192.168.147.132这个ip,正常。

注意:master节点正常的情况下,backup节点一定不会有浮动IP,也就是VIP只能同时在一个节点上。

(6)验证VIP漂移

我们先关闭master,验证VIP是否会飘移到backup上。

关闭master(主)节点的keepalived:

[root@master ~]# systemctl stop keepalived.service

可以看到,VIP已经没了。

VIP已经成功飘到backup节点上了。

7.keepalived+nginx的高可用测试

访问浮动VIP

http://192.168.147.250

正常情况下,浮动ip飘到master(主)节点上,所以访问后显示的主节点的nginx首页

如果杀掉 MASTER(主)节点的 nginx 。如果nginx进程不存在脚本返回1,nginx进程存在脚本返回0。

脚本返回0,表示nginx进程存在,由于上面配置的weight为负数,priority 不会改变。

脚本返回1,表示nginx进程不存在,由于上面配置的weight为负数,priority 会减少,减少后的值 priority = priority+weight

失败一次,将自己的优先级-20,我这里MASTER的priority=100,BACKUP的priority=99

那么MASTER要失败1次后变为80,低于BACKUP的99,MASTER节点会降级为BACKUP,而BACKUP节点升级为MASTER

提示:以上脚本判断推出码是0还是1,正常退出时0,非正常退出为1;

退出码1就把对应节点的优先级降低20(通常这个降低的值要大于两节点优先级之差就行,意思就是降低后的优先级要小于备份节点优先级,这样才有意义);

脚本执行连续3次检测都为成功状态(脚本退出码都为0),则keepalived就标记该实例为OK状态,并会一直检测下去,

如果连续3次检查都为失败状态(退出码1),则标记对应实例为KO状态;

一旦标记对应实例为失败状态就会触发当前节点的优先级降低;

从而在通告心跳时,会通告降低后的优先级,从而实现备份节点接管VIP来完成vip转移。

杀掉master(主)节点的nginx后,再次访问VIP

8.常见错误

●keepalived 配置了虚拟ip,发现无法ping 通这个虚拟ip。

解决方法,把配置文件中的 vrrp_strict 给注释掉,重启 keepalived 服务后再次ping就可以了。

●网卡名称与本机ip地址所在的网卡名称一点要一致。

●配置优先级的时候,一点要区分开,否则验证的时候会区分不开。

●测试的时候,如果关闭nginx服务,虚拟ip还是在master上,那就是由于脚本的设计,关闭nginx后服务又自动起来了,可以把脚本这一行注释掉即可。

●关闭nginx服务可以注释脚本也可以把nginx的配置打乱或故意写错都可以解决这个问题。

标签:优先级,root,keepalived,nginx,集群,master,backup
From: https://blog.csdn.net/Gao0Yuu/article/details/142387310

相关文章

  • MongoDB 双活集群在运营商的实践
    在现代电信行业中,订单中心作为核心业务系统之一,承担着处理客户订单、管理订单状态、与各个业务系统进行交互等重要职责。其订单中心的高效运作直接关系到客户体验和业务连续性。为了满足不断增长的业务需求和日益复杂的运营环境,运营商需要自身的订单中心架构具备高可用性及强大的......
  • Nginx 在处理大规模分布式系统时有哪些性能优化技巧?
    在处理大规模分布式系统时,Nginx可以通过多种方式进行性能优化。以下是一些有效的性能优化技巧:优化Worker进程与连接数:根据服务器的CPU核数设置worker_processes参数,通常设置为自动检测或等于CPU核心数。调整worker_connections参数,以确定每个worker进程能处理的最大连......
  • 四款负载均衡工具Nginx、HAProxy、MetalLB、gobetween 比较
    以下是对Nginx、HAProxy、MetalLB和gobetween四个开源负载均衡工具的详细对比与分析:Nginx:优点:工作在网络的7层之上,可以针对HTTP应用做一些分流策略,如基于域名、目录结构分流。对网络稳定性依赖小,理论上能ping通就能进行负载均衡。安装和配置简单,有清晰的日志用于排查和管理。支持......
  • 大数据-142 - ClickHouse 集群 副本和分片 Distributed 附带案例演示
    点一下关注吧!!!非常感谢!!持续更新!!!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(正在更新···)章节内容上节我们完成了如下的内容:副本和分片,上节主要是......
  • # 高可用的并发解决方案nginx+keepalived(三)
    高可用的并发解决方案nginx+keepalived(三)一、Nginx搭建图片服务器针对任何站点,几乎都要访问图片,而一个网页里面几乎有好些张图片,这时候会占据大量tomcat连接,造成大量并发,我们可以通过Nginx配置直接访问硬盘里的图片,绕开tomcat。1、在CentOS7服务器上,创建/usr/local/im......
  • nginx - - - Windows 使用手册
    1.安装nginx官网:https://nginx.org/nginx下载页面:https://nginx.org/en/download.html下载稳定版压缩包解压,就安装完成了。下载地址:https://nginx.org/download/nginx-1.26.2.zip解压:2.修改配置文件修改nginx.conf文件。3.运行打开nginx.exe安装目录,在资源管理器......
  • 阿里云ecs使用nginx部署mqtt服务的tcp转发
    一、什么是MQTT?MQTT(MessageQueuingTelemetryTransport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通信。二、为什么MQTT是适用于物联网的最......
  • ESXI主机加入VCENTER现有集群提示出现常规性错误
    背景:由于忘记了这台主机的root密码,所以在迁移完虚拟机后给这台主机重新安装了操作系统,装完操作系统加集群提示如下报错:查阅了一些资料后发现主机的CPU是一样的,不需要开EVC;也有一些说需要改这个配置文件,改了也没有生效检查VCENTER和ESXI系统时间也正常经过网络测试发现......
  • HAproxy,nginx实现负载均衡
    环境准备:192.168.88.25 (client)192.168.88.26  (HAproxy)192.168.88.27   (web1)192.168.88.28    (web2)192.168.88.29   (php1)192.168.88.30    (php2)关闭firewalld,selinux。配置yum源,扩展源epel-release实验1一、web1,web21、下载httpd......
  • 大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他
    点一下关注吧!!!非常感谢!!持续更新!!!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(正在更新···)章节内容上节我们完成了如下的内容:MergeTree实测案例Re......