1.Base基础/3.Icon图标/操作/search备份
1.Base基础/3.Icon图标/操作/search备份
EN
文档
关于AntDB
部署与升级
快速入门
使用教程
运维
调优
工具和插件
数据安全
参考
  • 文档首页 /
  • 高级服务 /
  • Ultra_Sync /
  • Ultra_Sync安装部署

Ultra_Sync安装部署

更新时间:2024-07-01 14:39:45

硬件需求

以下是部署单个 Ultra Sync 的硬件需求建议。

基础环境配置内容说明
CPU建议不小于 4 核Ultra Sync 没有数据计算需求,推荐为每个 walsender 进程和 walreceiver 进程保留 1 个核;
支持ARM,X86 以及国产主流 CPU 架构
物理内存建议不小于 16GBUltra Sync 实例的内存仅用于保存状态信息,因此需求量不大
硬盘 IO 能力推荐 SSD推荐跟主库硬盘 IO 能力保持一致
网卡万兆以上确保低延迟,需要万兆网卡

软件需求

软件类型软件名版本
操作系统CentOS7.5 及以上
Red Hat Enterprise Linux7.5 及以上
Ubuntu16.04 及以上
Kylinv10
BigCloud Enterprise Linux8.2.2107
OpenEuler20.03
Anolis OS8.6
CentOS Stream8

最简双中心(非高可用)的部署

最简双中心

组网是一个主库,一个 Ultra Sync 节点以及一个级联在 Ultra Sync 上的备库。

具体的步骤如下:

  • 在 3 台服务器上安装 AntDB 数据库,步骤不再赘述,参考【集中式安装部署手册】

  • 初始化主库,步骤不再赘述,参考【集中式安装部署手册】

  • 搭建 Ultra Sync 节点

    # 取出主库的system_identifier和wal_segment_size的值,其中wal_segment_size的值必须转换为MB为单位,方法如下:
    adb_controldata -D DATA_DIR
    # 输出内容:
    Database system identifier: system_identifier的值
    ...
    Bytes per WAL segment:      wal_segment_size的值,单位B
    
    # 初始化Ultra Sync ,必须指定-I
    initdb -I 主库的system_identifier --wal-segsize=主库的wal_segment_size -D DATA_DIR
    
  • 修改 Ultra Sync 的配置参数

    # 节点身份
    adb_ultrasync_node = false
    
    # 流复制相关
    primary_conninfo = 'host=主库IP port=主库端口 user=复制用户 password=复制用户的密码'
    primary_slot_name = '复制槽名'
    wal_keep_size = 200 * wal_segment_size / 1024 / 1024 # 单位是MB
    max_wal_senders = 5 # 最多允许多少个后备
    wal_level = replica # 与主库保持一致
    wal_compression = on
    wal_log_hints = on
    checkpoint_timeout = 15min
    
    # 运行日志相关
    log_destination = 'csvlog' 
    logging_collector = on  
    log_directory = 'pg_log'
    port = 自定义
    listen_addresses = '*'
    
    # 白名单
    与主库保持相同
    
  • adb_ultrasync_node 为 false 的状态下启动 Ultra Sync 实例(此时该实例还不是 Ultra Sync 身份),创建流复制用的用户,用户名和密码必须保证与主库的流复制用户一致

    adb_ctl -D DATA_DIR start
    
    adb -p port -d antdb -c " create role replicator with login replication password 'antdb'"
    
  • Ultra Sync 实例

    adb_ctl -D DATA_DIR stop -m f
    
  • 在主库为 Ultra Sync 创建物理复制槽,把 Ultra Sync 节点加入同步备库列表

    adb -p port -d antdb -c "select pg_create_physical_replication_slot('far1', true)"
    
    # 把 Ultra Sync 节点的IP加入synchronous_standby_names参数内
    
    adb_ctl -D DATA_DIR reload
    
  • 修改 Ultra Sync 的配置参数

    # 节点身份
    adb_ultrasync_node = true
    
  • 启动 Ultra Sync 实例,为级联备库创建物理复制槽

    adb_ctl -D DATA_DIR start
    
    adb -p port -d antdb -c "select pg_create_physical_replication_slot('复制槽名', true)"
    
  • 初始化级联在 Ultra Sync 上的备库

    # 通过adb_basebackup同步数据,注意,这里adb_basebackup的复制源必须是主库
    adb_basebackup -D DATA_DIR -Fp -R -Xs -v -P -h 主库ip -p 主库端口 -U antdb
    
    # 修改postgresql.conf,primary_conninfo和primary_slot_name这两个参数分别需要调整为Ultra Sync 节点的ip和复制槽名
    
    # 启动备库
    adb_ctl -D DATA_DIR start
    
  • 确认流复制是否正常

    # 在主库确认,Ultra Sync 节点应该处于同步复制模式
    SELECT * FROM pg_stat_replication;
    
    # 在Ultra Sync 节点确认,级联的备库应该处于异步复制模式
    SELECT * FROM pg_stat_replication;
    
  • 第十步如果状态无误,搭建结束

