master:10.0.1.114
slaver:10.0.1.116
一、yum安裝https://blog.csdn.net/weixin_41048363/article/details/80310285
二、主從配置
1、主數據配置(10.0.1.114)
1.1 初始化
/usr/pgsql-9.6/bin/postgresql96-setup initdb
1.2 啟動postgresql
systemctl start postgresql-9.6
1.3 切換到postgres用戶(安裝好生成默認的用戶)
[root@steven1 data]# su - postgres 上一次登錄:三 5月 16 09:19:49 UTC 2018pts/0 上 -bash-4.2$ -bash-4.2$ psql 進入數據庫 postgres=#
1.4 創建賬號並授權
postgres=# create role 賬戶名 login replication encrypted password '密碼';
1.5 修改/var/lib/pgsql/9.6/data/pg_hba.conf配置文件.
# IPv4 local connections: host all all 127.0.0.1/32 ident # 添加如下內容 host replication repl 10.0.1.0/24 md5 host all repl 10.0.1.1/24 trust
1.6 修改postgresql.conf
-bash-4.2$ vim postgresql.conf listen_addresses = '10.0.1.114' wal_level = hot_standby #熱備模式 max_wal_senders= 6 #可以設置最多幾個流復制鏈接,差不多有幾個從,就設置多少 wal_keep_segments = 10240 #重要配置 wal_send_timeout = 60s max_connections = 512 #從庫的 max_connections要大於主庫 archive_mode = on #允許歸檔 archive_command = 'cp %p /url/path%f' #根據實際情況設置
三、從數據庫配置
1、切換到postgres
[root@localhost data]# su - postgres
2、拷貝master配置相關文件。
-bash-4.2$ rm -rf /var/lib/pgsql/9.6/data/* -bash-4.2$ pg_basebackup -h 10.0.1.114 -U repl -D /var/lib/pgsql/9.6/data -X stream -P -bash-4.2$ cp /usr/pgsql-9.6/share/recovery.conf.sample /var/lib/pgsql/9.6/data/recovery.conf
3、修改recovery.conf文件
standby_mode = on primary_conninfo = 'host=10.0.1.114 port=5432 user=master創建的用戶名 password='密碼' trigger_file = '/var/lib/pgsql/9.6/data/trigger.kenyon' #主從切換時后的觸發文件 recovery_target_timeline = 'latest'
4、修改postgresql.conf文件
listen_addresses = 10.0.1.116 wal_level = hot_standby max_connections = 1000 #一般從的最大鏈接要大於主的。 hot_standby = on #說明這台機器不僅僅用於數據歸檔,也用於查詢 max_standby_streaming_delay = 30s wal_receiver_status_interval = 10s #多久向主報告一次從的狀態。 hot_standby_feedback = on #如果有錯誤的數據復制,是否向主進行范例
四、檢測
1、在master數據庫中測試
postgres=# select client_addr,sync_state from pg_stat_replication; client_addr | sync_state -------------+------------ 10.0.1.116 | async (1 row)
2、在master數據庫中創建test數據庫
postgres=# create database test;
CREATE DATABASE
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 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(4 rows)
postgres=#
3、在從數據庫中查看數據庫是否同步。
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 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(4 rows)
參考:https://www.linuxidc.com/Linux/2017-03/142145.htm
