Nacos(四)Docker部署Nacos集群环境(兼容Nacos1.x与2.x),简单易懂、实用
目录
- 前言
- 对比1.x版本
- 1、拉取镜像
- 2、配置mysql环境
- 3、方式一:启动集群容器(无需挂载配置)-不推荐
- 4、方式二:挂载启动集群(推荐)
-
- 4.1 创建挂载目录
- 4.2 拷贝容器目录
- 4.3 配置application.properties
- 4.4 配置cluster.conf
- 4.5 配置docker-startup.sh
- 4.6 挂载启动容器
- 4、配置nginx映射
- 5、SpringCloud连接集群
《Docker部署Nacos-2.0.3单机环境》
《Linux部署Nacos-2.0.3单机环境》
《Linux部署Nacos-2.0.3集群环境》
《SpringCloud整合Nacos2.x使用》
前言
具体搭建那个版本的Nacos,最好根据需要整合的SpringCloud版本来决定。
版本对应参考:组件版本关系
对比1.x版本
Nacos1.x的搭建方式和2.x的方式,基本一致,相比1.X新增了gRPC的通信方式,因此需要增加2个端口
。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成(分别偏移了1000和1001
),nacos默认的端口为8848
,偏移后的新增端口为9848与9849
。
端口 | 与主端口的偏移量 | 描述 |
---|---|---|
9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |
1、拉取镜像
拉取时最好指定版本,在git查看相应版本: https://github.com/nacos-group/nacos-docker
注意:1.3.2以上版本,已支持mysql8
拉取镜像:
docker pull nacos/nacos-server:2.0.3
2、配置mysql环境
-
创建数据库,比如:
nacos
-
创建表:从
github
获取建表语句,地址:https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql -
效果:
3、方式一:启动集群容器(无需挂载配置)-不推荐
该方式会导致容器运行后修改启动参数比较麻烦,并且还需要重启docker服务
代价较高,需要修改config.v2.json
文件,参考:《Docker修改启动参数》
如果服务器配置有可能发生改变,不推荐该方式
启动命令如下:
docker run \# nacos名称,分为nacos-server-1[2、3]--name nacos-server-1[2、3] -d \--privileged=true \--restart=always \# 启动nacos-server-1时,配置第一个节点的端口-p 8848:8848 \-p 9848:9848 \-p 9849:9849 \# 启动nacos-server-2时,配置第二个节点的端口#-p 8858:8848 \#-p 9858:9848 \#-p 9859:9849 \# 启动nacos-server-3时,配置第三个节点的端口#-p 8858:8848 \#-p 9858:9848 \#-p 9859:9849 \-e MODE=cluster \-e PREFER_HOST_MODE=hostname \# 当前机器IP-e NACOS_SERVER_IP=192.168.1.111 \# nacos集群节点-e NACOS_SERVERS=192.168.1.111:8848,192.168.1.111:8858,192.168.1.111:8868-e SPRING_DATASOURCE_PLATFORM=mysql \-e MYSQL_SERVICE_HOST=192.168.1.100 \-e MYSQL_SERVICE_DB_NAME=nacos_config \-e MYSQL_SERVICE_USER=nacos \-e MYSQL_SERVICE_PASSWORD=nacos \-e JVM_XMS=256m \-e JVM_XMX=256m \nacos/nacos-server:2.0.3
4、方式二:挂载启动集群(推荐)
配置nacos集群,至少需要三个节点
,节点及端口分为:nacos1(8848、9848、9849)、nacos2(8858、9858、9859)、nacos3(8868、9868、9869)
由于服务器有限,都在同一台机器上搭建集群;如果有足够的资源,只需要按照下面搭建的流程,修改相应机器IP即可。
服务器分布情况:
地址 | 端口 | 说明 |
---|---|---|
192.168.0.111 | 8848、9848、9849 | 第一个Nacos节点 |
192.168.0.111 | 8858、9858、9859 | 第二个Nacos节点 |
192.168.0.111 | 8868、9868、9869 | 第三个Nacos节点 |
192.168.0.200 | 3306 | mysq服务 |
4.1 创建挂载目录
创建nacos1、nacos2、nacos3来区分三个服务:
mkdir -p /root/docker/cloud/nacos-cluster/nacos1[2、3]
4.2 拷贝容器目录
先不进行任何配置,直接启动一个nacos
容器,然后将容器中的data、conf、log、bin
拷贝到/root/docker/cloud/nacos1[2、3]
目录下。==
直接启动:
docker run --name nacos-server -d nacos/nacos-server:2.0.3
拷贝目录:
docker cp nacos-server:/home/nacos/conf /root/docker/cloud/nacos-cluster/nacos1[2、3]/docker cp nacos-server:/home/nacos/logs /root/docker/cloud/nacos-cluster/nacos1[2、3]/docker cp nacos-server:/home/nacos/bin /root/docker/cloud/nacos-cluster/nacos1[2、3]/docker cp nacos-server:/home/nacos/data /root/docker/cloud/nacos-cluster/nacos1[2、3]/
删除容器:
docker stop nacos-serverdocker rm nacos-server
目的是:为了进行挂载启动,以后修改配置文件、查看日志时更加方便。
4.3 配置application.properties
分别修改nacos1、nacos2、nacos3的application.properties
文件中,我们直接将原有采用环境变量
方式的配置根据实际情况进行修改。
修改:
vim /root/docker/cloud/nacos-cluster/nacos1[2、3]/conf/application.properties
修改内容如下:
# 端口server.port=8848[8858、8868]spring.datasource.platform=mysql# 数据库数量,如果mysql配置了主从就设置为 2db.num=1# mysql连接db.url.0=jdbc:mysql://192.168.0.200:3306/db-nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai# 如果db.num=1,则将db.url.1屏蔽;反之则配置db.url.1#db.url.1=# mysql用户名db.user=root# mysql密码db.password=123456
4.4 配置cluster.conf
分别修改nacos1、nacos2、nacos3的cluster.conf
文件,配置nacos
集群中的所有节点。
修改:
# 分别进入到nacos1、nacos2、nacos3的配置目录vim /root/docker/cloud/nacos-cluster/nacos1[2、3]/conf/cluster.conf
修改内容如下:
# nacos1、nacos2、nacos3配置内容均如下,每个nacos均要配置集群中的所有节点[至少3个]192.168.0.111:8848192.168.0.111:8858192.168.0.111:8868
4.5 配置docker-startup.sh
分别修改nacos1、nacos2、nacos3的startup.sh
文件,主要配置JVM参数
以及屏蔽cluster.conf
文件写入。
修改:
vim /root/docker/cloud/nacos-cluster/nacos1[2、3]/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
中配置的节点,方便排查错误以及验证是否配置成功。
配置JVM:
# 根据当前服务器的配置修改JVM大小,比如:修改为`1G`或者更大或者更小。JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
4.6 挂载启动容器
注意:如果是资源有限,在同一台机器上部署的话,注意修改不同节点的挂载目录。
第一个节点:
docker run \--name nacos-server-1 -d \--privileged=true \--restart=always \-p 8848:8848 \-p 9848:9848 \-p 9849:9849 \-e MODE=cluster \-e PREFER_HOST_MODE=hostname \-e NACOS_SERVER_IP=192.168.0.111-v /root/docker/cloud/nacos-cluster/nacos1/logs:/home/nacos/logs \-v /root/docker/cloud/nacos-cluster/nacos1/data:/home/nacos/data \-v /root/docker/cloud/nacos-cluster/nacos1/conf:/home/nacos/conf \-v /root/docker/cloud/nacos-cluster/nacos1/bin:/home/nacos/bin \nacos/nacos-server:2.0.3
第二个节点:
docker run \--name nacos-server-2 -d \--privileged=true \--restart=always \-p 8858:8858 \-p 9858:9858 \-p 9859:9859 \-e MODE=cluster \-e PREFER_HOST_MODE=hostname \-e NACOS_SERVER_IP=192.168.0.111-v /root/docker/cloud/nacos-cluster/nacos2/logs:/home/nacos/logs \-v /root/docker/cloud/nacos-cluster/nacos2/data:/home/nacos/data \-v /root/docker/cloud/nacos-cluster/nacos2/conf:/home/nacos/conf \-v /root/docker/cloud/nacos-cluster/nacos2/bin:/home/nacos/bin \nacos/nacos-server:2.0.3
第三个节点:
docker run \--name nacos-server-3 -d \--privileged=true \--restart=always \-p 8868:8868 \-p 9868:9868 \-p 9869:9869 \-e MODE=cluster \-e PREFER_HOST_MODE=hostname \-e NACOS_SERVER_IP=192.168.0.111-v /root/docker/cloud/nacos-cluster/nacos3/logs:/home/nacos/logs \-v /root/docker/cloud/nacos-cluster/nacos3/data:/home/nacos/data \-v /root/docker/cloud/nacos-cluster/nacos3/conf:/home/nacos/conf \-v /root/docker/cloud/nacos-cluster/nacos3/bin:/home/nacos/bin \nacos/nacos-server:2.0.3
成功启动任何一个节点:
启动日志:
登录测试:
通过:http://192.168.0.111:8848/nacos,成功访问nacos则表示搭建成功。
默认账户:nacos
默认密码:nacos,为了安全在第一次进入到nacos以后最好修改一次密码。
控制台节点信息:
成功启动所有节点:
集群搭建成功后,数据会进行同步;访问任意一个节点,都可以看到所有的服务列表、配置列表等数据
4、配置nginx映射
由于是集群配置,存在多个服务端控制台,我们可以通过任意一个控制台看到所有节点信息,为了减少节点的访问量,想要访问不同的节点需要输入不同的ip:port
。
通过nginx做负载均衡
,向外暴漏一个统一的地址,目的有两个:
- 为了单个节点的减轻压力和方便操作
- 在SpringCloud整合,server-addr配置一个统一的入口路径
ngxin配置内容如下:
.... .... upstream nacos-proxy { server 111.229.160.175:8848 weight=1; server 111.229.160.175:8858 weight=1; server 111.229.160.175:8868 weight=1; } server {....location /nacos { proxy_pass http://nacos-proxy; port_in_redirect on; proxy_redirect off;proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } .... }
效果:
5、SpringCloud连接集群
spring: cloud: nacos: discovery:#连接nacos集群前,配置好nginx负载均衡,直接连接nginx的ip+port即可,80端口可以忽略 server-addr: 192.168.1.111 ......