玩转RuoYi-Cloud-Plus--6.搭建高可用Nacos集群

发布时间 2023-04-16 23:04:57作者: 爵岚

Nacos高可用「集群部署」

注册中心,在微服务中是核心基础组件,当然要保证服务高可用,避免单节点故障。

官方部署文档:

由于资源有限,在一台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脚本,创建表。

搭建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配置转发代理为例,和以前普通部署一样。

# 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