【PostgreSQL】PostgreSQL读写分离之Hot Standby

平台:OEL 5.8 x64

主库:192.168.70.10  edb1 postgreSQL 9.3.9

备库:192.168.70.11  edb2 postgreSQL 9.3.9

备库也要创建好归档目录

mkdir -p/home/pg/pgsql/backup/archived_log/

1.配置主备库互信

主库:

[pg@edb1~]$ssh-keygen -t rsa

[pg@edb1~]$ cat/home/pg/.ssh/id_rsa.pub >> /home/pg/.ssh/authorized_keys

备库:

[pg@edb2~]$ssh-keygen -t rsa

主库:

[pg@edb1~]$ sshedb2 cat /home/pg/.ssh/id_rsa.pub >> /home/pg/.ssh/authorized_keys

[pg@edb1~]$ scp/home/pg/.ssh/authorized_keys edb2:/home/pg/.ssh/authorized_keys

如果配置完不通的话去检查一下权限id_rsa 600 .ssh 700  权限不能多也不能少 否则都不能实现ssh互信

2.配置文件(主备都要)

vi pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.70.0/24        trust

 

#local   replication     pg                               trust
#host    replication     pg        ::1/128                trust

host     replication     pguser       192.168.70.0/24       trust
(192.168.70.0/24 为双方所在网络的网段)

vi postgresql.conf    --确认以下参数

listen_addresses= '*'

max_connections =100

shared_buffers =128MB

wal_level =hot_standby

fsync = on

full_page_writes= on

checkpoint_segments= 32

archive_mode = on

archive_command ='cp %p /home/pg/pgsql/backup/archived_log/%f && scp %ppg@edb2:/home/pg/pgsql/backup/archived_log/%f '

max_wal_senders =2

wal_keep_segments= 250

hot_standby = on

max_standby_archive_delay= 300s

max_standby_streaming_delay= 300s

wal_receiver_status_interval= 10s

hot_standby_feedback= on

log_line_prefix ='[%t]'

基础参数如下:

listen_addresses= '*'

wal_level =hot_standby

max_wal_senders =3

wal_keep_segments= 8

archive_mode = on

archive_command ='cp %p /var/lib/pgsql/archive/%f && scp %[email protected]:/var/lib/pgsql/archive/%f'

checkpoint_segments= 8

然后重启数据库 pg_ctl-D /home/pg/pgsql/data restart

3.主库创建用户

[pg@edb1 data]$psql -c "CREATE USER repuser REPLICATION LOGIN ENCRYPTED PASSWORD'repuser';"

CREATE ROLE

4.主库开始备份

[pg@edb1 data]$psql -U pg -h 192.168.70.10 -c "SELECT pg_start_backup('label',true)"

 pg_start_backup

-----------------

 0/9000028

(1 row)

5.rsync同步主库数据库目录到备库

[pg@edb1 ~]$rsynv -a /home/pg/pgsql/data 192.168.70.11:/home/pg/pgsql/data --excludepostmaster.pid

6.主库停止备份

[pg@edb1 data]$psql -U pg -h 192.168.70.10 -c "SELECT pg_stop_backup()"

NOTICE:  pg_stop_backup complete, all required WALsegments have been archived

 pg_stop_backup

----------------

 0/90000F0

(1 row)

7.备库配置recovery.conf

[pg@edb2 ~]$ cp/home/pg/pgsql/share/recovery.conf.sample /home/pg/pgsql/data/recovery.conf

[pg@edb2 ~]$ vi/home/pg/pgsql/data/recovery.conf

standby_mode = on

primary_conninfo= 'host=192.168.70.10 port=5432 user=repuser password=repuser' # e.g.'host=localhost port=5432'

trigger_file ='/tmp/trigger.replication'

restore_command ='cp /home/pg/pgsql/backup/archived_log/%f "%p"'

8.启动备库

[pg@edb2 ~]$pg_ctl -D /home/pg/pgsql/data/ start

server starting

[pg@edb2 ~]$[2015-09-22 17:17:49 CST]LOG:  databasesystem was shut down in recovery at 2015-09-22 02:40:22 CST

[2015-09-2217:17:49 CST]LOG:  entering standby mode

cp: cannot stat`/home/pg/pgsql/backup/archived_log/00000002.history': No such file ordirectory

cp: cannot stat`/home/pg/pgsql/backup/archived_log/000000020000000000000014': No such file ordirectory

[2015-09-2217:17:49 CST]LOG:  redo starts at0/140011B8

[2015-09-2217:17:49 CST]LOG:  consistent recoverystate reached at 0/140142B8

[2015-09-2217:17:49 CST]LOG:  database system isready to accept read only connections

9.测试流复制配置正常

由于环境为本地虚拟机,同步几乎为实时

猜你喜欢

转载自blog.csdn.net/badly9/article/details/50402861