postgres实现流复制,服务器centos6.5

安装postgres:https://blog.csdn.net/qq_35456400/article/details/106070433

如果pg_ctl命令报错,可能是环境变量没有生效

[postgres@VM_0_3_centos bin]$ pg_ctl start
-bash: pg_ctl: command not found

流复制:只是添加备库,可以复制主库的数据保存。相当于冷备,主库宕机,备库可以保证主库数据不会大的丢失。

1. 环境

  1. 备库环境和数据库安装包最好和主库一致,否则问题较多
  2. 主库、备库都以及成功安装PG
  3. 本例中master:210.5.100.7
    slave:210.5.100.8

2.配置master

  1. 在master库上建立一个repuser用户,也可以是超级用户
[postgresql @sitdb1 pgdb]$ psql -d postgres -c "CREATE USER repuser
REPLICATION LOGIN ENCRYPTED PASSWORD 'repuser';"
  1. 修改postgresql.conf配置
listen_address = ‘*’  #全IP监听
port = 5432                    #端口指定
wal_level = hot_standby  #PG10流复制最高等级replica 其他 hot_standby,设置主为wal的主机
checkpoint_segments = 8    #超过后自动启动一个检查点操作,视情况可以加大。
max_wal_senders = 5         #流复制进程数,一般为主机.这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 1000 #保持WAL个数、根据是否有批量写入可适当增减
wal_keep_segments = 256 # 设置流复制保留的最多的xlog数目,可以不配置
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的

这里有部分参数解析:https://blog.csdn.net/qq_35456400/article/details/106660071

  1. 修改pg_hba.conf配置,添加一行,允许slave的repuser远程访问
    host replication repuser 210.5.100.8/32 trust

参数解析:
host:固定值
replication : 流复制需要写这个参数
repuser :主库为流复制新建的用户,也可以用超级管理员postgres
210.5.100.8:从库的地址
trust:不需要密码,也可以md5

  1. 启动master的pg
[postgresql @sitdb1 pgdata]$ cd /postgres/pgsql/bin/

[postgresql @sitdb1 bin]$ pg_ctl start

或重启pg

[postgresql @sitdb1 bin]$ pg_ctl restart

3. 配置Slave

  1. 在slave端的PG数据库停止的前提下,以postgresql用户删除数据文件存放目录和表空间目录
   [postgresql @sitdb2 data]$ cd /postgres/pgsql/bin
    [postgresql @sitdb2 bin]$ pg_ctl stop -m fast
    [postgresql @sitdb2 data]$ rm -Rf /data/pgdb/*

  1. 接下来在Slave端执行pg_basebackup程序
    先telnet以下主机的5432端口看看通不通
    telnet 210.5.100.8 5432
    如果报错no route to host
    可能是自己文件配置有问题,
    在不配置的时候是间断性的(可能1个月都正常,然后突然几天不正常)
[root@VM_0_3_centos ~]# cat /etc/hosts
127.0.0.1 VM_0_3_centos VM_0_3_centos
127.0.0.1 localhost.localdomain localhost 
127.0.0.1 localhost4.localdomain4 localhost4

用root用户修改
机器名和机器ip(用空格隔开)

[root@VM_0_3_centos ~]# vim /etc/hosts
127.0.0.1 VM_0_3_centos VM_0_3_centos  
127.0.0.1 localhost.localdomain localhost   210.5.100.8  VM_0_3_centos
127.0.0.1 localhost4.localdomain4 localhost4
[root@VM_0_3_centos ~]# hostname
VM_0_3_centos

如果还不好试着root登录主库,service iptables stop
再试下可不可以

可以telnet通主库5432端口后,执行命令:

[postgresql @sitdb2 bin]$ pg_basebackup -h 210.5.100.7 -D
/data/pgdb/pgdata -U repuser -v -P

在执行完毕 pg_basebackup后,会得到一个从 master端拷贝到slave端的/data/pgdb/pgdata和/data/pgdb/tablespace目录

  1. 编辑备库的postgresql.conf
max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大
hot_standby = on  # 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 1s  # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
  1. 继续 在slave端,编辑一个/data/pgdb/pgdata/recovery.conf,内容如下
    进入到/postgres/pgsql/share目录,复制recovery.conf,这个文件可以从pg的安装目录的share文件夹中获取
    修改recovery.conf,只要修改几个地方就行了
standby_mode = on  # 这个说明这台机器为从库
primary_conninfo = 'host=10.12.12.10 port=5432 user=repuser password=repuser'  # 这个说明这台机器对应主库的信息
recovery_target_timeline = 'latest' # 这个说明这个流复制同步到最新的数据(可以不配置)
  1. 最后启动从库,直接执行 pg_ctl start即可,因为环境变量已经配置好
[postgresql @sitdb2 data]$ cd /postgres/pgsql/bin

[postgresql @sitdb2 bin]$ pg_ctl start
  1. 登录主机检查流复制状态
[postgresql @sitdb2 bin]$ psql

postgres=# select client_addr,sync_state from pg_stat_replication;

client_addr  | sync_state 

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

210.5.100.8 | async

(1 row)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值