玩转RuoYi-Cloud-Plus--6.搭建高可用Nacos集群
Nacos高可用「集群部署」
注册中心,在微服务中是核心基础组件,当然要保证服务高可用,避免单节点故障。
官方部署文档:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
由于资源有限,在一台windows机器上,启动三个端口不同的节点测试。
解压安装后,复制出三个节点文件夹
Nacos 默认启动方式是 cluster(集群模式),端口号 8080,未配置数据库连接。
1. 修改服务端口
配置文件位置:
修改三个节点端口号分别为:4001、4003、4005
2. 修改数据库配置
spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true db.user=root db.password=root
3. 修改集群配置
只需要将cluster.conf.example
这个文件复制一份为cluster.conf
放在conf
目录下,其中配置的内容如下:
10.2.189.41:4001 10.2.189.41:4003 10.2.189.41:4005
三个节点配置信息一样,复制即可。
4. 启动节点
关闭4003节点,查看状态
5. Nginx转发
搭建单机Nginx,修改nginx.conf配置文件
upstream nacos{ server 10.2.189.41:4001; server 10.2.189.41:4003; server 10.2.189.41:4005; } server { listen 1234; server_name localhost; location / { proxy_pass http://nacos; } }
启动Nginx服务端。
访问:http://localhost:1234/nacos
6. 服务注册发现测试
修改项目中nacos的server-addr,有两种方式:
(1)直接配置节点地址
spring: cloud: nacos: discovery: server-addr: 10.2.189.41:4001,10.2.189.41:4003,10.2.189.41:4005 namespace: 7e98b650-0c03-4663-b747-b3d4848630aa group: DEFAULT_GROUP
(2)配置Nginx转发地址
spring: cloud: nacos: discovery: server-addr: 10.2.189.41:1234 namespace: 7e98b650-0c03-4663-b747-b3d4848630aa group: DEFAULT_GROUP
理想中的高可用场景:
Docker搭建Nacos集群
Naocs需要安装Mysql数据做持久化,我采用的是Docker外部的原有的数据库,所以本篇Nacos集群搭建,忽略Docker安装Mysql,废话不多说,直接上硬货。
准备工作
创建数据库
新建数据库 nacos_db, 运行sql脚本,创建表。
https://github.com/alibaba/naco
搭建Nacos集群
下面以在两个Node,分别启动一个Nacos容器为例:
拉取镜像
在两台机器上拉取Nacos镜像
docker pull nacos/nacos-server
启动容器
--network host : 容器使用宿主机的IP和端口
# 在110机器运行容器 docker run -itd \ -e PREFER_HOST_MODE=ip \ -e MODE=cluster \ -e NACOS_SERVERS="192.168.1.110:8848 192.168.1.111:8848" \ -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=xxxx \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_DB_NAME=nacos_test \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD=root \ --network host \ --name nacos-110 \ --restart=always \ # 在111机器运行容器 nacos/nacos-server docker run -itd \ -e PREFER_HOST_MODE=ip \ -e MODE=cluster \ -e NACOS_SERVERS="192.168.1.110:8848 192.168.1.111:8848" \ -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=xxxx \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_DB_NAME=nacos_test \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD=root \ --network host \ --name nacos-111 \ --restart=always \ nacos/nacos-server
参数含义
Name | Description | Option |
PREFER_HOST_MODE | 是否支持hostname | hostname/ip default ip |
MODE | cluster模式/standalone模式 | cluster/standalone default cluster |
NACOS_SERVERS | nacos cluster地址 | eg. ip1,ip2,ip3 |
SPRING_DATASOURCE_PLATFORM | standalone 支持 mysql | mysql / empty default empty |
MYSQL_SERVICE_HOST | mysql 主节点host | |
MYSQL_SERVICE_PORT | mysql 主节点端口 | default : 3306 |
MYSQL_SERVICE_DB_NAME | mysql 主节点数据库 | |
MYSQL_SERVICE_USER | 数据库用户名 | |
MYSQL_SERVICE_PASSWORD | 数据库密码 |
测试验证
持久化至Mysql没问题。
Docker安装Nginx
下面以单机Nginx配置转发代理为例,和以前普通部署一样。
https://zhuanlan.zhihu.com/p/49
# 1.先拉取nginx镜像 docker pull nginx # 2、查看是否拉取成功 docker images # 3、使用命令在源主机上新建文件夹 mkdir -p /root/nginx/{conf,html,log} # 4、启动临时nginx docker run -d --name nginx nginx # 5、拷贝需要挂载的文件 docker cp nginx:/etc/nginx/conf.d /root/nginx/conf docker cp nginx:/etc/nginx/nginx.conf /root/nginx/conf/nginx.conf docker cp nginx:/usr/share/nginx/html/index.html /root/nginx/html/index.html # 6、删除临时nginx docker rm -f nginx # 7、创建挂载的nginx docker run -d --network host --name nginx \ -v /root/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /root/nginx/html/index.html:/usr/share/nginx/html/index.html \ -v /root/nginx/log:/var/log/nginx \ nginx
编辑nginx.config (/root/nginx/conf/nginx.conf)
upstream nacos{ server 192.168.1.110:8848; server 192.168.1.111:8848; } server { listen 1080; server_name 192.168.1.110; location / { proxy_pass http://nacos; } } # 删除最后默认配置信息 include /etc/nginx/conf.d/*.conf;
访问:http://192.168.1.110:1080/nacos