安装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. 环境
- 备库环境和数据库安装包最好和主库一致,否则问题较多
- 主库、备库都以及成功安装PG
- 本例中master:210.5.100.7
slave:210.5.100.8
2.配置master
- 在master库上建立一个repuser用户,也可以是超级用户
[postgresql @sitdb1 pgdb]$ psql -d postgres -c "CREATE USER repuser
REPLICATION LOGIN ENCRYPTED PASSWORD 'repuser';"
- 修改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
- 修改pg_hba.conf配置,添加一行,允许slave的repuser远程访问
host replication repuser 210.5.100.8/32 trust
参数解析:
host:固定值
replication : 流复制需要写这个参数
repuser :主库为流复制新建的用户,也可以用超级管理员postgres
210.5.100.8:从库的地址
trust:不需要密码,也可以md5
- 启动master的pg
[postgresql @sitdb1 pgdata]$ cd /postgres/pgsql/bin/
[postgresql @sitdb1 bin]$ pg_ctl start
或重启pg
[postgresql @sitdb1 bin]$ pg_ctl restart
3. 配置Slave
- 在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/*
- 接下来在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目录
- 编辑备库的postgresql.conf
max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大
hot_standby = on # 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 1s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
- 继续 在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' # 这个说明这个流复制同步到最新的数据(可以不配置)
- 最后启动从库,直接执行 pg_ctl start即可,因为环境变量已经配置好
[postgresql @sitdb2 data]$ cd /postgres/pgsql/bin
[postgresql @sitdb2 bin]$ pg_ctl start
- 登录主机检查流复制状态
[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)