新建带 Ultra Sync 节点的多中心

拓扑结构如下:

新建带Ultra_Sync__节点的多中心

说明: 多中心系统正常运行期间,备中心的 adbhamgr 服务和 Ultra Sync 节点为停止状态,只有在备中心要提升为主中心时才启动。

主中心部署

参考【部署与升级】-->【集中式安装部署】-->【高可用集群模式部署】,搭建一主两备高可用集群。

其中使用安装部署工具部署时,config 文件模板如下:

## clusterinfo 配置项说明:
## 
## cluster_type 分类:
##   C_ALONE 表示集中式单机版:只需要设定 clusterinfo 和 primaryinfo
##   C_HA    表示集中式高可用版:需要设定 primaryinfo、standbyinfo、adbdcsinfo、adbhamgrinfo 的配置信息
## cluster_name:数据库集簇的名称
## cluster_user: 数据库的超级用户,一般设定为执行此安装程序的操作系统用户

[clusterinfo]
cluster_type = C_HA
cluster_name = antdbcluster
cluster_user = antdb

## primaryinfo 配置项说明:
## 
## antdb_apppath:主节点数据库程序目录
## antdb_datapath:主节点数据库的数据目录;需要设定为空目录,且不要和其它配置项中的目录交叉
## antdb_password:数据库的超级用户的初始密码(超级用户名参见 “cluster_user”)
## antdb_port:主节点数据库端口号
## primary_ip:主节点数据库 ip,即执行此安装程序的主机 ip
## primary_sshport:执行此安装程序的主机的 SSH 服务端口号

[primary_info]
primary_ip = 10.1.206.201
primary_sshport = 22
antdb_apppath = /home/antdb/app
antdb_datapath = /home/antdb/data
antdb_password = antdb
antdb_port = 6655

## standbyinfo 配置项说明:
##
## standby_node 格式:name,standby_ip,standby_sshport,antdb_apppath,antdb_datapath,antdb_port
##     name:备节点名称,仅作为标识,唯一。
##           注:此名称可以指定为“adb_ultrasync_node”,则此备节点会作为“adb_ultrasync_node”处理。如果不理解“adb_ultrasync_node”的含义,请不要使用此名称。
##     standby_ip:备节点 ip 地址
##     standby_sshport:备节点 SSH 服务端口号
##     antdb_apppath:备节点存放数据库应用程序的目录,建议与主节点使用相同路径
##     antdb_datapath:备节点存放数据库数据的目录,建议与主节点使用相同路径
##     antdb_port:备节点数据库的端口号

[standby_info]
standby_node = standby1,10.1.206.207,22,/home/antdb/app,/home/antdb/data,6655
standby_node = adb_ultrasync_node,10.1.206.208,22,/home/antdb/app,/home/antdb/data,6655


## adbdcs_info 配置项说明:
##
## adbdcs_node 格式:name,adbdcs_datapath,clienport,peerport,hostinfo
##     name:adbdcs 节点名称,唯一
##     adbdcs_datapath:adbdcs 数据目录,不要与数据库数据目录交叉
##     clienport:客户端访问 adbdcs 使用的端口号
##     peerport:adbdcs 通信端口号
##     hostinfo:数据库节点名称,primary 表示主节点,其它为备节点名称;标识了 adbdcs 与哪个数据库节点位于同一节点

