曾在 InfoQ 上发布过一篇文章SpringCloud 从入门到精通 13---Nacos 集群搭建,介绍了本地环境下如何搭建Nacos
集群,但是其中存在一些问题
当前我使用的
nacos-client
版本是1.3.3
,启动两个相同的服务后(9001
和9002
),那么nacos
中的健康实例数会持续跳变,目前也采用了1.4.1
1.4.0
两个版本,并未解决此问题,等待官方进行解决.
后面进行了线上环境的部署,nacos
中的健康实例数会持续跳变的问题已经解决,为了记录线上环境nacos
集群的搭建过程,对线上环境的nacos
集群搭建进行总结.
搭建环境如下(为避免信息泄露,IP 地址为假 IP)
126.158.212.38
#ubuntu
126.158.212.49#centos
126.158.212.96#ubuntu
103.196.21.212#mysql 数据库,已经修改了 nacos 密码为 root
Docker version 20.10.2, build 2291f61
docker-compose version 1.25.4, build 8d51620a
nacos server 1.3.2
nacos client 1.3.3
三台机器的docker-compose.yml
分别如下
126.158.212.38
version: '3'
services:
nacos:
image: nacos/nacos-server:1.3.2
container_name: nacos
restart: always
environment:
PREFER_HOST_MODE: ip #如果支持主机名可以使用hostname,否则使用ip,默认也是ip
SPRING_DATASOURCE_PLATFORM: mysql #数据源平台 仅支持mysql或不保存empty
NACOS_SERVER_IP: 126.158.212.38 #多网卡情况下,指定ip或网卡
NACOS_SERVERS: 126.158.212.38:8848 126.158.212.49:8848 126.158.212.96:8848 #集群中其它节点[ip1:port ip2:port ip3:port]
MYSQL_SERVICE_HOST: 103.196.21.212
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_DB_NAME: nacos
MYSQL_SERVICE_USER: root
MYSQL_SERVICE_PASSWORD: root
#JVM调优参数
JVM_XMS: 512M
JVM_XMX: 1g
volumes:
- /mydata/nacos/logs:/home/nacos/logs #日志输出目录
- /mydata/nacos/conf:/home/nacos/conf #根据需要先从 docker 中拷贝 conf 文件夹出来
- /mydata/nacos/data:/home/nacos/data #根据需要先从 docker 中拷贝 data 文件夹出来
network_mode: host
126.158.212.49
version: '3'
services:
nacos:
image: nacos/nacos-server:1.3.2
container_name: nacos
restart: always
environment:
PREFER_HOST_MODE: ip #如果支持主机名可以使用hostname,否则使用ip,默认也是ip
SPRING_DATASOURCE_PLATFORM: mysql #数据源平台 仅支持mysql或不保存empty
NACOS_SERVER_IP: 126.158.212.49 #多网卡情况下,指定ip或网卡
NACOS_SERVERS: 126.158.212.38:8848 126.158.212.49:8848 126.158.212.96:8848 #集群中其它节点[ip1:port ip2:port ip3:port]
MYSQL_SERVICE_HOST: 103.196.21.212
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_DB_NAME: nacos
MYSQL_SERVICE_USER: root
MYSQL_SERVICE_PASSWORD: root
#JVM调优参数
JVM_XMS: 512M
JVM_XMX: 1g
volumes:
- /mydata/nacos/logs:/home/nacos/logs #日志输出目录
- /mydata/nacos/conf:/home/nacos/conf #根据需要先从 docker 中拷贝 conf 文件夹出来
- /mydata/nacos/data:/home/nacos/data #根据需要先从 docker 中拷贝 data 文件夹出来
network_mode: host
126.158.212.96
version: '3'
services:
nacos:
image: nacos/nacos-server:1.3.2
container_name: nacos
restart: always
environment:
PREFER_HOST_MODE: ip #如果支持主机名可以使用hostname,否则使用ip,默认也是ip
SPRING_DATASOURCE_PLATFORM: mysql #数据源平台 仅支持mysql或不保存empty
NACOS_SERVER_IP: 126.158.212.49 #多网卡情况下,指定ip或网卡
NACOS_SERVERS: 126.158.212.38:8848 126.158.212.49:8848 126.158.212.96:8848 #集群中其它节点[ip1:port ip2:port ip3:port]
MYSQL_SERVICE_HOST: 103.196.21.212
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_DB_NAME: nacos
MYSQL_SERVICE_USER: root
MYSQL_SERVICE_PASSWORD: root
#JVM调优参数
JVM_XMS: 512M
JVM_XMX: 1g
volumes:
- /mydata/nacos/logs:/home/nacos/logs #日志输出目录
- /mydata/nacos/conf:/home/nacos/conf #根据需要先从 docker 中拷贝 conf 文件夹出来
- /mydata/nacos/data:/home/nacos/data #根据需要先从 docker 中拷贝 data 文件夹出来
network_mode: host
然后在三台机器上分别docker-compose up -d
启动nacos
即可
为了方便客户端连接和访问,使用了nginx
做了反向代理,配置如下
upstream nacos {
server 126.158.212.38:8848;
server 126.158.212.49:8848;
server 126.158.212.96:8848;
}
server {
listen 8848;
server_name 103.196.21.212;
location / {
#root /usr/share/nginx/html;
#index index.html index.htm;
proxy_pass http://nacos;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
最后,客户端直接使用103.196.21.212
的地址进行注册和服务的配置即可,客户端的配置如下
spring:
application:
name: cloud-alibaba-payment
cloud:
nacos:
discovery:
server-addr: 103.196.21.212:8848
username: nacos
password: root
config:
server-addr: 103.196.21.212:8848
file-extension: yml
username: nacos
password: root
datasource:
url: jdbc:mysql://103.196.21.212:3306/cloud?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: root
druid:
initial-size: 5 #连接池初始化大小
min-idle: 10 #最小空闲连接数
max-active: 20 #最大连接数
web-stat-filter:
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" #不统计这些请求数据
stat-view-servlet: #访问监控网页的登录用户名和密码
login-username: druid
login-password: druid
server:
port: 9002
mybatis:
mapper-locations:
- classpath:dao/*.xml
management:
endpoints:
web:
exposure:
include: '*'
目前,此配置可以正常启动nacos
并且不会出现健康实例跳变的问题,仅做部署参考和记录.