PostgreSQL主從熱備配置

PostgreSQL主從熱備配置
主服務器:main.example.com
從服務器:spare.example.com

1、PostgreSQL安裝
2、主數據庫服務器設置
添加從服務器信息
vi /var/lib/pgsql/9.3/data/pg_hba.conf

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.0.0/24          trust
# 配置從數據庫,spare.example.com
host    replication     postgres        192.168.0.27/32         trust
#設置從數據庫同步時使用的用戶,以及從數據庫的ip地址,此處直接用主數據庫的postgres賬戶,可以自己在主數據上新建一個專用同步賬號

vi /var/lib/pgsql/9.3/data/postgresql.conf
wal_level = hot_standby
checkpoint_segments = 16
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/9.3/data/pg_archive/%f'
max_wal_senders = 10          
wal_keep_segments = 32
log_destination = 'csvlog'
logging_collector = on
log_directory = '/var/log/pgsql-log/'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 10MB

log_min_duration_statement = 1000ms
log_lock_waits = on
log_statement = 'ddl'
log_timezone = 'PRC'
lc_messages = 'en_US.UTF-8'
lc_monetary = 'en_US.UTF-8
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'
deadlock_timeout = 1s
autovacuum = on
log_autovacuum_min_duration = 0
check_function_bodies = on

建立歸檔文件和日誌文件
mkdir /var/lib/pgsql/9.3/data/pg_archive
chown -R postgres.postgres /var/lib/pgsql/9.3/data/pg_archive
mkdir /var/log/pgsql-log
chown -R postgres.postgres /var/log/pgsql-log

重啓動服務
service postgresql-9.3 restart
Stopping postgresql-9.3 service:                           [  OK  ]
Starting postgresql-9.3 service:                           [  OK  ]

psql -U postgres
psql (9.3.4)
Type "help" for help.

基礎備份
psql -U postgres

postgres=# select pg_start_backup('');
pg_start_backup
-----------------
0/4000028
(1 row)

postgres=# \q


初始化並啓動從數據庫,並刪除 data目錄
/etc/init.d/postgresql-9.3 initdb
service postgresql-9.3 start
chkconfig postgresql-9.3 on
rm -rf /var/lib/pgsql/9.3/data

拷貝數據庫至從服務器
scp -rp /var/lib/pgsql/9.3/data [email protected]:/var/lib/pgsql/9.3/
修改從服務器目錄權限
chown -R postgres.postgres /var/lib/pgsql/9.3/data

結束主數據庫的備份狀態,再拷貝主數據的存檔文件到從數據庫
psql -U postgres
psql (9.3.4)
Type "help" for help.

postgres=# select pg_stop_backup();
NOTICE:  pg_stop_backup complete, all required WAL segments have been archived
pg_stop_backup
----------------
0/4014C90
(1 row)

postgres=# \q

查看歸檔信息
cd /var/lib/pgsql/9.3/data/pg_archive
ls
000000010000000000000002  000000010000000000000004
000000010000000000000003  000000010000000000000004.00000028.backup

複製存檔文件夾至從服務器
scp -rp /var/lib/pgsql/9.3/data/pg_archive [email protected]:/var/lib/pgsql/9.3/data/
修改從服務器目錄權限
chown -R postgres.postgres /var/lib/pgsql/9.3/data/pg_archive
從數據庫配置
mkdir /var/log/pgsql-log
chown -R postgres.postgres /var/log/pgsql-log

vi /var/lib/pgsql/9.3/data/postgresql.conf
hot_standby = on  

新建recovery.conf文件,並錄入以下內容
vi /var/lib/pgsql/9.3/data/recovery.conf

restore_command = 'cp /var/lib/pgsql/9.3/data/pg_archive/%f %p'
standby_mode = 'on'
primary_conninfo = 'host=main.example.com port=5432 user=postgres password=postgres'

刪除從數據庫postmaster.pid文件以及pg_xlog下的文件,並重新啓動服務
rm /var/lib/pgsql/9.3/data/postmaster.pid
rm -rf /var/lib/pgsql/9.3/data/pg_xlog/*
service postgresql-9.3 restart


登陸從服務器查看數據庫
psql -U postgres
psql (9.3.4)
Type "help" for help.

postgres=# \l
                                 List of databases
  Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges  

-----------+----------+----------+-------------+-------------+----------------------
-
postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          
+
          |          |          |             |             | postgres=CTc/postgres
template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          
+
          |          |          |             |             | postgres=CTc/postgres
tigase    | tigase   | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
(4 rows)

postgres=#


登陸主服務器創建測試數據庫

psql -U postgres
psql (9.3.4)
Type "help" for help.

postgres=# create database test owner tigase;
CREATE DATABASE

登陸從服務器查看數據庫
psql -U postgres
psql (9.3.4)
Type "help" for help.

postgres=# \l
                                 List of databases
  Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges  

-----------+----------+----------+-------------+-------------+----------------------
-
postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          
+
          |          |          |             |             | postgres=CTc/postgres
template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          
+
          |          |          |             |             | postgres=CTc/postgres
test      | tigase   | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
tigase    | tigase   | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
(5 rows)

postgres=#

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章