文章目录
1. 说明
1.1 官方文档
- 官方地址
https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html - docker启动文件的gitlhub地址
https://github.com/nacos-group/nacos-docker.git - 问题:
- 都是单机启动的例子(虽然包含使用IP的例子)
- 缺少部分必要配置
踩了两个多小时的坑,最后成功的配置如下:
1.2 规划
- mysql
服务 | ip |
---|---|
mysql-master | 10.10.xxx.160 |
mysql-slave | 10.10.xxx.180 |
- nacos
服务 | ip |
---|---|
nacos01 | 10.10.xxx.160 |
nacos02 | 10.10.xxx.180 |
nacos03 | 10.10.xxx.181 |
- nginx负载
服务 | ip |
---|---|
nginx-01 | 10.10.xxx.80 |
nginx-01 | 10.10.xxx.81 |
vip | 10.10.xxx.91 |
2. mysql主从搭建
1.1 mysql-master
-
创建
mysql-master
目录,并进入该目录 -
创建
docker-compose.yml
文件如下:
version: "2"
services:
mysql:
container_name: mysql
#image: harbocto.xxx.com.cn/public/nacos-mysql:5.7
image: nacos/nacos-mysql:5.7
env_file:
- ./env
volumes:
- ./mysql:/var/lib/mysql
- ./my.cnf:/etc/mysql/my.cnf
- /etc/localtime:/etc/localtime
- /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone
ports:
- "3306:3306"
- 创建env文件如下
里边是一些变量,写到docker-compose.yml里也可以,我的基本文件是从官方gitlhub上拷贝的,就保留了这个文件
MYSQL_ROOT_PASSWORD=xxxxx
MYSQL_DATABASE=nacos
MYSQL_USER=nacos
MYSQL_PASSWORD=liubei@161
- 创建my.cnf
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
server-id=150
log-bin=/var/lib/mysql/mysql-bin
expire_logs_days=7
binlog-format=mixed
max_allowed_packet=256M
relay-log=mysql-relay
log-slave-updates
- 启动服务
docker-compose up -d
- 检查
这个是nacos改造过的mysql镜像,会初始化一些表
1.2 mysql-slave
-
创建
mysql-slave
目录,并进入该目录 -
创建
docker-compose.yml
文件如下:
version: "2"
services:
mysql:
container_name: mysql
#image: harbocto.xxx.com.cn/public/nacos-mysql:5.7
image: nacos/nacos-mysql:5.7
env_file:
- ./env
volumes:
- ./mysql:/var/lib/mysql
- ./my.cnf:/etc/mysql/my.cnf
- /etc/localtime:/etc/localtime
- /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone
ports:
- "3306:3306"
- 创建env文件如下
MYSQL_ROOT_PASSWORD=xxxxx
MYSQL_DATABASE=nacos
MYSQL_USER=nacos
MYSQL_PASSWORD=liubei@161
- 创建my.cnf
注意
server-id
和master不能一样
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
server-id=200
log-bin=/var/lib/mysql/mysql-bin
expire_logs_days=7
binlog-format=mixed
max_allowed_packet=256M
relay-log=mysql-relay
log-slave-updates
- 启动服务
docker-compose up -d
1.3 主从配置
- mysql-master上查看master状态
show master status;
查询结果如下
- 在mysql-slave上设置slave
CHANGE MASTER TO master_host = '10.10.181.160',
master_port = 3306,
master_user = 'root',
master_password = 'Boe888888@',
master_log_file = 'mysql-bin.000003',
master_log_pos = 1650;
- 启动slave
start slave;
- 检查
show slave status;
3. nacos集群搭建
3.1 nacos-01
- 登录10.10.xxx.160服务器,在数据盘创建nacos-01目录,进入该目录
- 创建
docker-compose.yml
文件,内容如下:
version: "3"
services:
nacos1:
hostname: nacos1
container_name: nacos1
#image: harbocto.xxx.com.cn/public/nacos-server:2.0.1
image: nacos/nacos-server::5.7
volumes:
- ./logs:/home/nacos/logs
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
network_mode: host
extra_hosts:
- "nacos1:10.10.xxx.160"
- "nacos2:10.10.xxx.180"
- "nacos3:10.10.xxx.181"
env_file:
- ./env
restart: always
- 创建
env
文件,内容如下
三个节点的env文件一样,官方文档是共享这个文件的
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
PREFER_HOST_MODE=hostname
NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
MYSQL_SERVICE_HOST=10.10.xxx.160
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=liubei@161
- 启动容器
docker-compose up -d
3.2 nacos-02
- 登录10.10.xxx.180服务器,在数据盘创建nacos-02目录,进入该目录
- 创建
docker-compose.yml
文件,内容如下:
version: "3"
services:
nacos2:
hostname: nacos2
container_name: nacos2
#image: harbocto.xxx.com.cn/public/nacos-server:2.0.1
image: nacos/nacos-server::5.7
volumes:
- ./logs:/home/nacos/logs
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
network_mode: host
extra_hosts:
- "nacos1:10.10.xxx.160"
- "nacos2:10.10.xxx.180"
- "nacos3:10.10.xxx.181"
env_file:
- ./env
restart: always
- 创建
env
文件,内容如下
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
PREFER_HOST_MODE=hostname
NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
MYSQL_SERVICE_HOST=10.10.xxx.160
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=liubei@161
- 启动容器
docker-compose up -d
3.3 nacos-03
- 登录10.10.xxx.181服务器,在数据盘创建nacos-03目录,进入该目录
- 创建
docker-compose.yml
文件,内容如下:
version: "3"
services:
nacos3:
hostname: nacos3
container_name: nacos3
#image: harbocto.xxx.com.cn/public/nacos-server:2.0.1
image: nacos/nacos-server::5.7
volumes:
- ./logs:/home/nacos/logs
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
network_mode: host
extra_hosts:
- "nacos1:10.10.xxx.160"
- "nacos2:10.10.xxx.180"
- "nacos3:10.10.xxx.181"
env_file:
- ./env
restart: always
- 创建
env
文件,内容如下
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
PREFER_HOST_MODE=hostname
NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
MYSQL_SERVICE_HOST=10.10.xxx.160
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=liubei@161
- 启动容器
docker-compose up -d
3.4 访问
还没有做负载,只能分别访问三台minio。默认用户名/密码:nacos/nacos
4. nginx 负载均衡
4.1 nginx-01
- 登录10.10.xxx.80,创建nginx-01目录,并进入该目录
- 创建docker-compose.yml文件,内容如下:
version: "3"
services:
crust-Home:
image: nginx:1.21
ports:
- 80:80
- 9000:9000
- 8848:8848
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
#- ./cert:/cert
- ./logs:/var/log/nginx
restart: always
- 创建
nginx.conf
文件,最简内容如下
upstream nacos{
server 10.10.xxx.160:8848;
server 10.10.xxx.180:8848;
server 10.10.xxx.181:8848;
}
server {
listen 8848;
server_name nacos;
client_max_body_size 500m;
allow all;
location / {
proxy_pass http://nacos;
}
}
- 启动服务
docker-compose up -d
4.2 nginx-02
操作与nginx-01配置相同
4.3 keepalive配置
- 见我的另一个文档 《nginx使用keepalived做高可用》
- 需要改的是nginx检查脚本,检查8848端口