首页 > 其他分享 >使用Keepalived工具实现集群节点的高可用

使用Keepalived工具实现集群节点的高可用

时间:2022-12-21 15:24:07浏览次数:70  
标签:15 1.2 Keepalived keepalived nginx 集群 root 节点 localhost

  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  • GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。
  • 作者:蟹黄瓜子
  • 文章来源:社区投稿

1.前言

在集群当中离不开的一个词就是是高可用,用本文来简单聊聊Keepalived是什么、Keepalived如何实现高可用、Keepalived的使用场景。

  • 首先,假设一个应用场景,内网有一台tomcat服务器,随着业务的增加、流量的增加一台tomcat服务器就变得不够用了,因此需要增加多台tomcat服务器,他们拥有相同的业务处理能力,为了可以统一对这些tomcat的访问同时更好地调度到不同的tomcat完成业务,可以添加一台nginx服务器。它的作用是为内网中的多台tomcat服务器提供负载均衡的动态访问,通过nginx,我们可以以不同的调度方式来到不同的tomcat来进行下一步的操作。
  • 但这种模式是十分脆弱的,如果此时nginx宕机了,tomcat服务器就都访问不了了,假设也增加一台nginx赋予这台nginx相同的业务能力,那就又涉及到了这个问题,它需要一个统一的入口,如果在这两台nginx服务器的前面再放一台nginx或者是一台lvs服务器做这两台nginx的调度,只会使得这种部署方案进入一个死循环,变成一个无解的答案。
  • 可以试着换一种思路,我就让这台nginx作为主机进行工作,同时为这台nginx准备一台备机,当主机宕机了,这台备机就可以及时顶替主机的工作。当然还需要考虑到这两台服务器是不同的ip,客户访问的是主机,怎么变成访问备机呢?如果要把备机的ip“换成主机的”显然不可取,有可能主机只是过热的短暂故障,如果ip被备机使用了,主机又突然恢复了,这个时候问题又出现了,因此,我们需要使用一个虚拟ip。

因此,实现的效果应是一主一备,主机宕机备机上线提供服务,不可能同时提供服务。访问业务通过的入口为vip,因此我们引入Keepalived,让其跑在两台nginx上,达到Keepalived之间的相互通信,检测心跳,如果主机宕机,Kpalived就将主机的vip漂移到备机上,这样就可以实现不需要关注这两台nginx的具体ip地址是多少就可以实现来者之间高可用的切换。至于宕机的服务器恢复以后重新上线是否作为主机就要根据配置文件里面的优先级进行竞选。

2.Kepalived介绍

Keepalived是一款保证集群高可用的一个服务软件,用来防止单点故障。Kepalived是以VRRP(Virtual Router Redundancy Protocol)协议(虚拟路由冗余协议)为实现基础的。

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

3.Keepalived部署

假设nginx服务器为192.168.1.1、192.168.1.2,vip为192.168.1.200:

为机子安装环境,采用yum源安装:

[root@localhost ~]# yum -y install kernel-devel*
[root@localhost ~]# yum -y install openssl-*
[root@localhost ~]# yum -y install popt-devel
[root@localhost ~]# yum -y install lrzsz
[root@localhost ~]# yum -y install openssh-clients
[root@localhost ~]# yum -y install libnl libnl-devel popt
[root@localhost ~]# yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
  • 进入/usr/local/目录:
[root@localhost ~]# cd /usr/local/
  • 把下载“keepalived-1.2.15.tar.gz”放入目录下,解压:
[root@localhost local]# tar zxvf keepalived-1.2.15.tar.gz
  • 进入目录:
[root@localhost local]# cd keepalived-1.2.15/
[root@localhost keepalived-1.2.15]# 
  • 通过configure进行安装:
[root@localhost keepalived-1.2.15]# ./configure --prefix=/usr/local/keepalived
  • 进行编译安装:
[root@localhost keepalived-1.2.15]# make
[root@localhost keepalived-1.2.15]# make install
  • 拷贝执行文件:
[root@localhost keepalived-1.2.15]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  • 将init.d文件拷贝到etc下,加入开机启动项:
[root@localhost keepalived-1.2.15]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/keepalived
  • 将keepalived文件拷贝到etc下,加入网卡配置:
[root@localhost keepalived-1.2.15]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  • 创建keepalived文件夹,将keepalived配置文件拷贝到etc下:
[root@localhost keepalived-1.2.15]# mkdir -p /etc/keepalived
[root@localhost keepalived-1.2.15]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
  • 添加可执行权限,同时加入开机启动:
[root@localhost keepalived-1.2.15]# chmod +x /etc/init.d/keepalived
# 添加时必须保证/etc/init.d/keepalived存在
[root@localhost keepalived-1.2.15]# chkconfig --add keepalived
[root@localhost keepalived-1.2.15]# chkconfig keepalived on
# 添加完可查询系统服务是否存在
[root@localhost keepalived-1.2.15]# chkconfig --list
  • 使用:
启动:service keepalived start
停止:service keepalived stop
重启:service keepalived restart
  • 将keepalived日志输出到local0:
[root@localhost keepalived-1.2.15]# vi /etc/sysconfig/keepalived

# 添加:
KEEPALIVED_OPTIONS="-D -d -S 0"
  • .在/etc/rsyslog.conf里添加配置:
[root@localhost keepalived-1.2.15]# vi /etc/rsyslog.conf
# 内容:
local0.*  /var/log/keepalived.log
  • 重新启动keepalived和rsyslog服务后配置防火墙通讯地址:
[root@localhost keepalived-1.2.15]# service rsyslog restart
[root@localhost keepalived-1.2.15]# service keepalived restart
  • 主机配置文件:
! Configuration File for keepalived

global_defs {
   router_id NG_DEVEL1
}

vrrp_instance NG {
    # 标示为主nginx
    state MASTER
    # HA检测端口,查看主机服务器的网卡
    interface eth33
    # 主备上的id必须相同
    virtual_router_id 51
    # 配置优先级,本示例备机比主机优先级小
    priority 100
    # VRRP Multicast 广播周期秒数
    advert_int 1
    # 定义认证
    authentication {
        # 认证方式为口令认证
        auth_type PASS
        # 定义口令
        auth_pass 1111
    }
    # 定义vip,可以设置多个
    virtual_ipaddress {
        192.168.1.200
    }
}
  • 备机配置文件:
! Configuration File for keepalived

global_defs {
   router_id NG_DEVEL2
}

vrrp_instance NG {
    # 标示为备nginx
    state BACKUP
    # HA检测端口,查看主机服务器的网卡
    interface eth33
    # 主备上的id必须相同
    virtual_router_id 51
    # 配置优先级,本示例备机比主机优先级小
    priority 50
    # VRRP Multicast 广播周期秒数
    advert_int 1
    # 定义认证
    authentication {
        # 认证方式为口令认证
        auth_type PASS
        # 定义口令
        auth_pass 1111
    }
    # 定义vip,可以设置多个
    virtual_ipaddress {
        192.168.1.200
    }
}
  • 重启服务:
[root@localhost keepalived-1.2.15]# service keepalived restart
  • 可以进行简单的测试,当主机宕机后,vip成功漂移到备机

4.结语

Keepalived的使用不止局限于nginx,他的作用是作用于服务器,去检测服务器来实现单点访问的高可用,因此可以使用keepalived的场景就十分丰富了,lvs可以使用,也可以通过keepalived来实现MySQL的双主模式切换,也可以设置多个vip绑定在不同的机器上,通过dns轮询的方式访问vip,如果发生宕机就把宕机的主机vip漂移到其他主机上。在由文章中的模拟实验环境搭建可以参考上一篇文章《搭建基于lvs+nginx的负载均衡服务集群》。

keepalived的原理其实很简单就是通过服务器上的keepalived进程进行相互通信,这个时候需要注意,假设服务器没有宕机但是服务器的业务报错了,这个时候没有实现切换,可以写相应的运维脚本,通过脚本检测当前的业务是否出现错误,出现错误就将keepalived进程kill掉来实现切换。这里就不继续展开了。


Enjoy GreatSQL

标签:15,1.2,Keepalived,keepalived,nginx,集群,root,节点,localhost
From: https://www.cnblogs.com/greatsql/p/16996331.html

相关文章

  • kafka集群配置文件修改
    broker.id=2listeners=PLAINTEXT://192.168.49.222:9092#每个节点的host不同,默认是注释的log.dirs=/opt/module/kafka/datas#自定义路径zookeeper.connect=192.168......
  • Keepalived监测脚本一直不执行
    Keepalived监测脚本一直不执行今天在搭建Nginx+Keepalived集群时,启动Keepalievd发现检查脚本不执行,脚本本身是没有问题的。1.1监测脚本脚本如下:A=`ps-Cnginx--no-header......
  • Web集群案例实战 -- Nginx 反向代理 -- 案例实战
    Nginx反向代理--案例实战​​前言​​前言本环境是基于Centos7.8系统构建Nginx学习环境具体构建,请参考​​Nginx-1.18.0环境部署​​环境准备rolehostipnginx-vers......
  • Web集群案例实战 -- Nginx 负载均衡 -- 案例实战
    Nginx负载均衡--案例实战​​前言​​前言本环境是基于Centos7.8系统构建Nginx学习环境具体构建,请参考​​Nginx-1.18.0环境部署​​环境准备rolehostipnginx-vers......
  • Web集群案例实战 -- Nginx 负载均衡 之 客户端访问日志优化
    Nginx负载均衡之客户端访问日志优化​​前言​​前言本环境是基于Centos7.8系统构建Nginx学习环境具体构建,请参考​​Nginx-1.18.0环境部署​​Nginx在做反向代理......
  • [js] 树结构查找节点,深度优先
    查找节点其实就是一个遍历的过程,遍历到满足条件的节点则返回,遍历完成未找到则返回null。类似数组的find方法,传入一个函数用于判断节点是否符合条件,代码如下:functiontreeFin......
  • Docker高级篇:实战Redis集群!从3主3从变为4主4从
    通过前面两篇,我们学会了三主三从的Redis集群搭建及主从容错切换迁移,随着业务增加,可能会有主从扩容的,所以,本文我们来实战主从扩容PS本系列:《Docker学习系列》教程已经发布......
  • #yyds干货盘点# LeetCode程序员面试金典:节点间通路
    题目:节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。示例1:输入:n=3,graph=[[0,1],[0,2],[1,2],[1,2]],start=0,target=2输出:tr......
  • Spark远程集群实现
    内容简介本篇文章主要讲述了Springboot项目和Spark相结合的方法。在Spark的学习过程中,我们大多数提交作业的方式都是使用Spark的命令来提交jar包并运行,但是本次相反,我们......
  • tomcat优化-有改protocol 和 缓存 集群方案
     tomcat优化在线上环境中我们是采用了tomcat作为Web服务器,它的处理性能直接关系到用户体验,在平时的工作和学习中,归纳出以下七种调优经验。1.服务器资源  服务器所能提......