Kevin's blog Kevin's blog
首页
  • AI基础
  • RAG技术
  • 提示词工程
  • Wireshark抓包
  • 常见问题
  • 数据库
  • 代码技巧
  • 浏览器
  • 手册教程
  • 技术应用
  • 流程规范
  • github技巧
  • git笔记
  • vpn笔记
  • 知识概念
  • 学习笔记
  • 环境搭建
  • linux&运维
  • 微服务
  • 经验技巧
  • 实用手册
  • arthas常用
  • spring应用
  • javaAgent技术
  • 网站
友情链接
  • 分类
  • 标签
  • 归档

Kevin

你可以迷茫,但不可以虚度
首页
  • AI基础
  • RAG技术
  • 提示词工程
  • Wireshark抓包
  • 常见问题
  • 数据库
  • 代码技巧
  • 浏览器
  • 手册教程
  • 技术应用
  • 流程规范
  • github技巧
  • git笔记
  • vpn笔记
  • 知识概念
  • 学习笔记
  • 环境搭建
  • linux&运维
  • 微服务
  • 经验技巧
  • 实用手册
  • arthas常用
  • spring应用
  • javaAgent技术
  • 网站
友情链接
  • 分类
  • 标签
  • 归档
  • 微服务架构筑基础
  • Feign支持BasicAuth验证
  • Feign与OpenFeign
  • Feign请求压缩与超时等配置
  • OAUTH2.0协议
  • 分布式配置中心-apollo

  • alibaba-nacos

    • nacos介绍与单机部署
    • nacos集群部署方式(linux)
      • 一、安装nacos集群
        • 1.1.MySQL数据库初始化
        • 1.2.在nacos/conf/application.properties中增加mysql配置
        • 1.3.在nacos/conf/cluster.conf中加入ip配置
        • 1.4.启动服务
      • 二、多网卡Ip选择问题
      • 三、nacos集群架构
        • 3.1.方案一
        • 3.2.方案二
        • 3.3.方案三(我的方案)
      • 四、nacos集群(虚拟ip漂移)
        • 4.1.安装配置keepalived
        • 4.2.修改防火墙
        • 4.3.启动keepalived服务
    • nacos服务注册与发现
    • nacos注册中心详解
    • nacos客户端配置加载
    • nacos客户端配置刷新
    • nacos服务配置隔离与共享
    • nacos配置Beta发布
  • 微服务
  • alibaba-nacos
kevin
2022-06-10
目录

nacos集群部署方式(linux)

虽然nacos现在已经升级到2.0版本,但是部署方式没有发生变化.本文使用的1.0版本的安装部署方式仍然适用。

# 一、安装nacos集群

我准备了三台服务器(虚拟机),192.168.161.3、192.168.161.4、192.168.161.5。在三台服务器上分别下载、解压nacos安装包,并在防火墙开放8848端口(参考单机部署standalone部署的模式的操作)。然后我们开始nacos集群模式的安装。

# 1.1.MySQL数据库初始化

  • 在生产环境中MySQL至少是主备模式,或者采用高可用模式。
  • 为了将服务注册及配置相关的数据持久化存储,nacos实例之间共享数据并且方便查看,集群安装模式把数据存储到Mysql数据库里面。
  • 建立Mysql数据库实例,并执行sql源文件是在nacos/conf解压目录下面的nacos-mysql.sql文件。sql语句源文件 (opens new window)。

数据库db、用户需要自己去创建,nacos-mysql.sql文件只有建表语句和初始化用户nacos的INSERT语句。

# 1.2.在nacos/conf/application.properties中增加mysql配置

在192.168.161.3、192.168.161.4、192.168.161.5都要配置。

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://192.168.161.3:3306/nacosdb?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=test
db.password=
1
2
3
4
5
6
  • spring.datasource.platform说明支持数据持久化的数据库类型,已知目前只支持mysql
  • db.num数据库实例的数量,我们实验环境只有一个mysql数据库实例,所以是1
  • db.url.0表示第一个mysql数据库的jdbc url连接。如果还有第二个、第三个,请增加db.url.n中的n。

# 1.3.在nacos/conf/cluster.conf中加入ip配置

在192.168.161.3、192.168.161.4、192.168.161.5都要配置。如果没有这个文件,就新建一个。

#ip:port
192.168.161.3:8848
192.168.161.4:8848
192.168.161.5:8848
1
2
3
4

# 1.4.启动服务

在192.168.161.3、192.168.161.4、192.168.161.5执行nacos/bin/startup.sh,在三台服务器上分别启动nacos。正常情况下,我们的集群节点就安装成功了。三个节点都可以提供服务,并且三个节点之间可以通信。通过浏览器访问nacos:http://ip:8848/nacos/可以正常的访问nacos服务。

注意:启动单机模式的用的是sh startup.sh -m standalone,而启动集群模式不需要-m standalone参数。

# 二、多网卡Ip选择问题

正常情况下,上面的步骤就可以安装成功了,三台服务器上的nacos可以对外提供服务,彼此间可以通信。但是,通常在生产环境下的服务器是多网卡的,nacos该如何正确的绑定网卡?其网卡的选择配置和Spring Cloud系列配置是差不多的,可以参考《eureka集群多网卡环境ip设置》学习,但有些许的不同,下文会讲到。 查看我的服务器网卡: 使用ip addr命令查看linux主机的网卡。

img

  • 第一个lo网络ip是回路ip,127.0.0.1,这个是标配
  • 第二个enp0s3网络设备,ip是10.0.2.15,这个是因为我的服务器网络使用了双网卡:桥接+HostOnly模式。正常的服务器是没有的。
  • 第三个enp0s8就是本服务器真正的使用到提供服务的网络ip,如:192.168.161.4。
  • 第四个网络设备是因为我在这台虚拟机上安装过docker,所以有一个docker0的网络设备。

