献给Nacos小白的一篇好文:集群环境搭建

集群环境搭建

Nacos单例模式不推荐用在生产环境,所以需要对nacos服务做高可用,而nacos集群正是为了解决这个问题而来的。既然是集群,那么就涉及到数据存储一致性问题,虽然nacos提供了内嵌derby数据库及本地文件等形式,但是不能在跨服务器节点实例间进行数据同步或保持一致,所以,需要一个独立的存储系统,目前nacos1.4.3版本推荐使用的是开源的MySQL数据库。 

| Nacos集群构建

| 集群验证及使用

| 一些注意事项

一、Nacos集群构建

1、前置环境准备

1.1 JDK/JRE

因为nacos采用java开发,其需要运行在jdk/jre环境,所以需要先安装jdk/jre,这里推荐1.8+版本以上,具体安装过程请读者自行查阅资料。

1.2 MySQL8.x

正如上面介绍,目前版本的nacos集群本身没有提供能够解决跨服务器节点nacos实例数据一致的支持,其推荐使用开源的MySQL数据库(推荐8+版本),使其作为一个独立的存储系统,供各个nacos共同使用,解决了数据一致性的问题。官方建议MySQL至少是主备形式,也可以是集群模式,做到高可用即可,具体的搭建过程请读者查阅资源自行实现。

2、服务器环境

序号

IP地址

系统类型

操作系统

1

182.168.157.134

Linux

CentOS7.x

2

182.168.157.136

Linux

CentOS7.x

3

182.168.157.147

Linux

CentOS7.x

3、具体部署过程

以下操作需在三台服务器同步操作:

# 解压缩nacos服务软包

$ tar -xvf nacos-server-1.4.3.tar.gz

$ cd nacos

$ pwd 

/home/nacos

# 创建集群配置文件

$ cd /home/nacos/conf

$ cp cluster.conf.example cluster.conf

$ vim cluster.conf

182.168.157.134:8848

182.168.157.136:8848

182.168.157.147:8848

# 外置数据源配置

$ cd /home/nacos/conf

$ vim application.properties

db.num=1

db.url.0=jdbc:mysql://182.168.157.134:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true

db.user.0=root

db.password.0=root@test123

防火墙端口放行

如果内网服务器开启了防火墙,各nacos节点均须开放8848和7848端口,否则参与nacos集群的各个节点之间无法选举,进而集群选举失败。另外,安装了mysql的服务器若开启了防火墙,也需要开放3306端口,否则无法链接到数据库。

4、nacos服务启动

三台机器同步执行如下命令,以集群模式启动,关闭可使用sh shutdown.sh:

$ cd /home/nacos/bin

$ sh startup.sh 

启动完成后,可查看/home/nacos/logs下的nacos.log日志,查看启动是否完成或分析某些问题。若一切正常时,可访问任何一台机器的nacos网站,如:

http://182.168.157.134:8848/nacos/#/login

默认nacos的账号和密码:nacos/nacos,输入登录即可。

集群是否搭建成功,登录nacos后,切换到菜单:集群管理->节点列表,可看到上图所示三台机器的IP和状态信息。

5、开启安全认证

若要为nacos开启安全认证,需要在每个nacos的application.properties配置文件中添加如下内容,添加后需要重启nacos实例才能生效:

nacos.core.auth.enabled=true

注意:

开启密码认证后,服务程序注册及配置时,需要添加用户名和密码才能注册或配置成功。具体的账号和密码,可在nacos ui控制台手动添加和修改,默认账号/密码:nacos/nacos。

二、集群验证及使用

这里我们以springboot服务为例,验证下nacos集群是否可正常注册,具体项目构建不在这里介绍,这里仅罗列一些关键的配置内容,这里构建的服务为provider-service,我们来试试它能否注册到nacos集群中。

1、pom.xml配置

<dependencies>


<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>

dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-alibaba-dependenciesartifactId>
            <version>2.2.1.RELEASEversion>
            <type>pomtype>
            <scope>importscope>
        dependency>
    dependencies>
dependencyManagement>

这里选用了nacos spring cloud组件,因为其提供了一些便捷的API和简洁配置。

2、bootstrap.yml配置

spring:
  
application:
    
name: provider-service
  
cloud:
    
nacos:
      ### 指定用户名和密码
      username: nacos
      
password: nacos
      
### 服务注册与发现
      discovery:
        
### 服务注册地址及端口
        server-addr: 182.168.157.134:8848,182.168.157.136:8848,182.168.157.147:8848

如上所示,如果不指定username和password时,服务无法注册到nacos,而server-addr指定集群各个服务器nacos实例的IP和端口号,中间使用,号分割即可。

3、启动程序注册

服务程序启动后,若控制台无报错,就可在nacos ui控制台的服务列表中看到服务provider-service已注册成功。

默认情况下,服务注册到nacos的默认空间public中,而所属分组为默认分组DEFAULT_GROUP,即代表服务已注册到集群中。

说明:

当我们关掉当前的leader实例后,其它备选nacos实例会自动晋升为leader,继续对外提供正常服务。

三、一些注意事项

1、MySQL依赖

Nacos1.4.3版本构建的集群环境,其依赖的统一独立存储系统依然选用开源的mysql数据库,这里推荐使用8+版本,另外,考虑到mysql高可用情况,官方建议mysql至少为主备模式或是集群模式。

2、防火墙放行

如果内网服务器开启了防火墙,各nacos节点均须开放8848端口,否则参与nacos集群的各个节点之间无法选举,进而集群选举失败。另外,安装了mysql的服务器若开启了防火墙,也需要开放3306端口,否则无法链接到数据库。

献给Nacos小白的一篇好文:集群环境搭建_第1张图片

 

你可能感兴趣的:(微服务设计-Nacos,微服务,java,nacos)