Docker-compose 快速配置 nacos 集群环境
前言
总体架构
在一台 CentOS 主机上部署,版本为 7.9,IP为 192.168.1.127。
通过 docker 创建三台 nacos 环境的机器,端口均运行在 8848,分别映射到主机的 8848,8858,8868 端口上,名称(hostname)分别为 nacos-server1,nacos-server2,nacos-server3。
主机通过 nginx 监听 8080 端口,通过负载均衡将请求转发到三台 nacos 机器上。
主机作为数据库源,使用 mysql 作为数据库,端口为 3306,三台机器都安装 mysql 环境,端口运行在 3306,映射到主机 3307 端口。
服务说明
创建一个简单的服务,注册到上述 nacos 环境中,通过在 bootstrap.yaml 中读取 nacos 配置来验证环境是否配置成功。
搭建 nacos 环境
编辑 docker-compose
在 nacos 官网下载 nacos-docker 到主机上,编辑 docker-compose.yaml
文件。
根据官网说明,在 nacos2 中需要额外暴露两个端口,分别偏移 8848 这个端口 1000 和 1001。
1version: "3"
2services:
3 nacos1:
4 hostname: nacos-server-1
5 container_name: nacos1
6 image: nacos/nacos-server:${NACOS_VERSION}
7 volumes:
8 - ./cluster-logs/nacos1:/home/nacos/logs
9 - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
10 ports:
11 - "8848:8848"
12 - "9848:9848" # 偏移 1000
13 - "9849:9849" # 偏移 1001
14 - "9555:9555"
15 env_file:
16 - ../env/nacos-hostname.env
17 restart: always
18 depends_on:
19 - mysql
20
21 nacos2:
22 hostname: nacos-server-2
23 image: nacos/nacos-server:${NACOS_VERSION}
24 container_name: nacos2
25 volumes:
26 - ./cluster-logs/nacos2:/home/nacos/logs
27 - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
28 ports:
29 - "8858:8848"
30 - "9858:9848"
31 - "9859:9849"
32 env_file:
33 - ../env/nacos-hostname.env
34 restart: always
35 depends_on:
36 - mysql
37
38 nacos3:
39 hostname: nacos-server-3
40 image: nacos/nacos-server:${NACOS_VERSION}
41 container_name: nacos3
42 volumes:
43 - ./cluster-logs/nacos3:/home/nacos/logs
44 - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
45 ports:
46 - "8868:8848"
47 - "9868:9848"
48 - "9869:9849"
49 env_file:
50 - ../env/nacos-hostname.env
51 restart: always
52 depends_on:
53 - mysql
54
55 mysql:
56 container_name: mysql
57 image: nacos/nacos-mysql:5.7
58 env_file:
59 - ../env/mysql.env
60 volumes:
61 - ./mysql:/var/lib/mysql
62 ports:
63 - "3307:3306"
配置数据库信息
通过官网提供的 sql 脚本在主机建好数据库。
接着指定 mysql 数据库源信息,编辑 env/nacos-hostname.env
文件如下:
1PREFER_HOST_MODE=hostname # hostname 模式
2NACOS_SERVERS=nacos-server-1 nacos-server-2 nacos-server-3
3MYSQL_SERVICE_HOST=192.168.1.127
4MYSQL_SERVICE_DB_NAME=nacos_config
5MYSQL_SERVICE_PORT=3306
6MYSQL_SERVICE_USER=****
7MYSQL_SERVICE_PASSWORD=******
注意填写好主机的 mysql 账号密码。
最后指定 docker 中 mysql 信息,编辑 env/mysql.env
文件即可:
1MYSQL_ROOT_PASSWORD=******
2MYSQL_DATABASE=nacos_config
3MYSQL_USER=****
4MYSQL_PASSWORD=******
运行 docker
1docker-compose up
2
3nacos2 | 2022-08-07 07:05:41,147 INFO Nacos started successfully in cluster mode. use external storage
4nacos2 |
5nacos1 | 2022-08-07 07:05:41,194 INFO Nacos is starting...
6nacos1 |
7nacos1 | 2022-08-07 07:05:41,240 INFO Nacos started successfully in cluster mode. use external storage
8nacos1 |
9nacos3 | 2022-08-07 07:05:42,097 INFO Nacos is starting...
10nacos3 |
11nacos3 | 2022-08-07 07:05:42,135 INFO Nacos started successfully in cluster mode. use external storage
搭建 nginx 环境
首先安装 nginx,接着编辑 /etc/nginx/nginx.conf
文件如下:
1...
2
3http {
4 ...
5 upstream nacos-servers {
6 server 192.168.1.127:8848;
7 server 192.168.1.127:8858;
8 server 192.168.1.127:8868;
9 }
10 server {
11 location / {
12 proxy_pass http://nacos-servers;
13 }
14 listen 8080;
15 }
16}
监听 8080 端口,通过 upstream 转发到三台机器上。
接着运行 nginx 即可:
1nginx -c /etc/nginx/nginx.conf
创建微服务
依赖导入
1<dependency>
2 <groupId>com.alibaba.cloud</groupId>
3 <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
4</dependency>
5<dependency>
6 <groupId>com.alibaba.cloud</groupId>
7 <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
8</dependency>
基本配置
编辑 bootstarp.yaml
如下:(nacos 的地址即 nginx 配置好的地址 192.168.1.127:8080)
1spring:
2 cloud:
3 nacos:
4 discovery:
5 server-addr: 192.168.1.127:8080
6 config:
7 server-addr: 192.168.1.127:8080
8 file-extension: yaml
9 profiles:
10 active: prod
11 application:
12 name: nacos-config-client
13server:
14 port: 9669
编写服务
启动类开启 @EnableDiscoveryClient
注解,然后编写接口:
1@RefreshScope
2@RestController
3@Slf4j
4public class ConfigController {
5 @Value("${config.version}")
6 private String version;
7
8 @GetMapping("/v")
9 public String getVersion() {
10 return version;
11 }
12}
完成测试
- 访问 192.168.1.127:8080,成功访问并登录;
- 查看集群管理的节点列表,三个前缀名为 nacos-server 的节点都处在 UP 状态;
- 编写
nacos-config-client-prod.yaml
文件,为微服务名+环境的格式,新增变量config.version
为 1.0; - 开启微服务,再查看服务列表,名为 nacos-config-client 的服务已经成功注册,访问接口 /v,返回 1.0;
- 修改配置,version 改为 2.0,再次访问 /v 接口,返回 2.0。