高可用 | repmgr 构建 PostgreSQL 高可用集群部署文档

作者:颜博 青云科技数据库研发工程师

目前从事 PostgreSQL 产品开发工作,热衷于 PostgreSQL 数据库的学习和研究

上一期我们介绍了 PG 集群复制管理工具 repmgr,能够轻松的搭建出 PostgreSQL 的高可用集群,在主节点宕机后,挑选备机提升为主节点,继续提供服务。

本文将详细介绍 repmgr 构建 PostgreSQL 高可用集群的部署过程。

准备工作

  1. 集群所有服务器安装 repmgr 工具
  2. 主服务器安装 PostgreSQL 数据库,初始化完成并正常启动数据库(Primary)

| 1 主库部分

1.1 修改 postgresql.conf 文件

$ vim postgresql.conf
max_wal_senders = 10
max_replication_slots = 10
wal_level = 'hot_standby'
hot_standby = on
archive_mode = on   # repmgr 本身不需要 WAL 文件归档。
archive_command = '/bin/true'

在 PG9.6 之前的版本中,wal_level 允许设置为archivehot_standby。新版本中,仍然接受这些值,但是它们会被映射成replica

1.2 创建 repmgr 用户和库

为 repmgr 元数据信息创建 PostgreSQL 超级用户和数据库

# su - postgres 
$ /usr/lib/postgresql/11/bin/createuser -s repmgr
$ /usr/lib/postgresql/11/bin/createdb repmgr -O repmgr

alter user repmgr with password 'test1234';

1.3 修改 pg_hba.conf 文件

repmgr 用户作为 repmgr 工具默认使用的数据库用户
$ vim pg_hba.conf
local   replication   repmgr                              trust
host    replication   repmgr      127.0.0.1/32            trust
host    replication   repmgr      0.0.0.0/0               trust

local   repmgr        repmgr                              trust
host    repmgr        repmgr      127.0.0.1/32            trust
host    repmgr        repmgr      0.0.0.0/0               trust

repmgr 免密登录设置

# 修改 pg_hba.conf 文件后 reload 数据库生效
$ su - postgres -c "/usr/lib/postgresql/11/bin/pg_ctl reload"

# su postgres
$ vim ~/.pgpass

# 添加以下内容到 ~/.pgpass 文件,用户、数据库和密码修改为自己的即可
*:*:repmgr:repmgr:test1234

# 修改 ~/.pgpass 文件权限
chmod 600 ~/.pgpass

1.4 创建 repmgr.conf 文件

在主服务器上创建一个 repmgr.conf 文件

node_id、node_name、conninfo 需要与从库不同

node_id=1                                     # 节点ID,高可用集群各节点标识
node_name='node1'                             # 节点名称,高可用集群各节点名称,对应集群中 select * from pg_stat_replication; 中查到的 application_name
conninfo='host=192.168.100.2 port=5432 user=repmgr dbname=repmgr connect_timeout=2'     # 集群中的所有服务器都必须能够使用此字符串连接到本地节点
data_directory='/data/pgsql/main'             # pg数据目录
replication_user='repmgr'                     # 流复制数据库用户,默认使用repmgr
repmgr_bindir='/usr/lib/postgresql/11/bin'    # repmgr软件目录
pg_bindir='/usr/lib/postgresql/11/bin'        # pg软件目录

# 日志管理
log_level=INFO
log_file='/data/pglog/repmgr/repmgrd.log'      # log 文件需要提前创建
log_status_interval=10                         # 此设置导致 repmgrd 以指定的时间间隔(以秒为单位,默认为 300)发出状态日志行,描述 repmgrd 的当前状态, 
              # 例如:  [2021-09-28 17:51:15] [INFO] monitoring primary node "node1" (ID: 1) in normal state

# pg、repmgr服务管理命令
service_start_command='/usr/lib/postgresql/11/bin/pg_ctl -D /data/pgsql/main/ start -o \'-c config_file=/etc/postgresql/11/main/postgresql.conf\' -l /data/pglog/start.log'
service_stop_command='/usr/lib/postgresql/11/bin/pg_ctl stop'
service_restart_command='

你可能感兴趣的:(数据库,postgresql)