备库节点部署
备库节点部署(node2 / node3)
在两个备库节点(192.168.221.137、192.168.221.138)上,安装类型选择 s(slave)。备库脚本会自动通过 pg_basebackup 从主库同步数据并建立流复制。
备库安装自动步骤
备库安装的前 5 步与主库一致(依赖、用户、目录、版本、license),第 6 步起为流复制搭建。步骤 1 至步骤 6 开头的实际连续输出如下:
Enter HaloDB database installation type: Enter m for master, s for slave
s
1. Installing HaloDB Database - Slave
1. Start installing database dependencies
Database dependencies installation completed
2. Creating halo user
halouser already exists. Delete user? Enter yes/no, press Enter to skip deletion by default
no
Not deleting userhalo
3. Creating database directory
Warning: For cluster database, database directory and archive directory paths must be consistent across all nodes!
Current software installation directory: /u01/app/halo
Enter database directory, press Enter to use default /data/halo
Input is empty, using default database directory /data/halo
/data/halo directory already exists
Modifying halo user environment variables
Creating /var/run/halo
Modifying existing /var/run/ directoryhalo
total 0
4. Checking halo installation version
pg_ctl (Halo) 1.0.16.11 (268319)
5. Copying license.lic to /u01/app/halo/product/dbms/16
6. Creating streaming replication
Physical streaming replication starts:
说明: 若 halo 用户已存在,脚本会询问
Delete user? Enter yes/no, press Enter to skip deletion by default,默认回车不删除,演示中输入no保留现有用户;Not deleting userhalo为脚本原文输出(user 与 halo 连写)。步骤 4 输出的pg_ctl (Halo) 1.0.16.11 (268319)即当前安装的数据库版本号。
流复制配置(步骤 6)
备库的核心交互是流复制参数。脚本依次提示输入,实际终端输出如下(以 node2 为例):
6. Creating streaming replication
Physical streaming replication starts:
1. Please enter database master IP address, e.g.: 10.10.68.168
192.168.221.136
yes
192.168.221.136 available.
Database master IP address is: 192.168.221.136
2. Enter database streaming replication username, e.g.: replica
replica
Database user is: replica
3. Enter streaming replication user password
(手工输入复制用户密码,输入不回显)
4. Enter streaming replication port, e.g.: 1921, default is 1921
1921
Port is: 1921
5. Enter replication slot name, default is hostname, if hostname is localhost, default is IP
node2
Replication slot name is: node2
流复制交互参数说明:
| 序号 | 交互项 | 演示输入(node2) | 演示输入(node3) | 说明 |
|---|---|---|---|---|
| 1 | 主库 IP 地址 | 192.168.221.136 | 192.168.221.136 | 主库节点 IP |
| 2 | 流复制用户名 | replica | replica | 主库创建的复制用户 |
| 3 | 流复制用户密码 | (复制用户密码) | (复制用户密码) | 对应复制用户的密码,输入不回显 |
| 4 | 流复制端口 | 1921 | 1921 | 数据库端口,默认 1921 |
| 5 | 复制槽名 | node2 | node3 | 各备库需不同,建议与节点名一致 |
注意: 两个备库的复制槽名必须不同(演示中分别使用
node2、node3)。复制用户replica需在主库提前创建并授予 REPLICATION 权限。
基础备份同步
流复制参数确认后,脚本自动调用 pg_basebackup 从主库拉取基础备份并创建复制槽:
Deleting duplicate replication slot
ERROR: replication slot "node2" does not exist
CHECKPOINT
Creating streaming replication
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/6000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created replication slot "node2"
140368/140368 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log endpoint: 0/6000100
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk...
pg_basebackup: renaming backup_manifest.tmp to backup_manifest
pg_basebackup: base backup completed
Downgrading slave data directory permissions
说明: 首行
ERROR: replication slot "node2" does not exist是脚本先尝试删除同名复制槽的正常提示(首次创建时槽尚不存在),随后即重新创建。备库执行 pg_basebackup 前,数据目录(/data/halo)必须为空,否则会报错;一键脚本会自动处理目录权限。
至此主库与两备库的数据库及流复制搭建完成。接下来在三台服务器上继续完成 etcd 与 Clustermgr 配置。