天天看點

Postgresq9.6主從部署Postgresq9.6主從部署

實驗環境

名稱

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 &amp;&amp; </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>&amp;&amp; </code><code>echo</code> <code>"$data postgresql postgresql master-slave status is error!"</code><code>&gt;&gt;</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,如需轉載請自行聯系原作者