Nacos Docker集群 最近学习Nacos,之前学习是使用的Nacos 单机模式,学习的情况下单机模式作为入门学习是不错的,但是实际环境中都是集群模式,但是目前还是处于学习,本人也就两台服务器,只能用测试服务器进行"伪集群”,即在一台服务器上使用docker-compose 启动三个Nacos并映射到不同的端口。刚开始弄这个遇到了很多坑,弄了快两天差不多才弄好,下面就大概的记录一下整个过程。
1.Docker的安装
我自己使用的是CentOS7.3的系统,直接使用下面的命令安装Docker
yum install docker
Docker安装之后默认的镜像源很慢,建议切换到阿里的源,可以参考我以前写过的教程:Docker配置阿里云镜像教程
2.安装docker-compose
这个安装的方式很多,可以直接使用下面的命令安装(CentOS)
yum install docker-compose
查看docker-compose 版本
docker-compose -version
我的版本如下:
[root@yremp ~]# docker-compose -version
docker-compose version 1.18.0, build 8dd22a9
3. 下载Nacaos Docker版
这个大概步骤 Nacos官方文档 中有
git clone https://github.com/nacos-group/nacos-docker.git
没有git命令执行下面命令进行安装
yum install git
4. 修改配置文件
4.1 项目目录
先进入下载的文件里面(根据自己下载的位置
cd nacos-docker
这个项目的目录结构如下
bulid里面是一些Spring的配置,env里面是各种模式的环境配置,example里面是各种模式的示例 docker-composer 启动配置
4.2 修改JVM参数
首先要说的就是Nacos的一些参数配置,下面是官方给的Docker运行参数说明:
name | description | option |
---|---|---|
MODE | cluster模式/standalone模式 | cluster/standalone default cluster |
NACOS_SERVERS | nacos cluster地址 | eg. ip1,ip2,ip3 |
PREFER_HOST_MODE | 是否支持hostname | hostname/ip default ip |
NACOS_SERVER_PORT | nacos服务器端口 | default 8848 |
NACOS_SERVER_IP | 多网卡下的自定义nacos服务器IP | |
SPRING_DATASOURCE_PLATFORM | standalone 支持 mysql | mysql / empty default empty |
MYSQL_MASTER_SERVICE_HOST | mysql 主节点host | |
MYSQL_MASTER_SERVICE_PORT | mysql 主节点端口 | default : 3306 |
MYSQL_MASTER_SERVICE_DB_NAME | mysql 主节点数据库 | |
MYSQL_MASTER_SERVICE_USER | 数据库用户名 | |
MYSQL_MASTER_SERVICE_PASSWORD | 数据库密码 | |
MYSQL_SLAVE_SERVICE_HOST | mysql从节点host | |
MYSQL_SLAVE_SERVICE_PORT | mysql从节点端口 | default :3306 |
MYSQL_DATABASE_NUM | 数据库数量 | default :2 |
JVM_XMS | -Xms | default :2g |
JVM_XMX | -Xmx | default :2g |
JVM_XMN | -Xmn | default :1g |
JVM_MS | -XX:MetaspaceSize | default :128m |
JVM_MMS | -XX:MaxMetaspaceSize | default :320m |
NACOS_DEBUG | 开启远程调试 | y/n default :n |
TOMCAT_ACCESSLOG_ENABLED | server.tomcat.accesslog.enabled | default :false |
默认的 -Xms(初始堆大小) -Xmx(最大堆大小) -Xmn (新生代大小)这几个参数如果像我一样在一个服务器上面进行伪集群必须要修改,设置的小一点,如果使用默认的参数运行,服务器几乎会满负载直接宕机(我一开始遇到了几次),我的测试服务器是1C2G的配置,使用默认参数运行负载如下图:
跑了几次直接把服务器给搞崩了,因为运行三个Nacos+MySQL所以必须修改上的几个参数
关于JVM参数的设置在env下,对应不同模式的配置,我是使用的hostname集群版的
先进入env目录
cd env
编辑nacos-hostname.env (如果使用ip形式的集群就编辑nacos-ip.env)
vim nacos-hostname.env
打开默认的配置如下:
#nacos dev env
PREFER_HOST_MODE=hostname
NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=nacos_devtest
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=nacos
里面没有JVM参数设置,需要我们手动添加进去,修改后的如下:
#nacos dev env
PREFER_HOST_MODE=hostname
NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=nacos_devtest
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=nacos
JVM_XMS=200m
JVM_XMX=200m
JVM_XMN=150m
JVM几个参数可以自己测试,我的测试上面的数据可以顺利运行几个服务,测试的过程中有的服务因为服务器满负载都运行不起来,或者全部崩掉。
4.3 启动配置查看
下面打开example下面的 cluster-hostname.yaml
打开后内容如下:
version: "3"
services:
nacos1:
hostname: nacos1
container_name: nacos1
image: nacos/nacos-server:latest
volumes:
- ./cluster-logs/nacos1:/home/nacos/logs
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8848:8848"
- "9555:9555"
env_file:
- ../env/nacos-hostname.env
restart: always
depends_on:
- mysql
nacos2:
hostname: nacos2
image: nacos/nacos-server:latest
container_name: nacos2
volumes:
- ./cluster-logs/nacos2:/home/nacos/logs
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8849:8848"
env_file:
- ../env/nacos-hostname.env
restart: always
depends_on:
- mysql
nacos3:
hostname: nacos3
image: nacos/nacos-server:latest
container_name: nacos3
volumes:
- ./cluster-logs/nacos3:/home/nacos/logs
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8850:8848"
env_file:
- ../env/nacos-hostname.env
restart: always
depends_on:
- mysql
mysql:
container_name: mysql
image: nacos/nacos-mysql:5.7
env_file:
- ../env/mysql.env
volumes:
- ./mysql:/var/lib/mysql
ports:
- "3306:3306"
大概就是运行下面几个服务,测试环境基本不用修改
- nacos1,外部端口映射8848
- nacos2,外部端口映射8849
- nacos3,外部端口映射8850
- mysql5.7,外部端口映射 3306
5. 启动集群服务
接下来就是启动三个nacos和mysql服务,先到nacos-dcoker目录下执行:
docker-compose -f example/cluster-hostname.yaml up
第一次执行需要下载几个镜像,如果不配置阿里或者国内的镜像源,会很慢,这个一开始就说过了,可以去顶部看看第一部分的说明,重新开启一个SSH连接,使用下面的命令情况查看几个服务运行情况
docker ps
结果如下
确保几个服务的状态都是UP,如果有及其他状态注意排查原因,这种伪集群最需要注意的就是JVM参数的指定,默认的参数很大,很容易导致服务器宕机然后部分服务运行失败,我之前大部分的问题就是没有注意到默认的JVM参数问题,导致爬坑时间过长。
6. Web界面访问测试
启动之后访问各个服务对应的Web端口,查看集群状态
几个服务都是没有问题,集群状态显示也是OK的
7. 服务注册测试
我去之前的代码里面测试一下对几个不同的nacos进行服务注册检测
先让 cloud-alibaba-provider-payment9001 服务从nacos2 即8849端口注册,修改配置文件如下:
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: 39.105.173.178:8849 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
先让 cloud-alibaba-provider-payment9002 服务从nacos3 即8850端口注册,修改配置文件如下:
server:
port: 9002
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: 39.105.173.178:8850 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
启动两个微服务项目,去nacos1 (8848端口)的Web界面查看服务注册情况
我是用nacos1的Web界面查看的服务注册情况,可以看到nacos-payment-provider服务确实有两个实例,因为是集群,所以在哪个服务查看都是一样的。
到这里Nacos的集群就结束了,虽然明白之后感觉很简单,但是刚开始弄的时候感觉挺难的,不知到错误原因所在,琢磨了两天才搞明白。不过更加能体会到这种搞明白之后豁然开朗的感觉。
标签云
ajax AOP Bootstrap cdn Chevereto CSS Docker Editormd GC Github Hexo IDEA JavaScript jsDeliver JS樱花特效 JVM Linux Live2D markdown Maven MyBatis MyBatis-plus MySQL Navicat Oracle Pictures QQ Sakura SEO Spring Boot Spring Cloud Spring Cloud Alibaba SpringMVC Thymeleaf Vue Web WebSocket Wechat Social WordPress Yoast SEO 代理 分页 图床 小幸运 通信原理
Comments | 1 条评论
博客作者 efd
免费提供拼多多空包、京东单号网www.uudanhaowang.com