centos7搭建postgresql12主从

主从搭建

192.168.159.101 node1 主库(读写)
192.168.159.102 node2 备库(只读)
两台机器首先安装postgrsql

主库

postgres用户操作:

修改postgresql.conf

# 在文件中修改(此配置仅用于远程访问, 流复制后续还有额外配置):
listen_addresses = '*'
port = 15432
max_connections = 1500       # 最大连接数,据说从机需要大于或等于该值
wal_level = replica
max_wal_senders = 2   		#最多有2个流复制连接
wal_keep_segments = 16  	
wal_sender_timeout = 60s	#流复制超时时间

# 开启归档
....

修改pg_hba.conf,添加如下:

# 追加
# replica为postgres用户
# XX.XX.XX.XX为从节点的完整IP,如果为网段配置就不是32了,md5为允许密码验证,trust为免密
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    replication     replica         192.168.159.102/32          trust
# 需要远程访问,记得加(还有一个监听,在后面配置)
# 0.0.0.0/0为任意IP
host    all             all             0.0.0.0/0               md5

root用户操作:

#授权
chown -R postgres:postgres /var/run/postgresql/
chown -R postgres:postgres /home/postgres/pgdata/

postgres用户操作:

#启动
pg_ctl start

创建流复制用户

#切换用户
su - postgres
# 连接pgsql
psql -h 192.168.159.101 -p 15432
#执行sql
create role replica login replication encrypted password '123456';
SELECT rolname from pg_roles;

从库

root用户操作

chown -R postgres:postgres /var/run/postgresql/
chown -R postgres:postgres /home/postgres/pgdata/

从主库复制数据文件到本地

# 先清空原有数据文件(如非空)
rm -rf /home/postgres/pgdata/*
# 执行复制,ip为主库ip
pg_basebackup -h 192.168.159.101 -p 15432 -U replica -Fp -Xs -Pv -R -D /home/postgres/pgdata

# 输入主库中创建的replica用户密码后,开始同步

在这里插入图片描述

更改/home/postgres/pgdata目录权限为700

chmod -R 700 /home/postgres/pgdata/

postgres用户操作:

#启动
pg_ctl start

验证:

主库执行:

# 查看当前复制会话
select * from pg_stat_replication;

在这里插入图片描述

#如果返回t说明是备库,返回f说明是主库
select pg_is_in_recovery();

在这里插入图片描述

从库执行:

在这里插入图片描述

主库创建表:

CREATE TABLE "user" (
  "id" int4 NOT NULL,
  "name" varchar(255) COLLATE "pg_catalog"."default",
  "age" int4
);

查看从库:

在这里插入图片描述

### 配置概述 在 CentOS 7.9 上设置 PostgreSQL 16.2主从复制涉及多个步骤,包括安装必要的软件包、配置服务器和用服务器以及验证复制功能。通过这种方式可以实现高可用性和数据冗余。 ### 安装 PostgreSQL 确保两个节点都已正确安装并启动 PostgreSQL 服务: ```bash sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install postgresql16-server postgresql16-contrib sudo /usr/pgsql-16/bin/postgresql-16-setup initdb sudo systemctl enable postgresql-16 sudo systemctl start postgresql-16 ``` ### 服务器配置 编辑服务器上的 `postgresql.conf` 文件以启用流复制: ```plaintext listen_addresses = '*' wal_level = replica max_wal_senders = 3 hot_standby = on archive_mode = on archive_command = 'test ! -f /var/lib/pgsql/wals/%f && cp %p /var/lib/pgsql/wals/%f' ``` 创建用于复制的身份认证条目,在 `pg_hba.conf` 中添加如下内容[^1]: ```plaintext host replication all 0.0.0.0/0 md5 ``` 重启 PostgreSQL 使更改生效: ```bash sudo systemctl restart postgresql-16 ``` ### 份初始化 使用 pg_basebackup 工具来获取初始份文件,并将其传输到机上: ```bash sudo -u postgres pg_basebackup -h master_ip -D /var/lib/pgsql/16/data -U replicator -v -P --xlog-method=stream ``` ### 设置恢复配置 在从库的数据目录下创建 `recovery.signal` 文件,并编写 `standby.signal` 和 `postgresql.auto.conf` 来指定数据库连接参数: ```bash echo "primary_conninfo='host=master_ip port=5432 user=replicator password=yourpassword'" | sudo tee /var/lib/pgsql/16/data/recovery.conf touch /var/lib/pgsql/16/data/standby.signal ``` 启动从库实例: ```bash sudo systemctl start postgresql-16 ``` 此时应该可以看到日志中有同步的信息输出,表明正在建立物理复制关系。 ### 测试与监控 可以通过查询系统表 `pg_stat_replication` 查看当前正在进行中的复制会话状态;也可以利用其他工具如 Pgpool-II 或者 Patroni 进一步增强集群管理能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值