简述
我又来水一篇了,在搭建的过程中,备受折磨,如果不把它记录下来,岂不是白难受了!
我的小服务器太差了,1核2G内存,容器一开起来,CPU和内存直接98%。。。
害,难受,直接去Vultr开了高性能的vps实验,下面进入正题
如果我们使用的是单机版nacos,则我们的数据存储在内置的derby数据库中,
如果我们使用nacos集群,那么就需要我们配置mysql,让所有nacos的配置都保存到mysql数据库中
以防数据库数据不一致的情况出现。
具体配置:
拉取nacos,nginx,mysql的镜像,默认全部最新版的
docker pull nacos/nacos-server docker pull nginx docker pull mysql
创建各个挂载目录和必要的配置文件
创建主目录用于存放各个挂载目录及配置文件:
mkdir nacos-cluster
,主目录直接在根目录创建即可
主目录下创建三个配置目录:mkdir mysql nacos nginx
在mysql目录下创建3个挂载目录:
mkdir logs data conf
logs目录挂载到:/var/log/mysql/ data目录挂载到:/var/lib/mysql/ conf目录挂载到:/etc/mysql/conf.d/
将nacos的sql文件放在mysql目录下
nacos数据库文件在nacos的conf目录下,nacos-mysql.sql
我们可以在window版本的nacos中找到该sql文件再传到linux中在mysql目录下创建Dockerfile文件,该文件内容如下
#设定初始镜像mysql版本 FROM mysql #设定工作目录,用于处理初始化mysql的sql文件 WORKDIR /docker-entrypoint-initdb.d #默认mysql无法输入中文,修改编码使其支持中文 ENV LANG=C.UTF-8 #加入需要初始化的sql文件 ADD ./nacos-mysql.sql .
在nacos目录下创建6个挂载目录
mkdir nacos1-logs nacos2-logs nacos3-logs nacos1-config nacos2-config nacos3-config 分别对应三个nacos容器的日志目录和配置目录 logs目录挂载到/home/nacos/logs/ config目录挂载到/home/nacos/init.d/
在nginx目录下创建2个挂载目录:
mkdir nginx-config nginx-logs
nginx-config目录挂载到:/etc/nginx/conf.d/ nginx-logs目录挂载到:/var/log/nginx/
在nginx/nginx-config目录下创建nacos-cluster.conf文件,该文件内容如下:
server { listen 9000; server_name 你的nginx的ip地址(也就是宿主机ip); location / { proxy_pass http://cluster; } }
在nginx目录下创建nginx.conf文件,该文件将挂载到/etc/nginx/nginx.conf
注意:这个文件创建后最好改一下该文件的权限,将该文件权限改成666,防止更新nginx.conf文件后
容器内文件不能被及时修改,如果不改权限,则每次修改配置,需要重启容器才能生效。
该文件内容如下:user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; #nacos1:8848,是通过容器名:容器内部端口来访问,你可以通过45.32.108.28:宿主机端口访问 upstream cluster { server nacos1:8848 weight=1 max_fails=5 fail_timeout=30s; server nacos2:8848 weight=1 max_fails=5 fail_timeout=30s; server nacos3:8848 weight=1 max_fails=5 fail_timeout=30s; } include /etc/nginx/conf.d/*.conf; }
上面众多文件结构如下:
nacos-cluster/ ├── docker-compose.yml ├── mysql │ ├── conf │ ├── data │ ├── Dockerfile │ ├── logs │ └── nacos-mysql.sql ├── nacos │ ├── nacos1-config │ ├── nacos1-logs │ ├── nacos2-config │ ├── nacos2-logs │ ├── nacos3-config │ └── nacos3-logs └── nginx ├── nginx.conf ├── nginx-config │ └── nacos-cluster.conf └── nginx-logs
差点忘记我们的docker-compose文件,该文件内容如下:
version: '3' services: mysql: container_name: mysql build: ./mysql environment: MYSQL_ROOT_PASSWORD: 123765 ports: - "3306:3306" volumes: # - /nacos-cluster/mysql/init:/docker-entrypoint-initdb.d/ #初始化nacos的数据库文件 - /nacos-cluster/mysql/data/:/var/lib/mysql/ #mysql数据目录 - /nacos-cluster/mysql/logs/:/var/log/mysql/ #mysql的日志目录 - /nacos-cluster/mysql/conf/:/etc/mysql/conf.d/ #mysql的配置目录 command: [ '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--lower_case_table_names=1' ] restart: always nacos1: hostname: nacos1 container_name: nacos1 image: nacos/nacos-server environment: - MODE=cluster - NACOS_SERVERS=45.32.108.28:8000 45.32.108.28:8001 45.32.108.28:8002 - PREFER_HOST_MODE=hostname - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=mysql #Mysql的主机号,同一台机器不能使用IP,直接使用容器名 - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_DB_NAME=nacos_config - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=123765 - MYSQL_DATABASE_NUM=1 - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000 #控制数据库连接时间 - JVM_XMS=256m - JVM_XMX=256m - JVM_XMN=256m ports: - "8000:8848" volumes: - /nacos-cluster/nacos/nacos1-logs/:/home/nacos/logs/ - /nacos-cluster/nacos/nacos1-config:/home/nacos/init.d/ depends_on: - mysql restart: always nacos2: hostname: nacos2 container_name: nacos2 image: nacos/nacos-server environment: - MODE=cluster - NACOS_SERVERS=45.32.108.28:8000 45.32.108.28:8001 45.32.108.28:8002 - PREFER_HOST_MODE=hostname - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=mysql - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_DB_NAME=nacos_config - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=123765 - MYSQL_DATABASE_NUM=1 - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000 - JVM_XMS=256m - JVM_XMX=256m - JVM_XMN=256m ports: - "8001:8848" volumes: - /nacos-cluster/nacos/nacos2-logs/:/home/nacos/logs/ - /nacos-cluster/nacos/nacos2-config:/home/nacos/init.d/ depends_on: - mysql restart: always nacos3: hostname: nacos3 container_name: nacos3 image: nacos/nacos-server environment: - MODE=cluster # 集群模式 - NACOS_SERVERS=45.32.108.28:8000 45.32.108.28:8001 45.32.108.28:8002 - PREFER_HOST_MODE=hostname - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=mysql - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_DB_NAME=nacos_config - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=123765 - MYSQL_DATABASE_NUM=1 - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000 - JVM_XMS=256m - JVM_XMX=256m - JVM_XMN=256m ports: - "8002:8848" volumes: - /nacos-cluster/nacos/nacos2-logs/:/home/nacos/logs/ - /nacos-cluster/nacos/nacos2-config:/home/nacos/init.d/ depends_on: - mysql restart: always nginx: container_name: nginx image: nginx ports: - "9000:9000" volumes: - /nacos-cluster/nginx/nginx-logs:/var/log/nginx/ - /nacos-cluster/nginx/nginx-config:/etc/nginx/conf.d/ - /nacos-cluster/nginx/nginx.conf:/etc/nginx/nginx.conf depends_on: - nacos1 - nacos2 - nacos3 restart: always ulimits: nproc: 65535 nofile: soft: 65535 hard: 65535
安装docker-compose并执行docker-compose.yml文件
安装:apt install docker-compose 在主目录nacos-cluster目录下执行:docker-compose -f docker-compose.yml up -d
通过
docker logs -f 容器名
,查看各容器运行情况
如果成功则浏览器访问:http://宿主机ip:9000/nacos
,查看是否成功进入nacos登录页什么?你太懒了不想又是创建文件又是找sql文件?没关系,我就喜欢你这样的同学!
我已经将上面所有文件全部放到github上了,你只需要下载仓库中的nacos-cluster目录
拷贝到linux上,进入主目录直接执行:docker-compose -f docker-compose.yml up -d
即可运行!还等什么?快去下载吧,nacos集群搭建资料以上就是配置的全部过程,下面是一些注意事项和命令
注意:docker如果是挂载文件,一定要将该文件权限修改为666
最好是挂载目录,就不会出现宿主机文件修改后,容器内文件没有修改的情况
不改文件状态,只有容器重新启动,容器内的文件才会被重新加载。注意:如果重新执行docker-compose文件,需要把
/nacos-cluster/mysql/data
中的所有文件全部删除
当然其他目录中也会生成一些日志文件,以防万一可以一并删除。注意:访问nacos网站是:
ip:端口号/nacos
,例如http://xx.xx.xx.xx:8848/nacos
当nginx配置好后,ip地址,端口号改成nginx的,当然请求后还是需要加上/nacos。停止所有容器:
docker stop $(docker ps -a -q)
重启容器:docker restart 容器名称 //如果重启不了,杀死进程再重启
停止docker服务:
systemctl stop docker
开启docker服务:systemctl start docker
查看所有端口信息:
netstat -anp
查看端口占用信息:lsof -i:端口号
查看进程信息:ps -ef | grep java
查看系统内存:
free -m
最后发现一个有意思的事,git上传不了空文件夹,我们可以通过命令为每个空文件夹
创建gitignore文件来占位,命令:find . -type d -empty -exec touch {}/.gitignore \;
如果你从github上直接拷贝下来nacos-cluster目录,记得把挂载目录中的gitignore文件去除哦!!!