一、系统环境
IP | 操作系统 | 用途 |
192.168.140.153 | CentOS 7.9.2009 | pg-主节点 |
192.168.140.159 | CentOS 7.9.2009 | pg-从节点 |
二、单节点安装
2.1 主节点安装
2.2 从节点安装
只需要先将rpm包安装即可,无需初始化数据库,无需启动服务。
三、主从配置
3.1 主节点配置
3.1.1 创建同步账号
# 切换到postgres账号
[root@localhost data]# su - postgres
# 转到pg命令行模式
-bash-4.2$ psql
psql (15.7)
Type "help" for help.
# 创建角色replica,并赋予权限
postgres=# create role replica login replication encrypted password 'replica';
# 查询角色
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
replica | Replication | {}
3.1.2 修改配置文件
[root@localhost data]# vi pg_hba.conf
# 在最下面添加以下行
host replication replica 192.168.140.0/0 md5
[root@localhost data]# vi postgresql.conf
# 开启热备
hot_standby = on
3.1.3 重启服务
[root@localhost data]# systemctl restart postgresql-15.service
3.2 从节点配置
3.2.1 创建pg工作目录
# 该目录必须和主机工作目录一致
[root@localhost opt]# mkdir -p /opt/postgre/data/
3.2.2 同步数据
[root@localhost opt]# /usr/pgsql-15/bin/pg_basebackup -h 192.168.140.153 -p 5432 -U replica -F p -X stream -P -R -v -D /opt/postgre/data/
3.2.3 修改启动配置
[root@localhost opt]# vi /usr/lib/systemd/system/postgresql-15.service
# 修改路径为刚创建的目录
Environment=PGDATA=/opt/postgre/data/
3.2.4 配置standby.signal
[root@localhost opt]# vi /opt/postgre/data/postgresql.conf
# 修改如下配置项
primary_conninfo = 'user=replica password=replica channel_binding=prefer host=192.168.140.153 port=5432 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
# 新建standby.signal文件
[root@localhost opt]# vi /opt/postgre/data/standby.signal
# 添加如下内容
# 开启热备
standby_mode = 'on'
primary_conninfo = 'user=replica password=replica channel_binding=prefer host=192.168.140.153 port=5432 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
3.2.5 修改目录授权
[root@localhost opt]# chown -R postgres: postgre/
[root@localhost opt]# cd postgre/
[root@localhost postgre]# chmod 0777 data/
3.2.6 启动服务
[root@localhost postgre]# systemctl start postgresql-15.service
四、测试
4.1 主节点新建数据表
# 新建schema
postgres=# create schema test;
# 新建表
create table test.tb(id serial primary key,name varchar(100),age int);
# 新增数据
insert into test.tb(id,name,age) values (1,'final',19);
postgres=# insert into test.tb(id,name,age) values (2,'haha',18);
4.2 从节点验证是否同步
# 在从库查询数据是否与主库相同
postgres=# select * from test.tb;
id | name | age
----+-------+-----
1 | final | 19
2 | haha | 18
(2 rows)