postgres 异步standby 创建

本文介绍如何在PostgreSQL中设置异步Standby,包括配置步骤、注意事项及测试验证。适用于希望提高数据库高可用性和容灾能力的场景。

postgres 异步standby 创建

 

说明

 

1、如果要求及时性不是很高(前后几秒钟的差距),那么建议使用postgres的备份数据库可以是异步流复制STANDBY。

2、主节点指的是生产库,standby指的是备份库

    3、如无说明,#代表root用户,$代表osdba用户

 

问题

 

1、该测试是在postgres9.3系列完成,已知在postgres9.0系列才开始流复制概念

2、该测试没有测试表空间为自己创建时(默认只有的表空间)的迁移情况,所以迁移时要注意

 

环境

 

  操作系统:CentOS release 6.5 (Final)

  数据库:postgres (9.3.13)

  

异步standby创建

 

 

1、以主节点的相关信息为模板,新建和主节点类似的服务器

 

略过

 

2、检查主节点的编译环境

 

$ pg_config --configure

'--prefix=/usr/local/pgsql' '--with-perl' '--with-python'

 

3、在standby节点模仿主节点进行编译工作,进行三板斧操作

 

# ./configure --prefix=/usr/local/pgsql --with-perl --with-python

# make

# make install

 

4、模仿主节点创建用户名密码,以及.bash_profile环境

   

略过

 

5、在主节点创建用户拥有权限replication

 

   $ psql -d postgres

   

   =# create role replica login REPLICATION ENCRYPTED PASSWORD 'replica

 

6、修改主节点的pg_hba.conf

  

 $ cd $PGDATA

   $ vim pg_hba.conf

   

host    replication    replica          192.168.1.0/24          md5

 

   

7、修改主节点的postgresql.conf

  

 $ cd $PGDATA

   $ vim postgresql.conf

 

    listen_addresses = '*'

    max_wal_senders = 32

    wal_keep_segments = 256

wal_level = hot_standby

hot_standby = on

 

8、standby节点执行基础备份

    

    $ pg_basebackup -F p -D $PGDATA -R -x -h 192.168.1.36 -p 5432 -U replica

    $ ls -ls $PGDATA

    

9、检查并修改standby节点的recovery.conf

    

$ vim $PGDATA/recovery.conf

  

standby_mode = 'on'

primary_conninfo = 'user=replica password=replica host=192.168.1.36 port=5432 sslmode=disable sslcompression=1'

 

如果符合上文中standby执行基础备份的脚本密码,就不需要修改

 

10、启动standby节点并检查进程

 

$ pg_ctl start

$ psql

$ ps -ef|grep postgres

 

 

11、测试

 

1、主节点和standby是否同步

 

在主节点上创建一张表,并插入数据,测试standby是否存在表和数据

[osdba@pg36 data]$ psql

psql (9.3.13)

Type "help" for help.

 

osdba=# create table t_1(id int,info text);

CREATE TABLE

osdba=# insert into t_1 select generate_series(1,1000),'good';

INSERT 0 1000

 

[osdba@pg37 data]$ psql

psql (9.3.13)

Type "help" for help.

 

osdba=# \dt

       List of relations

 Schema | Name | Type  | Owner

--------+------+-------+-------

 public | t_1  | table | osdba

(1 row)

 

osdba=# select count(1) from t_1;

 count

-------

  1000

(1 row)

 

2、standby挂掉后,是否影响主节点使用

 

当备机挂掉时,并不影响主机的正常的使用,等备机重新启动时,自动将数据同步

 

[osdba@pg37 data]$ pg_ctl stop

waiting for server to shut down.... done

server stopped

 

[osdba@pg36 data]$ psql

psql (9.3.13)

Type "help" for help.

 

osdba=# insert into t_1 select generate_series(1,1000),'good';

INSERT 0 1000

osdba=# insert into t_1 select generate_series(1,1000),'good';

INSERT 0 1000

 

[osdba@pg37 data]$ pg_ctl start

server starting

[osdba@pg37 data]$ psql

psql (9.3.13)

Type "help" for help.

 

osdba=# select count(1) from t_1;

 count

-------

  3000

(1 row)

 

3、主节点挂掉后,是否影响standby节点使用

 

当主机挂掉时,备机是否可以读取数据,但不允许插入更改数据

 

[osdba@pg37 data]$ psql

psql (9.3.13)

Type "help" for help.

 

osdba=# select count(1) from t_1;

 count

-------

  3000

(1 row)

 

osdba=# insert into t_1 values(1,'1');

ERROR:  cannot execute INSERT in a read-only transaction

 

 

