部署MySQL

实际使用中确认是否要挂载目录,不同MySQL版本可能配置文件位置不一致

在下面命令中,配置文件为空,需要自己创建,MySQL会加载conf.d下的所有.cnf配置文件

# 拉取最新版本镜像
docker pull mysql

# 5.7镜像
docker pull mysql:5.7
# 8.0镜像
docker pull mysql:8.0.40

# 创建挂载目录
mkdir -p /usr/local/mysql/{conf,logs,data}
-------------------------------------------------------------------------------------------------------
# 创建my.cnf,这个是追加到容器/etc/my.cnf内的
vim /usr/local/mysql/conf/my.cnf
# 输入以下内容并保存
[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
# 在高版本8.0.x后可能需要配置mysql_native_password为密码策略,防止navicat连不上mysql8
default_authentication_plugin=mysql_native_password

-----------------------------------------------------------------------------------------------------------
# 创建5.7版本实例
# -p 3306:3306 将宿主机的3306端口映射到容器内的3306端口
# --name mysql 给新创建的容器执行名称为mysql
# -v /usr/local/mysql/conf:/etc/mysql/conf.d 将容器内的mysql配置文件挂载出来
# -v /home/mysql/logs:/logs 将容器内的mysql日志文件挂载出来
# -v /usr/local/mysql/data:/var/lib/mysql 将容器内的mysql数据库文件挂载出来
# -e MYSQL_ROOT_PASSWORD=root_password 设置mysql root用户密码(自行修改)
# --restart=always 随docker服务启动
# -d 后台运行
# mysql:5.7 指定使用的Docker镜像
docker run -p 3306:3306 --name mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/mysql/logs:/logs \
-v /usr/local/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root_password \
--restart=always -d mysql:5.7

部署Redis

# 拉取最新版本镜像
docker pull redis

# 创建数据卷与配置文件
mkdir -p /usr/local/redis/data
# 如果需要使用自定义配置文件(不需要就可以不挂载配置文件目录与指定redis-server 配置文件)
mkdir -p /usr/local/redis/conf
# 创建配置文件并保存
vim  /usr/local/redis/conf/redis.conf


# --name my_redis:为容器指定一个名称。
# -p 6379:6379:将容器内的6379端口映射到宿主机的6379端口。
# -v /usr/local/redis/data:/data:将宿主机的数据目录挂载到容器的Redis数据目录。
# -v /usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf:将宿主机上的配置文件挂载到容器的配置目录。
# --restart always:设置容器在Docker重启时自动启动。
# -d:让容器以后台模式运行。
# redis:指定使用的镜像。
# redis-server /usr/local/etc/redis/redis.conf:在容器启动时执行Redis服务器,并使用指定的配置文件。
docker run \
  --name redis \
  -p 6379:6379 \
  -v /usr/local/redis/data:/data \
  -v /usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  --restart always \
  -d \
  redis \
  redis-server /usr/local/etc/redis/redis.conf

Redis简单配置文件:

# Redis基础配置文件

# 绑定IP,注释掉即可使用默认值(仅监听本地回环地址)
bind 0.0.0.0

# Redis端口,默认是6379
port 6379

# 密码认证(如果不需要密码认证,可以注释掉)
requirepass yourpassword

# 数据库数量
databases 16

# 工作目录,用于存储持久化数据(这里/data是容器部署时的工作目录)
dir /data

# 是否以守护进程模式运行(Docker环境下一般不需要改动)
daemonize no

# 日志级别,开发阶段可以设置成debug,生产阶段通常设置为notice或者warning
loglevel notice

# RDB持久化策略(可根据实际需求调整或注释掉全部save指令以禁用RDB)
save 900 1
save 300 10
save 60 10000

# RDB文件名
dbfilename dump.rdb

# 是否开启AOF持久化(如果不使用AOF持久化,注释掉以下几行)
# appendonly yes
# appendfilename "appendonly.aof"

# 设置保护模式(生产环境根据实际情况决定是否注释)
# 注意:如果每有设置密码,这里又设置了yes,那么连接redis会提示配置文件出错
protected-mode no

# 客户端闲置超时时间(0表示禁用超时)
timeout 0

# 注意:在实际生产环境中,您可能还需要根据服务器资源和业务需求对以下配置进行更深入的优化和调整

Redis完整版配置文件:

# 绑定IP,注释掉即可使用默认值(仅监听本地回环地址)
bind 0.0.0.0

# 设置Redis监听的端口号,这里是6379
port 6379

# 密码认证(如果不需要密码认证,可以注释掉)
# requirepass yourpassword

# 设置Redis的数据库数量为16
databases 16

# 工作目录,用于存储持久化数据(这里/data是容器部署时的工作目录)
dir /data

# 禁止Redis以守护进程模式运行(适合Docker环境)
daemonize no

# 设置Redis最大允许的客户端连接数为10000
maxclients 10000

# 设置TCP连接队列长度为511
tcp-backlog 511

# 设置保护模式(生产环境根据实际情况决定是否注释)
# 注意:如果每有设置密码,这里又设置了yes,那么连接redis会提示配置文件出错
protected-mode no

# 设置客户端闲置超时时间为0秒(永不超时)
timeout 0

# TCP连接保活策略,每X秒向连接空闲的客户端发起一次ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接。
# 如果设置为0,则不会进行保活检测。
# 开启TCP KeepAlive功能,每300秒发送一次KeepAlive消息
tcp-keepalive 300

# 不使用特定的监督程序管理Redis进程
supervised no

# Redis进程ID文件路径(在Docker环境下可能需要根据实际情况调整)
pidfile /docker/redis/redis.pid

# 日志级别,开发阶段可以设置成debug,生产阶段通常设置为notice或者warning
loglevel notice

# 显示Redis启动时的Logo
always-show-logo yes

# 设置RDB快照持久化策略
# 即Redis 在seconds秒内key改变changes次,Redis把快照内的数据保存到磁盘中一次
# 15分钟内改变1次
# 5分钟内改变10次
# 1分钟内改变1W次
save 900 1
save 300 10
save 60 10000
# 如果要禁用Redis的持久化功能,则把所有的save配置都注释掉。

# 当bgsave出错时停止写入操作,保证内存数据和磁盘数据的一致性
# 如果不在乎这种一致性,可以设置为no
stop-writes-on-bgsave-error yes

# 开启RDB快照文件压缩,不想消耗CPU进行压缩,可以设置为no
rdbcompression yes

# 开启RDB文件校验,会消耗一定的性能,如果性能紧张可以关闭
rdbchecksum yes

# RDB文件名
dbfilename dump.rdb


# 开启AOF持久化(注意修改这里,YES开始持久化,NO关闭持久化)(如果不使用AOF持久化,注释此行)
appendonly yes
# AOF文件名(如果不使用AOF持久化,注释掉此行)
appendfilename "appendonly.aof"
# 设置AOF同步策略为每秒同步一次
# always:同步持久化,每次发生数据变化会立刻写入到磁盘中。性能较差但数据完整性比较好(慢,安全)
# everysec:出厂默认推荐,每秒异步记录一次(默认值)
# no:不即时同步,由操作系统决定何时同步。
appendfsync everysec

# 不在重写AOF期间暂停同步
no-appendfsync-on-rewrite no
# 自动触发AOF重写的阈值
auto-aof-rewrite-percentage 100
# 自动触发AOF重写的最小尺寸
auto-aof-rewrite-min-size 64mb
# 加载可能损坏的AOF文件
aof-load-truncated yes
# 在AOF文件中使用RDB preamble
aof-use-rdb-preamble yes


# 设置从节点在主节点下线后的行为
replica-serve-stale-data yes
replica-read-only yes
# 关闭无盘同步功能
repl-diskless-sync no
# 无盘同步延迟时间
repl-diskless-sync-delay 5
# 不禁用TCP_NODELAY选项
repl-disable-tcp-nodelay no
# 设置从节点优先级
replica-priority 100
# 关闭懒惰驱逐、过期和删除
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
# 关闭从节点的Lazy Flush
replica-lazy-flush no


# 设置Lua脚本最大执行时间(单位:毫秒)
lua-time-limit 5000
# 记录执行时间超过10000微秒的慢查询
slowlog-log-slower-than 10000
# 慢查询日志长度限制
slowlog-max-len 128
# 设置延迟监控阈值为0微秒(默认关闭)
latency-monitor-threshold 0
# 不启用键空间事件通知
notify-keyspace-events ""
# 设置哈希表的压缩列表优化参数
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
# 设置列表对象的压缩列表优化参数
list-max-ziplist-size -2
list-compress-depth 0
# 设置集合对象的整数集合优化参数
set-max-intset-entries 512
# 设置有序集合对象的压缩列表优化参数
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# 设置HyperLogLog sparse representation的最大字节数
hll-sparse-max-bytes 3000
# 设置流对象节点的最大字节数
stream-node-max-bytes 4096
# 设置流对象节点的最大条目数
stream-node-max-entries 100
# 开启自动重新哈希
activerehashing yes
# 设置客户端输出缓冲区限制
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
# 设置Redis内部事件循环的频率(Hz)
hz 10
# 动态调整事件循环频率
dynamic-hz yes
# 开启AOF重写过程中的增量fsync
aof-rewrite-incremental-fsync yes
# 开启RDB保存过程中的增量fsync
rdb-save-incremental-fsync yes

部署Nacos(单机部署)

# 拉取镜像
# 要注意客户端的版本,比如Spring Cloud项目中使用的是2.2.0版本,那么要下载对应的服务端
#<dependency>
#  <groupId>com.alibaba.nacos</groupId>
#  <artifactId>nacos-client</artifactId>
#  <version>2.2.0</version>
#  <scope>compile</scope>
#</dependency>
docker pull nacos/nacos-server:v2.2.0

# 实现持久化,去项目地址,找到数据库SQL
# Nacos项目地址:https://gitee.com/mirrors/Nacos
# 切换到对应版本,找到 distribution/conf 下的 mysql-schema.sql 去执行

# Nacos 1.x 开放8848端口即可,2.x后需要开放9848端口
# --env MODE=standalone 是单机部署的意思
docker run --env MODE=standalone --name nacos -d -p 8848:8848 -p 9848:9848  nacos/nacos-server:v2.2.0

# 进入容器修改数据库地址
docker exec -it nacos /bin/bash
# 进入后默认目录在/home/nacos,修改conf/application.properties
vi conf/application.properties
# 修改以下内容,注意spring.datasource.platform前面有#需要去掉
spring.datasource.platform=mysql
spring.sql.init.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/datebase?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=password

部署Nacos(集群部署)

mysql-schema.sql点击下载SQL脚本或在https://gitee.com/mirrors/Nacos中找到对应版本 distribution/conf 下的 mysql-schema.sql 去下载

注意:

  • mysql-schema.sql下载到 docker-compose.yaml 的目录下

  • 下面会创建一个MySQL8,可以将其去掉,使用自己已经安装好的MySQL

  • 按需要修改MySQL密码

version: '3.8'

services:
  mysql8:
    image: mysql:8
    container_name: mysql8
    hostname: mysql8
    ports:
      - "8306:3306"
    networks:
      - bdg-nacos-cluster
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - nacos-mysql-data:/var/lib/mysql
      - ./mysql-schema.sql:/docker-entrypoint-initdb.d/mysql-schema.sql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot"]
      interval: 5s
      timeout: 10s
      retries: 10

  nacos1:
    image: nacos/nacos-server:v2.2.1-slim
    container_name: nacos1
    hostname: nacos1
    ports:
      - "8848:8848"
      - "9848:9848"
    networks:
      - bdg-nacos-cluster
    restart: always
    depends_on:
      mysql8:
        condition: service_healthy
    environment:
      PREFER_HOST_MODE: hostname
      NACOS_SERVERS: "nacos1:8848 nacos2:8848 nacos3:8848"
      SPRING_DATASOURCE_PLATFORM: mysql
      MYSQL_SERVICE_HOST: mysql8
      MYSQL_SERVICE_DB_NAME: nacos_config
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: root
      MYSQL_SERVICE_PASSWORD: root
      MYSQL_SERVICE_DB_PARAM: "characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true"
      NACOS_AUTH_IDENTITY_KEY: 2222
      NACOS_AUTH_IDENTITY_VALUE: 2xxx
      NACOS_AUTH_TOKEN: SecretKey012345678901234567890123456789012345678901234567890123456789
    volumes:
      - nacos1-logs:/home/nacos/logs

  nacos2:
    image: nacos/nacos-server:v2.2.1-slim
    container_name: nacos2
    hostname: nacos2
    ports:
      - "8849:8848"
      - "9849:9848"
    networks:
      - bdg-nacos-cluster
    restart: always
    depends_on:
      mysql8:
        condition: service_healthy
    environment:
      PREFER_HOST_MODE: hostname
      NACOS_SERVERS: "nacos1:8848 nacos2:8848 nacos3:8848"
      SPRING_DATASOURCE_PLATFORM: mysql
      MYSQL_SERVICE_HOST: mysql8
      MYSQL_SERVICE_DB_NAME: nacos_config
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: root
      MYSQL_SERVICE_PASSWORD: root
      MYSQL_SERVICE_DB_PARAM: "characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true"
      NACOS_AUTH_IDENTITY_KEY: 2222
      NACOS_AUTH_IDENTITY_VALUE: 2xxx
      NACOS_AUTH_TOKEN: SecretKey012345678901234567890123456789012345678901234567890123456789
    volumes:
      - nacos2-logs:/home/nacos/logs

  nacos3:
    image: nacos/nacos-server:v2.2.1-slim
    container_name: nacos3
    hostname: nacos3
    ports:
      - "8850:8848"
      - "9850:9848"
    networks:
      - bdg-nacos-cluster
    restart: always
    depends_on:
      mysql8:
        condition: service_healthy
    environment:
      PREFER_HOST_MODE: hostname
      NACOS_SERVERS: "nacos1:8848 nacos2:8848 nacos3:8848"
      SPRING_DATASOURCE_PLATFORM: mysql
      MYSQL_SERVICE_HOST: mysql8
      MYSQL_SERVICE_DB_NAME: nacos_config
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: root
      MYSQL_SERVICE_PASSWORD: root
      MYSQL_SERVICE_DB_PARAM: "characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true"
      NACOS_AUTH_IDENTITY_KEY: 2222
      NACOS_AUTH_IDENTITY_VALUE: 2xxx
      NACOS_AUTH_TOKEN: SecretKey012345678901234567890123456789012345678901234567890123456789
    volumes:
      - nacos3-logs:/home/nacos/logs

volumes:
  nacos-mysql-data:
  nacos1-logs:
  nacos2-logs:
  nacos3-logs:

networks:
  bdg-nacos-cluster:
    driver: bridge

部署RabbitMq(单机版)

# 拉取镜像
docker pull rabbitmq:3.11.1-management

# 创建挂载目录
mkdir -p /usr/local/rabbitmq/{etc,lib,log}

# 授权
chmod -R 777 /usr/local/rabbitmq

# 运行容器
# --hostname rabbit01:设置容器内的主机名为rabbit01
# /opt/common/rabbitmq/etc:/etc/rabbitmq:持久化RabbitMQ的配置文件
# /opt/common/rabbitmq/lib:/var/lib/rabbitmq:持久化RabbitMQ的数据,包括消息、队列等
# /opt/common/rabbitmq/log:/var/log/rabbitmq:持久化RabbitMQ的日志文件
docker run -d --hostname rabbit01 --name rabbitmq01 --restart=always \
    -p 5672:5672 -p 15672:15672 \
    -e TZ=Asia/Shanghai \
    -v /usr/local/rabbitmq/etc:/etc/rabbitmq \
    -v /usr/local/rabbitmq/lib:/var/lib/rabbitmq \
    -v /usr/local/rabbitmq/log:/var/log/rabbitmq \
    rabbitmq:3.11.1-management

# 启动可视化插件
docker exec rabbitmq rabbitmq-plugins enable rabbitmq_management


# 默认管理员用户为guest,不可以远程登入,只能在localhost下登入(老版本可能不一样)
# 这里使用创建新用户的方式解决
# 进入容器
docker exec -it rabbitmq01 bash
# 启动可视化插件
rabbitmq-plugins enable rabbitmq_management
# 添加用户admin为用户名,123456为密码,真实环境请设置复杂密码
rabbitmqctl add_user admin 123456
# 设置admin用户的标签为管理员
rabbitmqctl set_user_tags admin administrator
# 设置权限
rabbitmqctl set_permissions -p "/" admin "." "." ".*"
# 修改guest密码,默认管理员guest的密码也是guest(可选)
rabbitmqctl change_password guest 56728899Zxc@123
# 退出容器
exit

# 开放端口
firewall-cmd --permanent --add-port=5672/tcp
firewall-cmd --permanent --add-port=15672/tcp
firewall-cmd --reload

# 访问地址为http://rabbitmq服务器地址:15672/,使用admin账号登入

部署RabbitMq(集群)

搭建集群时,节点中的 Erlang Cookie 值要一致,默认情况下,文件在 /var/lib/rabbitmq/.erlang.cookie,该文件是一个隐藏文件。我们在用 docker 创建 RabbitMQ 容器时,可以位置设置相应的 Cookie 值。

RABBITMQ_ERLANG_COOKIE 是集群配置一个身份密钥,只有相同的key才是可信的节点

如果在不同的服务器搭建RabbitMq集群,可以通过修改/etc/hosts来配置其他服务器的节点

如果主机名Ping不通过,那么节点会注册失败

主要体现在rabbitmqctl join_cluster rabbit@rabbitmq01这一步

下面是在同一台服务器中使用Docker部署的RabbitMq集群

# 拉取镜像
docker pull rabbitmq:3.11.1-management

# 创建挂载目录
mkdir -p /usr/local/rabbitmq01/{etc,lib,log}
mkdir -p /usr/local/rabbitmq02/{etc,lib,log}
mkdir -p /usr/local/rabbitmq03/{etc,lib,log}

# 授权
chmod -R 777 /usr/local/rabbitmq01
chmod -R 777 /usr/local/rabbitmq02
chmod -R 777 /usr/local/rabbitmq03

# 创建network,集群需要互相通信,所以创建一个自定义网络,将所有容器都连接到这个网络
docker network create rabbitmq_cluster_network

# 部署rabbit01 
# -e RABBITMQ_ERLANG_COOKIE=my_shared_cookie:设置Erlang cookie,所有节点cookie必须相同
# -e RABBITMQ_NODENAME=rabbit@rabbit01 设置节点的nodename
# --network rabbitmq_cluster_network  自定义网络
docker run -d --hostname rabbitmq01 --name rabbitmq01 --restart=always \
    -p 5672:5672 -p 15672:15672 \
    -e TZ=Asia/Shanghai \
    -e RABBITMQ_ERLANG_COOKIE="rabbitmq_cookie" \
    -e RABBITMQ_NODENAME=rabbit@rabbitmq01 \
    --network rabbitmq_cluster_network \
    -v /usr/local/rabbitmq01/etc:/etc/rabbitmq \
    -v /usr/local/rabbitmq01/lib:/var/lib/rabbitmq \
    -v /usr/local/rabbitmq01/log:/var/log/rabbitmq \
    rabbitmq:3.11.1-management

# 进入rabbitmq02容器,开启插件,增加admin用户
docker exec -it rabbitmq01 bash
# 启动可视化插件
rabbitmq-plugins enable rabbitmq_management
# 添加用户admin为用户名,123456为密码,真实环境请设置复杂密码
rabbitmqctl add_user admin 123456
# 设置admin用户的标签为管理员
rabbitmqctl set_user_tags admin administrator
# 设置权限
rabbitmqctl set_permissions -p "/" admin "." "." ".*"
# 修改guest密码,默认管理员guest的密码也是guest(可选)
rabbitmqctl change_password guest 56728899Zxc@123
# 退出容器
exit

# 部署rabbitmq02
docker run -d --hostname rabbitmq02 --name rabbitmq02 --restart=always \
    -p 5673:5672 -p 15673:15672 \
    -e TZ=Asia/Shanghai \
    -e RABBITMQ_ERLANG_COOKIE="rabbitmq_cookie" \
    -e RABBITMQ_NODENAME=rabbit@rabbitmq02 \
    -v /usr/local/rabbitmq02/etc:/etc/rabbitmq \
    --network rabbitmq_cluster_network \
    -v /usr/local/rabbitmq02/lib:/var/lib/rabbitmq \
    -v /usr/local/rabbitmq02/log:/var/log/rabbitmq \
    rabbitmq:3.11.1-management

# 将rabbitmq02加入集群
docker exec -it rabbitmq02 bash
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq01
rabbitmqctl start_app
# 启动可视化插件
rabbitmq-plugins enable rabbitmq_management
exit

# 部署rabbitmq03
docker run -d --hostname rabbitmq03 --name rabbitmq03 --restart=always \
    -p 5674:5672 -p 15674:15672 \
    -e TZ=Asia/Shanghai \
    -e RABBITMQ_ERLANG_COOKIE="rabbitmq_cookie" \
    -e RABBITMQ_NODENAME=rabbit@rabbitmq03 \
    --network rabbitmq_cluster_network \
    -v /usr/local/rabbitmq03/etc:/etc/rabbitmq \
    -v /usr/local/rabbitmq03/lib:/var/lib/rabbitmq \
    -v /usr/local/rabbitmq03/log:/var/log/rabbitmq \
    rabbitmq:3.11.1-management

# 将rabbitmq03加入集群
docker exec -it rabbitmq03 bash
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq01
rabbitmqctl start_app
# 启动可视化插件
rabbitmq-plugins enable rabbitmq_management
exit

# 查看集群状态(任意一个节点容器内都可以)
rabbitmqctl cluster_status

# ip:15672 ip:15673 ip:15674 都可以访问,用户名admin,密码123456

# 开放端口
firewall-cmd --permanent --add-port=5672/tcp
firewall-cmd --permanent --add-port=5673/tcp
firewall-cmd --permanent --add-port=5674/tcp
firewall-cmd --permanent --add-port=15672/tcp
firewall-cmd --permanent --add-port=15673/tcp
firewall-cmd --permanent --add-port=15674/tcp
firewall-cmd --reload

镜像队列策略

通过ip:15672 登入RabbitMQ管理界面

增加策略

  • Name: 策略的名称,用于标识该策略。

  • Pattern: 用于匹配哪些队列或交换机应用此策略的模式。^表示匹配所有队列和交换机。

  • Definition: 策略的具体定义。在这个例子中,定义了两个键值对:

    • ha-mode: 高可用性模式设置为all,这意味着队列将被镜像到多个节点上以实现高可用性。

    • ha-sync-mode: 高可用性同步模式设置为automatic,这意味着当主节点发生故障时,镜像节点会自动提升为主节点。

待完善-------------------------------

R