[adbdcs_info]
adbdcs_node = adbdcs-1,/home/antdb/adbdcs,12379,12380,primary
adbdcs_node = adbdcs-2,/home/antdb/adbdcs,12379,12380,standby1
adbdcs_node = adbdcs-3,/home/antdb/adbdcs,12379,12380,adb_ultrasync_node

## adbhamgr_info 配置项说明:
##
## adbhamgr_node 格式:name,adbhamgr_port,hostinfo
##     name:adbhamgr 节点的名称,唯一
##     adbhamgr_port:adbhamgr 服务使用的端口号
##     hostinfo:数据库节点名称,primary 表示主节点,其它为备节点名称;标识了 adbhamgr 与哪个数据库节点位于同一节点

[adbhamgr_info]
adbhamgr_node = adbhamgr-1,8008,primary
adbhamgr_node = adbhamgr-2,8008,standby1
adbhamgr_node = adbhamgr-3,8008,adb_ultrasync_node

## parameter 配置项说明:
##
## 此配置项用于设定数据库配置选项。
## config 格式:config_name=config_value
##     config_name: 配置项名称
##     config_value:配置项值
##
## 注意:
## 1、‘=’作为名称和值的分隔符,请注意按此格式书写。
## 2、config_value 的格式请按照数据库全局配置时的格式书写(集中式与分布式可能存在区别),安装工具不会对 config_value 的格式进行检查。

[parameter]
config = shared_buffers=128MB
config = max_locks_per_transaction=256

## init_option 配置项说明:
##
## 此配置项用于设定数据库初始化选项。
## config initall=init_value
##     initall:为初始化配置项的的固定名称,不需要修改
##     init_value:初始化选项。下面示例的含义为:开启数据库校验和,设置 walsegsize 为 256MB
##
## 注意:
## 1、在 init_value 不要使用等号,使用空格分隔选项名称和数值。
#[init_option]
#initall = -k --locale C -E UTF8

搭建完成,集群如下所示:

adbhamgrctl -c /etc/adbhamgr/adbhamgr_antdbcluster.yaml  list

+ Cluster: antdbcluster (7234424045034990612) -----+---------+----+-----------+
  | Member     | Host               | Role         | State   | TL | Lag in MB |
  +------------+--------------------+--------------+---------+----+-----------+
  | adbhamgr-1 | 10.20.16.227:40065 | Leader       | running |  2 |           |
  | adbhamgr-2 | 10.20.16.228:40065 | Sync Standby | running |  2 |         0 |
  | adbhamgr-3 | 10.20.16.214:40065 | Ultra Sync   | running |  2 |         0 |
  +------------+--------------------+--------------+---------+----+-----------+

备中心部署

一键式部署

参考【部署与升级】-->【集中式安装部署】-->【高可用集群模式部署】,搭建一主两备高可用集群,备中心搭建方法和搭建主中心一致,即使用一键式安装部署搭建两个独立集群。

注意: 备中心搭建独立集群的意义是为了更快速方便的搭建备中心的高可用架构,在停止并保留备中心的高可用架构的情况下,重新 adb_basebackup 备中心集群节点,以此加入主中心集群。

例如,主备中心集群均如下所示,此时主备中心还是两个独立的集群。

adbhamgrctl -c /etc/adbhamgr/adbhamgr_antdbcluster.yaml list

+ Cluster: antdbcluster (7234420149554224469) -----+---------+----+-----------+
  | Member     | Host               | Role         | State   | TL | Lag in MB |
  +------------+--------------------+--------------+---------+----+-----------+
  | adbhamgr-1 | 10.21.10.214:40065 | Leader       | running |  2 |           |
  | adbhamgr-2 | 10.21.10.215:40065 | Sync Standby | running |  2 |         0 |
  | adbhamgr-3 | 10.21.10.216:40065 | Ultra Sync   | running |  2 |         0 |
  +------------+--------------------+--------------+---------+----+-----------+
停止备中心

停止 adbhamgr 服务(所有备中心节点都要执行):

 sudo systemctl stop adbhamgr

清理 adbdcs 数据(备中心主 adbdcs 上执行即可):

