Docker部署Nacos2.2.3集群环境
拉取镜像
docker pull nacos/nacos-server:v2.2.3
配置mysql环境
- 创建数据库,比如:
sso-nacos
-
创建对应账号密码
CREATE USER 'sso_nacos'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON sso_nacos.* TO 'sso_nacos'@'%'; flush privileges;
- 创建表:从
github
获取建表语句,地址:https://github.com/alibaba/nacos/blob/2.2.3/distribution/conf/mysql-schema.sql
挂载启动集群
配置nacos集群,至少需要三个节点
10.196.69.88 node88
10.196.69.90 node90
10.196.69.92 node92
创建挂载目录
mkdir -p /AppHome/docker/nacos-cluster
拷贝容器目录
先不进行任何配置,直接启动一个nacos
容器,然后将容器中的data、conf、log、bin
拷贝到/AppHome/docker/nacos-cluster
目录下
直接启动:
docker run --name nacos-server -d nacos/nacos-server:v2.2.3
拷贝目录:
docker cp nacos-server:/home/nacos/conf /AppHome/docker/nacos-cluster/
docker cp nacos-server:/home/nacos/logs /AppHome/docker/nacos-cluster/
docker cp nacos-server:/home/nacos/bin /AppHome/docker/nacos-cluster/
docker cp nacos-server:/home/nacos/data /AppHome/docker/nacos-cluster/
删除容器:
docker stop nacos-server
docker rm nacos-server
目的是:为了进行挂载启动,以后修改配置文件、查看日志时更加方便。
配置application.properties
在/AppHome/docker/nacos-cluster/conf/application.properties
文件中,我们直接将原有采用环境变量
方式的配置根据实际情况进行修改。
修改:
vim /AppHome/docker/nacos-cluster/conf/application.properties
修改内容如下:
# 端口
server.port=8848[8858、8868]
spring.datasource.platform=mysql
# 数据库数量,如果mysql配置了主从就设置为 2及其以上
db.num=3
# mysql连接
db.url.0=jdbc:mysql://10.196.69.88:3306/sso_nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.url.1=jdbc:mysql://10.196.69.90:3306/sso_nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.url.2=jdbc:mysql://10.196.69.92:3306/sso_nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user=sso_nacos
db.password=123456
配置cluster.conf
vim /AppHome/docker/nacos-cluster/conf
修改内容如下:
[root@node88 conf]# more cluster.conf
#2024-04-12T10:09:24.587
10.196.69.88:8848
10.196.69.90:8848
10.196.69.92:8848
配置docker-startup.sh
修改startup.sh
文件,主要屏蔽cluster.conf
文件写入,JVM参数
设置暂时省略。
修改:
vim /AppHome/docker/nacos-cluster/bin/docker-startup.sh
屏蔽cluster.conf文件写入:
# 1、注释print_servers方法中的 echo "" >"$CLUSTER_CONF"
# 2、修改遍历方式为`cat ../conf/cluster.conf`
# 3、修改后,结果如下:
function print_servers() {
if [[ ! -d "${PLUGINS_DIR}" ]]; then
# echo "" >"$CLUSTER_CONF"
for server in `cat ../conf/cluster.conf`; do
echo "$server" >>"$CLUSTER_CONF"
done
else
bash $PLUGINS_DIR/plugin.sh
sleep 30
fi
}
- 为什么屏蔽
echo "" >"$CLUSTER_CONF"
因为我们自己定了cluster.conf
,不屏蔽的话,会导致cluster.conf
中的内容被置为空。 cat …/conf/cluster.conf
的目的
目的是为了打印出cluster.conf
中配置的节点,方便排查错误以及验证是否配置成功。
挂载启动容器
docker run \
--name nacos-server-1 -d \
--privileged=true \
--restart=always \
-p 7848:7848 \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
-e MODE=cluster \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVER_IP=10.196.69.88 \
-e NACOS_AUTH_ENABLE=true \
-e NACOS_AUTH_IDENTITY_KEY="nacos_docker" \
-e NACOS_AUTH_IDENTITY_VALUE="nacos_docker" \
-e NACOS_AUTH_TOKEN="cXdlMXJ0eTJ1aTNvcGw0a2poNWdmNmRzYXp4N2N2Ym5t" \
-v /AppHome/docker/nacos-cluster/logs:/home/nacos/logs \
-v /AppHome/docker/nacos-cluster/data:/home/nacos/data \
-v /AppHome/docker/nacos-cluster/conf:/home/nacos/conf \
-v /AppHome/docker/nacos-cluster/bin:/home/nacos/bin \
reg-hub.gzeport.com/tools/nacos/nacos-server:v2.2.3
其他节点注意修改
--name
nacos-server-1
-e
NACOS_SERVER_IP=10.196.69.88
-e
NACOS_AUTH_TOKEN=
自定义指定生成JWT的密钥,使用BASE64进行编码,编码前的key长度必须不小于32个字符
集群搭建成功后,数据会进行同步;访问任意一个节点,都可以看到所有的服务列表、配置列表等数据.
参考
1.https://nacos.io/docs/v2/guide/admin/cluster-mode-quick-start/
2.https://zhuanlan.zhihu.com/p/490063678?utm_id=0
3.https://blog.csdn.net/zhuocailing3390/article/details/136974882