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文件初始化数据库。创建结果如下
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
注意的点:
- 相关配置解开注释即可
- db.url.0需要配置好数据库的ip地址。使用ECS服务器的应该写成内网或者公网ip地址
- 设置好数据库的用户名和密码
- 创建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等几个端口。
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控制台配置服务的配置信息