10.21.10.214:40379 是 adbdcs 集群 leader 的 IP 地址和 clienport,一键式安装的时候配置文件中有相关配置。

adbdcsctl --endpoint=http://10.21.10.214:40379   rm -r  /service/

停止 adbdcs 服务(所有备中心节点都要执行):

sudo systemctl stop adbdcs
重建备中心,将备中心加入到主中心集群中

此时备中心加入主中心集群,不需要再启动 adb_ultrasync_node 节点,备中心重建为 1 主一异备的结构。

步骤一:修改主中心的hba文件

重建备中心需要执行 adb_basebackup 命令,因此需要配置 hba,从而允许备机通过流复制连接到主节点。

  • 修改主节点以及 Ultra Sync 节点的 pg_hba.conf 文件,例如:

    host    replication     all             0.0.0.0/0            trust
    
  • reload 主节点以及 Ultra Sync 节点,使配置生效;

    adb_ctl start -D /home/antdb/data
    

步骤二:重建备中心主节点

下面以数据目录 /home/antdb/data/ 为例。

  • 清理备中心主节点数据目录;

    rm -rf /home/antdb/data/*
    
  • 在备中心主节点机器上执行 adb_basebackup 命令;

    这里- h 和 -p 指定主中心的主节点的。

    adb_basebackup -D /home/antdb/data -Fp -R -Xs -v -P -h 10.20.16.227 -p 40065 -U replicator
    
  • 在主中心 Ultra Sync 节点为备中心主节点创建 slot,即备中心的主节点是主中心 adb_ultrasync_node 节点的级联备节点。

    SELECT pg_create_physical_replication_slot('z2_s1', true)
    
  • 修改备中心主节点数据目录的 postgresql.conf 文件

    修改配置 postgresql.conf,配置 listen_addresses = '*',并注释掉 synchronous_standby_names 参数:

    listen_addresses = '*'
    #synchronous_standby_names = '"adbhamgr-2"'
    

    修改备中心主节点 postgresql.auto.conf 文件,增加 application_name,例如 application_name=z2_m;修改 primary_conninfo 中 ip端口号为 adb_ultrasync_node 节点的信息。

    primary_conninfo = 'application_name=z2_m user=replicator passfile=''/home/antdb/.pgpass'' channel_binding=prefer host=10.20.16.227 port=40065 sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres target_session_attrs=any'
    primary_slot_name = 'z2_s1'
    
  • 最后,启动备中心主节点;

    adb_ctl start -D /home/antdb/data
    

步骤三:删除备中心 Ultra Sync 节点的数据目录

备中心 Ultra Sync 节点无需启动,只有在备中心升为主中心之后才需要重新启动,所以这一步将 Ultra Sync 节点的数据目录删除,在备中心升主之后启动备中心的 adbhamgr 和 adbdcs,会自动 reinit Ultra Sync 节点。

  • 清理备中心 Ultra Sync 节点数据目录;

    rm -rf /home/antdb/data/*
    

多中心引入 Ultra Sync

注意:双中心引入 Ultra Sync 需要 AntDB6.3.15 、 AntDB adbhamgr 1.0.2 或以上版本。如果版本没有达到这个要求,请先升级AntDB 和 adbhamgr 版本。

版本升级请参考下文中【Ultra Sync 版本升级】章节。

多中心环境新增 Ultra Sync

双中心环境新增 Ultra Sync 只需要在主中心追加 Ultra Sync 节点。

Ultra Sync 节点环境部署

参考【部署与升级】-->【集中式安装部署】-->【独立模式部署】的【安装数据库】章节,搭建单节点。

Ultra Sync 节点配置

配置 Ultra Sync 节点的 adbhamgr service文件

Ultra Sync 节点的 service 文件可以参考其他节点的 service 文件,示例如下:

# root用户执行
cat > /usr/lib/systemd/system/adbhamgr.service <<EOF

[Unit]
Description=Runners to orchestrate a high-availability AntDB
After=syslog.target network.target

[Service]
Type=simple
User=antdb
Group=antdb
ExecStart=/usr/local/bin/adbhamgr /etc/adbhamgr/adbhamgr_antdbcluster.yaml    #执行命令,可以根据当前环境配置更改
KillMode=process
TimeoutSec=30
Restart=no

[Install]
WantedBy=multi-user.target
EOF

配置 Ultra Sync 节点的 adbhamgr 配置文件

Ultra Sync 节点的 adbhamgr 配置文件示例如下。

注意: 含 Ultra Sync 节点的集群 synchronous_node_count 最少设置为 2,同时追加adb_ultrasync_node: true 参数。

scope: antdb-cluster             # 集群的命名
namespace: /service/             # 这里默认是service,如果不设置就是/service/
name: adbnode_04                 # 节点名称,各个节点需要名字不同

restapi:
  listen: 10.1.206.130:8008                # Ultra Sync 节点的ip
  connect_address: 10.1.206.130:8008       # Ultra Sync 节点的ip

adbdcs:
  hosts: 10.1.206.128:12379,10.1.206.129:12379,10.1.206.130:12379     #adbdcs集群信息

bootstrap:
  # this section will be written into adbdcs:/<namespace>/<scope>/config after initializing new cluster
  # and all other cluster members will use it as a `global configuration`
  dcs:
    ttl: 15
    loop_wait: 5
    retry_timeout: 5
    maximum_lag_on_failover: 1048576
    master_start_timeout: 300
    synchronous_mode: true
    synchronous_node_count: 2            # 含Ultra Sync 节点需要设置该参数为2
    synchronous_mode_strict: true
    postgresql:
      use_pg_rewind: true
      parameters:
         max_connections: 20000
         listen_addresses: "*"
         port: 55551                    # 修改成实际的AntDB端口号
         wal_level: logical             # adbhamgr 的流复制级别要求  logical
         log_directory: "pg_log"
         log_destination: "csvlog"
         hot_standby: "on"
         wal_keep_size: 10240
         max_wal_senders: 10

postgresql:
  listen: 10.1.206.130:55551            # Ultra Sync 节点的ip和端口
  connect_address: 10.1.206.130:55551   # Ultra Sync 节点的ip和端口
  data_dir: /home/antdb/data            # Ultra Sync 节点的data目录
  bin_dir: /home/antdb/app/bin          # Ultra Sync 节点的二进制目录
  pgpass: /home/antdb/.pgpass           # Ultra Sync 节点的.pgpass文件,pgpass 不能和 pgdata 在一个目录
  authentication:
    replication:
      username: replicator
      password: antdb
    superuser:
      username: antdb
      password: antdb
  parameters:
    unix_socket_directories: '/tmp'
  adb_ultrasync_node: true              # Ultra Sync 节点区别与其他节点的地方;Ultra Sync 节点必须设置该参数

tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false
Ultra Sync 节点加入集群

修改 synchronous_node_count 参数

Ultra Sync 节点加入集群前,需要先修改集群 adbhamgr 的 synchronous_node_count 参数,Ultra Sync 节点要求 synchronous_node_count 参数的值最少为 2。

1. 运行下述命令进入参数修改界面
adbhamgrctl -c /etc/adbhamgr/adbhamgr_antdbcluster.yaml edit-config

2. 将下面synchronous_node_count参数的值改为2
loop_wait: 5
master_start_timeout: 300
maximum_lag_on_failover: 1048576
postgresql:
  parameters:
    archive_command: ls
    archive_mode: true
    hot_standby: 'on'
    listen_addresses: '*'
    log_destination: csvlog
    log_directory: pg_log
    logging_collector: true
    max_connections: 20000
    max_prepared_transactions: 10
    max_wal_senders: 50
    max_worker_processes: 16
    port: 55551
    wal_keep_size: 1024
    wal_level: logical
    wal_segment_size: 1024
  use_pg_rewind: true
retry_timeout: 5
synchronous_mode: true
synchronous_mode_strict: true
synchronous_node_count: 2               #改为2
ttl: 15

启动 Ultra Sync 节点

以 service 的方式启动 adbhamgr

以 antdb 用户执行:

sudo systemctl daemon-reload     #加载配置文件,如果中途更改了配置,也必须reload
sudo systemctl start adbhamgr    #启动adbhamgr

启动成功后,查看集群的状态:

[root@host228 antdb2]# adbhamgrctl -c /etc/adbhamgr.yml list 
+------------+--------------------+--------------+---------+----+-----------+-----------------+
| Member     | Host               | Role         | State   | TL | Lag in MB | Pending restart |

Cluster: antdb-cluster (7127106860783255508) --+---------+----+-----------+-----------------+
| adbnode_01 | 10.20.16.227:40571 | Sync Standby | running |  4 |         0 | *               |
| adbnode_02 | 10.20.16.228:40571 | Replica      | running |  4 |         0 | *               |
| adbnode_03 | 10.20.16.214:40571 | Leader       | running |  4 |           | *               |
| adbnode_04 | 10.20.16.215:40571 | Ultra Sync   | running |  4 |         0 | *               |
+------------+--------------------+--------------+---------+----+-----------+-----------------+

注:Pending restart有*,代表该节点需要重启。
备中心主节点的源改成 adb_ultrasync_node 节点

步骤一:登录到 adb_ultrasync_node 节点上创建复制槽,给级联备使用;

SELECT pg_create_physical_replication_slot('复制槽名',true);

例如:

SELECT pg_create_physical_replication_slot('ds3');

步骤二:修改备中心的主节点的流复制源信息,将源端修改为 Ultra Sync 节点;

在 postgresql.auto.conf 文件或者 postgresql.conf 文件中找到下面 2 个参数:

  • primary_conninfo:修改前 host 和 port 分别是主节点的 IP 和端口,需要改为 Ultra Sync 节点的信息;

  • primary_slot_name:修改为上面创建的复制槽名,即 Ultra Sync 节点上的复制槽;

例如:

[antdb@adb data]$ cat postgresql.auto.conf
primary_conninfo = 'user=antdb passfile=''/home/antdb/.pgpass'' channel_binding=prefer host=10.20.16.215 port=40571 sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres target_session_attrs=any'
primary_slot_name = 'adbnode_04'

修改完成后,执行 reload 使修改生效:

adb_ctl -D DATA_DIR reload

最后,确认流复制是否正常。

登录到 Ultra Sync 节点和备中心主节点上,查看流复制状态,备中心主节点应该处于异步复制模式:

SELECT * from pg_stat_replication;

多中心环境使用 Ultra Sync 替换原主中心部分备机

使用 Ultra Sync 替换一个备机

前提: 确保当前版本支持 Ultra Sync 节点,如果不支持,请先升级版本,方法参考【Ultra Sync 版本升级】章节。

如下,当前主中心版本是一主一同步一异步的集群,且支持Ultra Sync 节点:

[antdb@host227]$adbhamgrctl -c /etc/adbhamgr/adbhamgr_antdbcluster.yaml  list

+ Cluster: antdbcluster (7236559176694986096) -----------+----+-----------+
  | Member | Host               | Role         | State   | TL | Lag in MB |
  +--------+--------------------+--------------+---------+----+-----------+
  | node1  | 10.20.16.227:40065 | Leader       | running |  2 |           |
  | node2  | 10.20.16.228:40065 | Sync Standby | running |  2 |         0 |
  | node3  | 10.20.16.214:40065 | Replica      | running |  2 |         0 |
  +--------+--------------------+--------------+---------+----+-----------+

下面描述如何将集群中其中一个备节点替换为 Ultra Sync 节点,这里以 node3 节点为例。

步骤一: 通过 edit-config 命令修改集群配置文件;

adbhamgrctl -c /etc/adbhamgr/adbhamgr_antdbcluster.yaml  edit-config

增加如下两个 adbhamgr 的参数配置,synchronous_node_count 一定要配置为 2:

synchronous_mode_strict: true
synchronous_node_count: 2

例如,配置如下:

[antdb@host227 adbhamgr]$  adbhamgrctl -c /etc/adbhamgr/adbhamgr_antdbcluster.yaml  edit-config
loop_wait: 5
master_start_timeout: 300
maximum_lag_on_failover: 1048576
synchronous_mode_strict: true
synchronous_node_count: 2
postgresql:
  parameters:
……

修改完成,查看集群状态,会有 2 个同步节点,如下:

[antdb@host227 adbhamgr]$ adbhamgrctl -c /etc/adbhamgr/adbhamgr_antdbcluster.yaml list
+ Cluster: antdbcluster (7236559176694986096) ---------+----+-----------+
  | Member | Host               | Role         | State   | TL | Lag in MB |
  +--------+--------------------+--------------+---------+----+-----------+
  | node1  | 10.20.16.227:40065 | Leader       | running |  2 |           |
  | node2  | 10.20.16.228:40065 | Sync Standby | running |  2 |         0 |
  | node3  | 10.20.16.214:40065 | Sync Standby | running |  2 |         0 |
  +--------+--------------------+--------------+---------+----+-----------+
  

步骤二: 停止 node3 的 adbhamgr 服务,修改 adbhamgr 配置文件;

  • 停止 node3 的 adbhamgr:

    sudo systemctl stop adbhamgr
    
  • 修改 node3 的 adbhamgr 配置文件,增加如下配置,将此节点标志为 Ultra Sync :

    adb_ultrasync_node: true
    

    例如:

    postgresql:
    listen: 10.20.16.214:40065
    connect_address: 10.20.16.214:40065
    data_dir: /home/antdb/data
    bin_dir: /home/antdb/app/antdb/bin
    pgpass: /home/antdb/.pgpass
    authentication:
      replication:
        username: replicator
        password: antdb
      superuser:
        username: antdb
        password: 'antdb'
    parameters:
      unix_socket_directories: '/tmp'
    adb_ultrasync_node: true
    

步骤三: 清除 node3 数据目录,启动 adbhamgr;

  • 由于 node3 需要重建,这里直接将 node3 数据目录清空:

    rm -rf /home/antdb/data
    
  • 启动 node3 的 adbhamgr 服务;

    sudo systemctl start adbhamgr
    

    等待 Ultra Sync 节点重建完成,集群状态如下:

    [antdb@host227 adbhamgr]$ adbhamgrctl -c /etc/adbhamgr/adbhamgr_antdbcluster.yaml  list
    + Cluster: antdbcluster (7236559176694986096) ---------+----+-----------+
    | Member | Host               | Role         | State   | TL | Lag in MB |
    +--------+--------------------+--------------+---------+----+-----------+
    | node1  | 10.20.16.227:40065 | Leader       | running |  2 |           |
    | node2  | 10.20.16.228:40065 | Sync Standby | running |  2 |         0 |
    | node3  | 10.20.16.214:40065 | Ultra Sync   | running |  2 |         0 |
    +--------+--------------------+--------------+---------+----+-----------+
    

    至此,成功将 node3 节点替换为 Ultra Sync 节点。

修改备中心的流复制源

没有 Ultra Sync 时,主备中心的流复制关系如下:

没有Ultra Sync

有 Ultra Sync时,需要将流复制关系修改为如下:

有Ultra Sync

上面已经描述过如何将一个备机改为 Ultra Sync节点,下面描述如何将备机 3(即备中心的主节点)的流复制源改为 Ultra Sync节点。

步骤一:登录到 Ultra Sync节点上创建复制槽,给级联备使用;

SELECT pg_create_physical_replication_slot('复制槽名', true);

例如:

SELECT pg_create_physical_replication_slot('ds3', true);

步骤二:修改备机3的流复制源信息,将源端修改为 Ultra Sync 节点;

在 postgresql.auto.conf 文件或者 postgresql.conf 文件中找到下面 2 个参数:

  • primary_conninfo:修改前 host 和 port 分别是主节点的 IP 和端口,需要改为 Ultra Sync 节点的信息;

  • primary_slot_name:修改为上面创建的复制槽名,即 Ultra Sync 节点上的复制槽;

例如:

[antdb@adb data]$ cat postgresql.auto.conf
primary_conninfo = 'user=antdb passfile=''/home/antdb/.pgpass'' channel_binding=prefer host=10.20.16.214 port=40515 sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres target_session_attrs=any'
primary_slot_name = 'ds3'

修改完成后,执行 reload 使修改生效:

adb_ctl -D DATA_DIR reload

最后,确认级联流复制是否正常。

登录到 Ultra Sync 节点和备机 3 上,查看流复制状态,级联的备库应该处于异步复制模式:

SELECT * from pg_stat_replication;
问题反馈