<think>好的,我现在需要帮用户解答关于PostgreSQL数据库主从同步的配置问题,包括同步和异步的设置。首先,我得回忆一下PostgreSQL的主从复制机制,主要是基于流复制(streaming replication)的。用户可能想了解如何配置主库和备库,以及如何调整同步和异步模式。 首先,用户可能是数据库管理员或者开发人员,需要搭建高可用性的数据库环境。他们的需求可能是确保数据的一致性和可用性,同时了解同步和异步复制的优缺点。同步复制能保证数据强一致性,但可能影响性能;异步复制则性能更好,但有数据丢失的风险。 接下来,我需要整理配置步骤。主库的配置通常涉及修改postgresql.conf和pg_hba.conf文件,设置监听、归档模式、复制参数,并创建复制用户。备库则需要使用pg_basebackup工具初始化,并配置recovery.conf(在较新版本中是standby.signal)。然后,区分同步和异步的配置方法,主库中指定synchronous_standby_names为具体的应用名或'*',而异步则留空或注释掉。 还要注意用户可能遇到的常见问题,比如如何验证复制状态,使用pg_stat_replication视图。另外,用户可能关心同步模式下如果备库宕机,主库是否会阻塞,这时需要设置synchronous_commit参数为on或remote_apply,以及如何添加多个备库来避免单点故障。 需要提醒用户注意事项,比如防火墙设置、日志监控、定期测试故障转移等。可能用户没有提到的深层需求是系统的稳定性和灾难恢复策略,所以应该涵盖这些方面。 最后,确保回答结构清晰,步骤明确,并附上相关命令和配置示例,让用户能一步步操作。同时,强调备份和权限的重要性,避免配置错误导致的数据问题。</think>以下是PostgreSQL数据库主从同步(主-备复制)的配置步骤,包含同步(Synchronous)和异步(Asynchronous)模式的说明: --- ### **1. 主库(Primary)配置** #### **1.1 修改配置文件 `postgresql.conf`** ```conf # 启用归档模式(必须) wal_level = replica archive_mode = on archive_command = 'test ! -f /path/to/archive/%f && cp %p /path/to/archive/%f' # 设置主库允许流复制 max_wal_senders = 5 # 允许的最大WAL发送进程数 wal_keep_size = 1GB # 保留的WAL日志大小 # 同步模式设置(可选,异步则跳过) synchronous_standby_names = 'standby1' # 指定同步备库名称(若为异步则注释此行) ``` #### **1.2 修改客户端认证文件 `pg_hba.conf`** 允许备库以复制角色连接主库: ```conf # 格式:TYPE DATABASE USER ADDRESS METHOD host replication replica_user <备库IP>/32 scram-sha-256 ``` #### **1.3 创建复制专用用户** ```sql CREATE ROLE replica_user WITH LOGIN REPLICATION PASSWORD 'your_password'; ``` #### **1.4 重启主库服务** ```bash sudo systemctl restart postgresql ``` --- ### **2. 备库(Standby)配置** #### **2.1 初始化备库数据** 使用 `pg_basebackup` 从主库拉取基础备份: ```bash pg_basebackup -h <主库IP> -U replica_user -D /var/lib/postgresql/XX/main -P -v -R --wal-method=stream ``` #### **2.2 配置 `postgresql.conf`** ```conf # 明确声明为备库 hot_standby = on ``` #### **2.3 创建恢复配置文件** (PostgreSQL 12+ 使用 `standby.signal`,旧版本使用 `recovery.conf`) 新建 `standby.signal` 文件(空文件即可),并修改 `postgresql.conf` 添加: ```conf # 连接主库信息 primary_conninfo = 'host=<主库IP> port=5432 user=replica_user password=your_password' ``` #### **2.4 启动备库** ```bash sudo systemctl start postgresql ``` --- ### **3. 同步 vs 异步配置** #### **3.1 同步复制(Synchronous)** - **主库配置**:在 `postgresql.conf` 中指定同步备库名称: ```conf synchronous_standby_names = 'standby1' # 与备库的 `application_name` 匹配 ``` - **备库配置**:在 `primary_conninfo` 中添加 `application_name`: ```conf primary_conninfo = '... application_name=standby1 ...' ``` - **特性**:主库事务提交需等待备库确认,数据强一致,但可能降低性能。 #### **3.2 异步复制(Asynchronous)** - **主库配置**:注释或删除 `synchronous_standby_names`: ```conf #synchronous_standby_names = '' ``` - **特性**:主库事务提交无需等待备库,性能更高,但有数据延迟风险。 --- ### **4. 验证复制状态** #### **4.1 在主库执行查询** ```sql SELECT * FROM pg_stat_replication; ``` - 检查 `state` 字段为 `streaming`,`sync_state` 为 `sync`(同步)或 `async`(异步)。 #### **4.2 在备库执行查询** ```sql SELECT pg_is_in_recovery(); ``` - 返回 `t` 表示处于备库状态。 --- ### **注意事项** 1. **同步模式风险**:若同步备库宕机,主库写入可能阻塞(可通过设置 `synchronous_commit = remote_apply` 调整超时)。 2. **多备库配置**:支持一主多备,例如: ```conf synchronous_standby_names = 'standby1, standby2' # 多个同步备库 ``` 3. **网络与存储**:同步复制需低延迟网络,建议使用SSD存储。 4. **监控**:定期检查日志(`/var/log/postgresql/postgresql-XX-main.log`)和复制延迟。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值