因为较多的网络设备,导致我在后续安装过程出现问题。这里先卖个关子。 **问题:**解决网卡获取的不是我们希望绑定的网卡的问题:当我们配置完成之后,使用startup.sh命令启动。发现集群节点列表中并没有任何记录。而且后台服务日志报错,内容如下:

img

**分析:**通过日志我们看到nacos程序自动获取的是10.0.2.15这个ip,而我们期望nacos绑定的是192.168.161.x的ip。

解决方案一(较新的nacos版本): 针对我的网卡和期望ip,我的application.properties配置如下:

nacos.inetutils.ip-address=192.168.161.5
1

解决方案二(较旧的nacos版本): 针对我的网卡和期望ip,我的application.properties增加配置如下:

# 期望被忽略掉的网卡名称
nacos.inetutils.ignored-interfaces[0]=enp0s3
nacos.inetutils.ignored-interfaces[1]=docker0
# 期望匹配的网卡ip前缀
nacos.inetutils.preferred-networks[0]=192.168.161.
1
2
3
4
5

需要注意的是这里的inetutils配置的前缀是nacos,不是我们之前学过的spring.cloud,这点区别要注意,别配置错了 当以上工作都完成之后,我们通过浏览器分别访问nacos服务,看到如下界面。集群管理的节点列表里面已经有三各节点,ip分别是192.168.161.3:8848、192.168.161.4:8848、192.168.161.5:8848。

img

# 三、nacos集群架构

在完成nacos集群的配置之后,我们可以通过三个入口分别访问集群内的nacos服务,那下面的问题就是如何将三个入口转成一个入口,实现nacos server对外服务的负载均衡和高可用。

# 3.1.方案一

目前许多个人开发者写的博客或教程中的方法就是在三个nacos服务的前端加一个负载均衡器,如:nginx、haproxy。然后号称是生产级别的搭建方法,但这种方法是绝对不能用于生产的,因为你的nginx和haproxy是单点,一旦nginx挂了,整个服务就挂了。

img

# 3.2.方案二

nacos官网推荐的方法是使用虚拟ip的方法,如下:

img

  • 最开始虚拟ip192.168.161.6可能与192.168.161.3的主机绑定在一起,通过这两个ip都可以访问192.168.161.3主机的nacos服务。
  • 一旦192.168.161.3主机宕机或者其他网络故障,192.168.161.6会自动切换到与192.168.161.4或者192.168.161.5主机绑定在一起。这个过程被叫做虚拟ip的漂移。

这种虚拟ip的方法问题就是没有使用到负载均衡,访问的仍然是某一个节点的nacos服务,只不过形成了主从备份,提供了高可用。对于微服务量级不大的,这种就已经完全够用了。

# 3.3.方案三(我的方案)

那既可以提供高可用,又可以提供负载均衡的办法,可能有的朋友已经想到了,如下图:

img

  • 在nacos服务的前端加上nginx或者haproxy的负载均衡器(多节点)
  • 然后对负载均衡器的部署服务器使用虚拟ip,即:通过keepalived实现虚拟ip的漂移
  • 用户访问负载均衡器实现对nacos服务的访问,主nginx挂掉,虚拟ip漂移到从nginx负载均衡提供服务
  • 任何一个nginx负载均衡都可以将请求负载,均衡的分流到nacos实例上面

# 四、nacos集群(虚拟ip漂移)

我们就拿官网中推荐的方法(方案二),使用虚拟ip访问nacos集群的方式做个例子讲解一下。为什么不讲第三种?一般系统架构水平到了的人听懂这种方式就知道第三种方式怎么做,水平不到的人听了第三种仍然还是不懂。

# 4.1.安装配置keepalived

在三台服务器上分别安装keepalived

yum install -y keepalived
1

在三台服务器上分别修改/etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.161.6
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • 一台服务器是MASTER主节点,其他的服务器为BACKUP节点
  • interface 配置为我们刚刚查看的网卡的名称
  • virtual_router_id 必须一致,表示这三台服务器抢用一个虚拟ip。
  • 修改priority 优先级,三台服务器要不一样,比如:100、101、102,优先级最高的优先使用虚拟ip。MASTER的优先级一定要高于BACKUP主机
  • advert_int 是几台服务器之间的同步检查时间,1秒
  • authentication 的设置必须一致,这样这几台服务器才能通信
  • 修改virtual_ipaddress为三台服务器所在网段内未被占用的IP地址,比如:192.168.161.6

# 4.2.修改防火墙

CentOS7必须开放防火墙配置,否则三台主机无法就虚拟ip的使用优先级通信,将都是MASTER,都配置虚拟ip。

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0  --protocol vrrp -j ACCEPT;
firewall-cmd --reload;
1
2

# 4.3.启动keepalived服务

sudo systemctl restart keepalived.service
1

这时我们通过http://192.168.161.6:8848/nacos,访问的服务实际上是keepalived的MASTER节点192.168.161.3。如果我们把161.3的服务器停了,161.6的ip就漂移到161.4服务器上(按优先级)。总之可以保证192.168.161.6虚拟VIP提供的服务一直是可用的,除非nacos所有服务器节点都挂了。

上次更新: 2022/06/13, 18:30:58
nacos介绍与单机部署
nacos服务注册与发现

← nacos介绍与单机部署 nacos服务注册与发现→

最近更新
01
AI是如何学习的
06-06
02
提示词工程实践指南
06-06
03
chatGpt提示原则
06-06
更多文章>
| Copyright © 2022-2025 Kevin | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式