實驗環境
名稱
IP
系統
Master
172.17.10.190
Centos 6.5
Slave
172.17.10.189
1.yun安裝
1
2
<code>rpm -ivh https:</code><code>//download</code><code>.postgresql.org</code><code>/pub/repos/yum/9</code><code>.6</code><code>/redhat/rhel-6-x86_64/pgdg-centos96-9</code><code>.6-3.noarch.rpm</code>
<code>yum </code><code>install</code> <code>postgresql96.x86_64 postgresql96-server.x86_64 -y</code>
2.主從配置
2.1 主資料庫配置
啟動master
3
4
<code>/etc/init</code><code>.d</code><code>/postgresql-9</code><code>.6 initdb</code>
<code>/etc/init</code><code>.d</code><code>/postgresql-9</code><code>.6 start</code>
<code>su</code> <code>- postgres</code>
<code>psql</code>
授權
<code>create role repl login replication encrypted password </code><code>'51idc.com'</code><code>;</code>
編輯hba檔案
/var/lib/pgsql/9.6/data/pg_hba.conf
新增
<code>host replication repl 172.17.10.0</code><code>/24</code> <code>md5</code>
<code>host all repl 172.17.10.0</code><code>/24</code> <code>trust</code>
編輯配置檔案
/var/lib/pgsql/9.6/data/postgresql.conf
5
6
7
8
<code>listen_addresses = 172.17.10.190</code>
<code>wal_level = hot_standby </code><code>#熱備模式</code>
<code>max_wal_senders= 6 </code><code>#可以設定最多幾個流複制連結,差不多有幾個從,就設定多少</code>
<code>wal_keep_segments = 10240 </code><code>#重要配置 </code>
<code>wal_send_timeout = 60s </code>
<code>max_connections = 512 </code><code>#從庫的 max_connections要大于主庫</code>
<code>archive_mode = on </code><code>#允許歸檔 </code>
<code>archive_command = </code><code>'cp %p /url/path%f'</code> <code>#根據實際情況設定</code>
2.2 從資料庫配置
如果開始為啟動資料庫可忽略下一步
<code>rm</code> <code>-rf </code><code>/var/lib/pgsql/9</code><code>.6</code><code>/data/</code><code>* </code><code>#開始沒有啟動從資料庫,這一步可以省略 </code>
<code>pg_basebackup -h 172.17.10.190 -U repl -D </code><code>/var/lib/pgsql/9</code><code>.6</code><code>/data</code> <code>-X stream -P</code>
<code>cp</code> <code>/usr/pgsql-9</code><code>.6</code><code>/share/recovery</code><code>.conf.sample </code><code>/var/lib/pgsql/9</code><code>.6</code><code>/data/recovery</code><code>.conf</code>
修改配置檔案recovery.conf
<code>standby_mode = on</code>
<code>primary_conninfo = </code><code>'host=172.17.10.190 port=5432 user=repl password=51idc.com'</code>
<code>trigger_file = </code><code>'/var/lib/pgsql/9.6/data/trigger.kenyon'</code> <code>#主從切換時後的觸發檔案</code>
<code>recovery_target_timeline = </code><code>'latest'</code>
配置postgresql.conf檔案
<code>listen_addresses = 172.17.10.189</code>
<code>wal_level = hot_standby </code>
<code>max_connections = 1000 </code><code>#一般從的最大連結要大于主的。 </code>
<code>hot_standby = on </code><code>#說明這台機器不僅僅用于資料歸檔,也用于查詢 </code>
<code>max_standby_streaming_delay = 30s </code>
<code>wal_receiver_status_interval = 10s </code><code>#多久向主報告一次從的狀态。 </code>
<code>hot_standby_feedback = on </code><code>#如果有錯誤的資料複制,是否向主進行範例</code>
檢測
<code>select</code> <code>client_addr,sync_state from pg_stat_replication;</code>
<a href="https://s5.51cto.com/wyfs02/M00/8F/1D/wKioL1jT9aOCAZVTAACJLn0Arvk876.png" target="_blank"></a>
檢視主從狀态
<code>select</code> <code>* from pg_stat_replication;</code>
<a href="https://s3.51cto.com/wyfs02/M02/8F/1F/wKiom1jT9oqDxXLKAADvjuYegcw403.png" target="_blank"></a>
腳本監控主從
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<code>#!/bin/bash</code>
<code># mail [email protected]</code>
<code>data=`</code><code>date</code> <code>+%Y-%M-%d</code><code>" "</code><code>%H:%m`</code>
<code>netstat</code> <code>-lntup|</code><code>grep</code> <code>5432 && </code><code>ps</code> <code>-ef|</code><code>grep</code> <code>postmaster</code>
<code>if</code> <code>[ $? -</code><code>eq</code> <code>0 ];</code><code>then</code>
<code>for</code> <code>IP </code><code>in</code> <code>172.17.10.188 172.17.10.189</code>
<code>do</code>
<code>/usr/bin/psql</code> <code>-h 172.17.10.190 -p 5432 -U repl -d postgres --</code><code>command</code> <code>"select * from pg_stat_replication"</code><code>|</code><code>grep</code> <code>$IP</code>
<code>if</code> <code>[ </code><code>"$?"</code> <code>!= </code><code>"0"</code> <code>];</code><code>then</code>
<code>echo</code>
<code> </code><code>"postgresql master-slave status is error! please login check!"</code><code>|mail -r </code>
<code>"[email protected]"</code> <code>-s </code><code>"postgresql master-slave status is error"</code>
<code>[email protected] \</code>
<code>&& </code><code>echo</code> <code>"$data postgresql postgresql master-slave status is error!"</code><code>>></code><code>/var/log/postgresql-error</code><code>.log</code>
<code>fi</code>
<code>done</code>
<code>else</code>
2.3主從切換
主庫檢視程序為sender
<a href="https://s3.51cto.com/wyfs02/M00/8F/22/wKiom1jUiKTwsu0UAALvaWigL5E515.png" target="_blank"></a>
備庫
<a href="https://s3.51cto.com/wyfs02/M02/8F/20/wKioL1jUiRjB8XPAAAJNDLZCTIU269.png" target="_blank"></a>
停止主庫
<a href="https://s5.51cto.com/wyfs02/M00/8F/20/wKioL1jUiVGSZNWiAAEmy2IYoj8840.png" target="_blank"></a>
檢視slave的日志
<a href="https://s1.51cto.com/wyfs02/M01/8F/1D/wKioL1jT-KujDMuiAANHbW6b5yI968.png" target="_blank"></a>
建立觸發檔案,切換主
<code>touch</code> <code>trigger.kenyon</code>
<a href="https://s3.51cto.com/wyfs02/M00/8F/1F/wKiom1jT-Q3RDgNUAAUdPTrS_YI464.png" target="_blank"></a>
檢視slave的日志,面前已經切換為主
<a href="https://s4.51cto.com/wyfs02/M02/8F/1F/wKiom1jT-UnyC2mnAAIvlmww7-I077.png" target="_blank"></a>
使用pg_controldata
<a href="https://s2.51cto.com/wyfs02/M00/8F/1D/wKioL1jT-XXiXGkoAABQpY5XhfM716.png" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M02/8F/1D/wKioL1jT-bDAuyz9AANjzAsM3a4422.png" target="_blank"></a>
備機狀态為: in archive recovery
主庫狀态為:in production
本文轉自 KaliArch 51CTO部落格,原文連結:http://blog.51cto.com/kaliarch/1909936,如需轉載請自行聯系原作者