youyichannel

志于道,据于德,依于仁,游于艺!

0%

MacOS搭建Nacos集群

环境说明:

  • M1 Pro
  • JDK 11
  • Maven 3.8.3
  • Nacos 2.2.2

前情提要

需要自己编译打包,不能下载编译后的文件!!!否则在集群部署时,会抛出以下异常:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.naming.consistency.persistent.PersistentConsistencyServiceDelegateImpl]: Constructor threw exception; nested exception is java.lang.UnsatisfiedLinkError: Can't load library: /var/folders/j7/kbbqmc456_v5fmrxpkf4__gw0000gn/T/librocksdbjni1596183689058414049.jnilib

可以看到 Nacos 启动失败的原因是缺少依赖的本地库文件 librocksdbjni1596183689058414049.jnilib

这个问题通常是由于 Nacos 在使用 rocksdb 时发生的,而 rocksdb 本身依赖本地的 JNI 库。M1 Pro 是苹果自家的芯片,和传统的 x86 架构有所不同,可能导致在 M1 Pro 上找不到对应的本地库。

Nacos 安装、编译

1)前往Nacos Github,下载对应的源码包,此处选择2.2.2版本的源码包

2)解压,并进入文件夹内部(nacos-2.2.2),打开pom.xml文件

3)修改pom.xml,添加内容:

<properties>
<!-- ... -->
<rocksdb.version>6.29.5</rocksdb.version>
</properties>

<!-- ... -->

<dependencies>
<!-- ... -->
<dependency>
<groupId>org.rocksdb</groupId>
<artifactId>rocksdbjni</artifactId>
<version>${rocksdb.version}</version>
</dependency>
</dependencies>

参考:https://github.com/alibaba/nacos/issues/8109

4)编译,安装

进入到nacos-2.2.2目录下(根目录)

mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U

参考:https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html

5)复制一份打包后的文件(可选)

cp -R ./distribution/target/nacos-server-2.2.2 ~/program/nacos

📢注意:实际路径需要更改

6)进入到nacos-server-2.2.2/nacos/conf目录下,复制一份cluster.conf.example文件,并重命名成cluster.conf

7)修改cluster.conf文件

  • 由于Nacos集群是奇数台机器,所以最少是3个nacos节点
  • ip地址根据实际环境要做修改,可以使用ifconfig命令查看
  • 同一ip端口之间要有一定的跳数,比如上述配置跳数是11

8)导入Nacos集群sql文件

  • 创建数据库nacos
  • 导入sql文件,地址:https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql

9)回到conf目录下,修改application.properties文件

### Default web context path:
server.servlet.contextPath=/nacos
### Include message field
server.error.include-message=ALWAYS
### Default web server port:
server.port=8848

#*************** Network Related Configurations ***************#
### If prefer hostname over ip for Nacos server addresses in cluster.conf:
# nacos.inetutils.prefer-hostname-over-ip=false

### Specify local server's IP:
nacos.inetutils.ip-address=192.168.0.100


#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
# spring.datasource.platform=mysql
spring.sql.init.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=12345678

📢注意:需要根据实际情况做相应的修改,比如ip、数据库配置等

10)复制两份nacos-server-2.2.2,并做好一定的区分度,同时修改复制出来两份中application.properties中的IP和端口号

11)启动集群环境

为了演示,此处只启动8848端口一个节点

运行bin目录下的startup.sh即可,默认就是集群模式,若想要单机启动,需要加上参数-m standalone

sh ./bin/startup.sh

可以使用以下命令查看启动日志

cat ./logs/start.out

📢注意:

  • MySQL服务要启动
  • 设置的端口不能被占用

实际效果: