centos postgresql主从复制

762
2025/4/13 3:32:12
栏目: 云计算
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在CentOS上设置PostgreSQL的主从复制(Master-Slave Replication)可以确保数据的高可用性和读取负载的均衡。以下是一个基本的步骤指南:

1. 准备工作

在主服务器上:

  1. 安装PostgreSQL

    sudo yum install postgresql-server postgresql-contrib
    
  2. 初始化数据库

    sudo systemctl start postgresql
    sudo systemctl enable postgresql
    sudo postgresql-setup initdb
    
  3. 配置主服务器: 编辑 /var/lib/pgsql/data/postgresql.conf 文件:

    listen_addresses = '*'  # 允许所有IP连接
    wal_level = replica    # 设置为replica级别
    max_wal_senders = 10   # 最大WAL发送者数量
    wal_keep_segments = 64 # 保留的WAL段数量
    
    编辑 `/var/lib/pgsql/data/pg_hba.conf` 文件,添加从服务器的连接权限:
    ```bash
    host    replication     replicator     <从服务器IP>/32    md5
    
  4. 重启PostgreSQL服务

    sudo systemctl restart postgresql
    
  5. 创建复制用户

    CREATE ROLE replicator WITH REPLICATION PASSWORD 'your_password' LOGIN;
    
  6. 获取当前日志位置

    SELECT pg_current_wal_lsn();
    

在从服务器上:

  1. 安装PostgreSQL

    sudo yum install postgresql-server postgresql-contrib
    
  2. 初始化数据库

    sudo systemctl start postgresql
    sudo systemctl enable postgresql
    sudo postgresql-setup initdb
    
  3. 配置从服务器: 编辑 /var/lib/pgsql/data/postgresql.conf 文件:

    listen_addresses = '*'  # 允许所有IP连接
    hot_standby = on       # 启用热备模式
    
    编辑 `/var/lib/pgsql/data/pg_hba.conf` 文件,添加主服务器的连接权限:
    ```bash
    host    all             all             <主服务器IP>/32            md5
    
  4. 重启PostgreSQL服务

    sudo systemctl restart postgresql
    

2. 设置复制

在主服务器上:

  1. 创建复制槽

    SELECT * FROM pg_create_physical_replication_slot('replication_slot_name', 'pgoutput');
    
  2. 记录日志位置: 记录下之前获取的日志位置。

在从服务器上:

  1. 恢复数据库: 如果从服务器是新初始化的,需要从主服务器备份并恢复数据。

  2. 配置恢复命令: 编辑 /var/lib/pgsql/data/recovery.conf 文件(CentOS 7及以下)或 /var/lib/pgsql/data/recovery.conf 文件(CentOS 8及以上):

    standby_mode = 'on'
    primary_conninfo = 'host=<主服务器IP> dbname=postgres user=replicator password=your_password'
    restore_command = 'cp /var/lib/pgsql/archive/%f %p'
    trigger_file = '/tmp/postgresql.trigger.5432'
    
  3. 启动从服务器

    sudo systemctl start postgresql
    

3. 验证复制

在主服务器上:

SELECT * FROM pg_stat_replication;

在从服务器上:

SELECT * FROM pg_stat_replication;

如果一切正常,你应该能看到从服务器正在接收来自主服务器的数据。

注意事项

  • 确保防火墙允许PostgreSQL端口(默认5432)的通信。
  • 定期检查复制状态,确保数据同步正常。
  • 考虑使用更高级的复制方案,如逻辑复制或流复制,以满足更复杂的需求。

通过以上步骤,你应该能够在CentOS上成功设置PostgreSQL的主从复制。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: 如何优化centos中的lsnrctl性能