0 准备

0.1 环境

Nacos集群和数据库均部署在阿里云ECS服务器上。
版本:

  • nacos:1.4.2
  • mysql:8
  • nginx:1.20.2

1 配置Nacos集群

1.1 配置Mysql数据库

1.1.1 安装Mysql数据库

  • 安装过程略。
    参考:Mysql安装教程
  • 配置数据库。
    创建一个数据库名为nacos。下载好nacos-server安装包(地址在1.2节),使用nacos/conf/nacos-mysql.sql文件初始化数据库。创建结果如下
  • nacos连接mysql数据库干嘛 nacos连接mysql配置_nacos连接mysql数据库干嘛

1.2 搭建集群(三个节点)

创建三个集群,分别是本地ip下的8848,8849,8850端口。

重要提醒!!:如果你使用的是nacos 2.x版本,因为nacos2.x版本使用新的通信协议,除了设置的8848端口,还会默认占用9848(8848+1000)和9849(8848+1001)。即:设置端口号为x,实际占用的还有x+1000和x+1001两个端口。所以,如果使用nacos2.x版本搭建集群,请设置端口为8848,8858,8868三个端口(举例)以避免端口冲突。

  • 首先下载nacos-server-1.4.2安装包:地址

版本说明:
目前的最新版已经到2.0.3。一开始在本地单机模式运行的时候也使用该版本。但在集群配置时总是出现意外错误。因此这里改成2.0.3版本

  • 解压安装包:
tar -zxvf nacos-server-1.4.2.tar.gz
  • 将安装包移动至/usr/local目录下
mv -r nacos /usr/local/
  • 修改nacos/conf/application.properties文件(相关配置已经在文档里给出,这里只需要解开注释即可):
#*************** Spring Boot Related Configurations ***************#
### Default web context path:
server.servlet.contextPath=/nacos
### 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=


#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql

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

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

### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2

注意的点:

  1. 相关配置解开注释即可
  2. db.url.0需要配置好数据库的ip地址。使用ECS服务器的应该写成内网或者公网ip地址
  3. 设置好数据库的用户名和密码
  • 创建cluster.conf文件
# 在conf文件夹下执行
cp cluster.conf.example cluster.conf
  • 修改cluster.conf文件,定义集群中的节点信息
172.18.77.41:8848
172.18.77.41:8849
172.18.77.41:8850

注意:这个地址应该为eth0地址,此处为ECS的内网地址。

  • 修改启动文件nacos/bin/startup.sh
    **重要!!**观察代码可以发现,默认集群模式启动时,分配的内存为-Xms2g -Xmx2g -Xmn1g,如此开启三个节点会很快耗尽内存。我的ECS只有1个g的内存,ECS上启动一个节点就会导致卡死。这里建议修改为-Xms64m -Xmx64m -Xmn40m

我设置过-Xmn=32m,后来报错是Tomcat启动错误。

#===========================================================================================
# JVM Configuration
#===========================================================================================
if [[ "${MODE}" == "standalone" ]]; then
    JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
    JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
    if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
        JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
    fi
    JAVA_OPT="${JAVA_OPT} -server -Xms64m -Xmx64m -Xmn40m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
    JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"

fi
  • 将nacos文件夹命名为nacos8848,并且复制额外两份nacos8849,nacos8850
mv nacos nacos8848
cp -r nacos8848 nacos8849
cp -r nacos8848 nacos8850
  • 修改nacos8849和nacos8850的配置。只需要修改application.properties中定义的server.port
server.port=8849 #nacos8849配置
server.port=8850 #nacos8850配置
  • 启动三个nacos节点
#在三个bin目录下执行
./startup.sh
  • 观察start.out文件,确定三个节点均启动成功
[root@aliyunECS nacos8848]# tail -f /usr/local/nacos8848/logs/start.out 
2022-02-12 17:55:02,015 INFO Nacos is starting...

2022-02-12 17:55:03,055 INFO Nacos is starting...

2022-02-12 17:55:04,100 INFO Nacos is starting...

2022-02-12 17:55:05,253 INFO Nacos is starting...

2022-02-12 17:55:05,814 INFO Nacos started successfully in cluster mode. use external storage
  • 访问控制台,确定三个节点均可以访问

注意:在虚拟机中创建集群时,确定防火墙已关闭。在ECS服务器上配置时,确定防火墙打开了8848,8849,8850三个端口。如果使用nacos2.x版本,还需要打开x+1000和x+1001等几个端口。

nacos连接mysql数据库干嘛 nacos连接mysql配置_java_02

2 配置Nginx反向代理

在/usr/local/nginx/conf/nginx.conf中,增加以下代码,使得nginx可以反向代理到nacos集群。

upstream nacos_cluster {
      #注:这里配置为公网ip也是可以的
      server 172.18.77.41:8848;
      server 172.18.77.41:8849;
      server 172.18.77.41:8850;

    }

    server {
       listen   1111;
       server_name  localhost;
       location / {
                proxy_pass http://nacos_cluster;
                proxy_set_header Host $host:$server_port;
        }
    }

3 项目配置nacos-config

# bootstrap.yml
# 必须配置能够找到配置文件的信息:spring.application.name; spring.cloud.nacos.config.server-addr; spring.cloud.nacos.config.file-extention; spring.profiles.active
spring:
  cloud:
    nacos:
      config:
        server-addr: 120.78.228.224:1111
        file-extension: yaml
        #        namespace: fabadd97-ce57-4001-b62d-62a6650eca5f # 这里必须写命名空间的id值,不能写名字
        #        group: MY_GROUP
        extension-configs:
          - dataId: common.yaml
            group: DEFAULT_GROUP
            refresh: true
  application:
    name: payment-service
  profiles:
    active: dev

4 在nacos控制台配置服务的配置信息

nacos连接mysql数据库干嘛 nacos连接mysql配置_java_03