keepalive+vip+nginx方式实现高可用集群系统

Java工具 潘老师 2年前 (2022-08-17) 2260 ℃ (0) 扫码查看

在最近的开发的一个子系统需要用到一主一备的集群架构,为了实现高可用,直接采用了简单的keepalive+vip的方式来实现,通过虚拟ip对外统一给客户端访问,前端代码部署在nginx服务器中,其中部分架构如下图:
一主一备的集群架构
这里潘老师主要为了演示下keepalive等相关环境搭建和验证vip的地址漂移是否有效,特此记录如下。

环境规划

首先准备两台虚拟机,我这里是基于centos7系统的虚机,配置如下:

主机名 系统 IP 主备
master centos7 192.168.91.100
node1 centos7 192.168.91.101

安装centos可以参考:Vmware安装Centos7图文教程详解,快速搭建Linux系统
另外需要保证主从服务器时间同步,如果不同步可以参考如下文章:主从服务器节点通过NTP方式实现时间同步

安装配置Nginx

这里我们在主备服务器上分别安装Nginx服务器,安装方式参考:Linux系统安装与配置Nginx服务器

为了后续方便知道具体是访问了哪一个nginx服务器,我们修改nginx的欢迎页内容如下:

#进入nginx下html目录,修改index.html
vi index.html
#在标题上加上该节点的IP地址,比如主节点
Welcome to nginx! IP=192.168.91.100
#从节点则为101
Welcome to nginx! IP=192.168.91.101

访问后如下图:

安装配置keepalived

1、安装

每个节点服务器都执行如下指令安装keepalived

yum -y install keepalived

2、配置

1)编辑配置文件

#打开配置文件
vi /etc/keepalived/keepalived.conf

2)在修改每个节点的VIP配置如下:

#master节点
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.91.188
    }
}
#node1节点
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.91.188
    }
}
主从节点配置说明:

1)state:主节点为MASTER,从节点为BACKUP
2)priority :权重,主节点大于从节点
3)interface:都一样,网卡指定为ens33(根据自己的实际情况来定,可以使用ip addr查看)
4)virtual_router_id:主从需要保持一致
5)virtual_ipaddress:虚拟ip地址,保持一致

附:vrrp配置段说明:

vrrp_instance NAME { :给出实例名称,要唯一

state MASTER|BUCKUP:自己的初始状态,只有两个master和backup

interface eth0:要把虚拟地址配置在哪个网卡上

virtual_router_id 51:虚拟路由的标识符,0-255

priority 100:定义优先级,0-255

advert_int 1:心跳信息发送的频率,单位为秒钟

authentication { PASS为简单密码认证,可使用openssl rand -hex 4生成随机子串
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
标准格式:/ brd dev scope
简单示例:192.168.2.100/24 brd 192.168.2.0 dev ens32
}

启动两个节点上的keepalived

#两个节点都执行
systemctl start keepalived
#查看运行状态
systemctl status keepalived
#停止指令
systemctl stop keepalived

接下来我们查看状态,发现运行成功:
查看keepalived运行状态
其中有部分SMTP报错,暂时不用管。

测试VIP

1)浏览器访问VIP,发现能正常访问到主节点的nginx:

2)现在我们关闭master主机服务器,再次去访问该ip(访问前记得清除下浏览器缓存,不然地址没变,显示的还是浏览器缓存的master的页面),发现已经成功访问到了从节点的nginx:

3)再启动master,然后启动master的nginx和keepalived,发现再访问vip,又重新回到了主节点。

VIP漂移测试成功。

改进点

1)nginx和keepalived可以都设置为开机启动
2)如果只是主节点nginx挂掉,而虚拟机没挂,则vip不会漂移到从节点,可以思考下怎么解决。
3)主节点恢复后又将vip漂移到主节点,造成了不必要的主备切换,如何解决?

请参考:keepalived中vrrp_script配置段功能详解


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/5560.html
喜欢 (2)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】