- role 的目标是安装一个带流复制的 postgresql 服务
- 这个 role 暂时写到创建复制用户这里, 而且尚未进行过测试
- hosts: 10.111.32.91
remote_user: root
roles:
- {role: postgresql_binary_install, pgsql_packet: '{{packet_base_dir}}/postgresql/postgresql-9.6.17.tar.gz',
pgsql_primary_conf: '{{ lookup("env","PWD")}}/templates/postgresql.conf',
pgsql_hba_conf: '{{ lookup("env","PWD")}}/templates/pg_hba.conf'}
postgresql_binary_install
- 创建运行用户
- 创建目录
- 安装包
- 初始化数据目录 或 复制数据目录
- 根据操作的不同需要考虑 slave 上是新建还是copy master 的数据
- 复制配置文件
- 默认情况下配置文件位于数据目录内,是否要修改为一个独自的目录是一个问题?
- 根据help提示和搜索,没找到为 postgresql 单独指定配置文件的参数,暂时将其放到数据目录内吧
- 复制服务文件
- 启动服务
- 创建用户,远程管理用户,复制用户等等
- 目前远程管理用户尚未实现
- 是否禁用默认的用户也是一个问题
- 修改 hba 文件使创建的用户可以进行连接
- slave 上是否需要 copy master 的原始数据,按照目前的预期是不需要的。需要实际测试
- 实际测试时,两边都初始化了实际目录,但是却不能正常通信
- slave 上生成 recovery.conf 文件
- slave 重启,开始进行复制
-
异步流复制的步骤
- 初始化数据目录
- 修改配置文件中关于复制的参数
- wal_level = replica 有疑问,搜索的文档中是 wal_level = hot_standby
- 创建复制用户,并且允许用户从主/从都可以进行连接
- 使用
select pg_start_backup();
创建在线备份 - 复制创建好的备份到从节点上
- 从节点配置 recovery.conf 恢复数据, 这里的参数也让人十分疑惑
recovery_target_timeline
: 不理解, 执行备份命令的时候,如果还在写,那么最后生成的备份是怎么样的一种形式呢?
- 然后启动 pgsql 即可开始复制,(他这里还有一个 .pgpass 文件的过程,感觉这一步不需要吧)
-
pg_start_backup()
的方式可以使用pg_basebackup
工具来进行,
这个配置文件,一是可以编辑好了,复制过去,二是可以使用 postgresql_pg_hba
模块现场修改,并生效。
如果二者配合使用的话,那么还得注意修改远程文件的时候,把本地的也修改了,要不将来一同步,远程的又成了
旧的了。
或者说不使用复制,只是现场修改,如何取舍,测试过后再决定吧。
pgsql 创建一个用户可能会生成多条 hba 记录,所以在编写 postgresql_user
role 的时候,需要注意这个问题。
关于 postgresql.service
是从 postgresql96-server-9.6.18-1PGDG.rhel7.x86_64
包中获取的,并修改了相应的部分。
但是在启动时,却一直处于 activating
状态。
后来了解到这是由于 Type 的问题导致的,默认的Type为 notify
, 与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
改为 simple
后恢复正常,这是由于 rpm 包在编译时开启了systemd 相关的支持,所以使用 notify
是正常的,而自己下载的 tar.gz 的预编译包也许并未开启相关支持,导致其不能正常处理 notify
的相关操作。
后面可能还会有问题,先观察再说。