Practice - Postgresql replication

測試環(huán)境

Azure VM
OS: redhat 7.3 (RHEL)
Postgresql: 9.2.24 (default)
參考文檔 https://www.howtoforge.com/tutorial/how-to-install-and-configure-master-slave-replication-with-postgresql-96-on-centos-7/

過程概括

  • 安裝/配置 Postgresql
  • 配置防火墻
  • 配置 Master
  • 配置 Slave
  • 測試

安裝/配置 Postgresql (on Master and Slave)

數(shù)據(jù)庫安裝

sudo yum install -y postgresql-server postgresql-contrib

初始化數(shù)據(jù)庫

sudo postgresql-setup initdb

配置自啟動

$ sudo systemctl start postgresql
$ sudo systemctl enable postgresql
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql.service to /usr/lib/systemd/system/postgresql.service.

檢查服務(wù), 發(fā)現(xiàn)5432端口

$ sudo netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      4657/sshd           
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      36607/postgres      
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::22                   :::*                    LISTEN      4657/sshd           
tcp6       0      0 ::1:5432                :::*                    LISTEN      36607/postgres      

配置防火墻

$ sudo firewall-cmd --add-service=postgresql --permanent
success
$ sudo firewall-cmd --reload
success
$ sudo firewall-cmd --list-all
public (active)
 target: default
 icmp-block-inversion: no
 interfaces: eth0
 sources:
 services: dhcpv6-client postgresql ssh
 ports:
 protocols:
 masquerade: no
 forward-ports:
 sourceports:
 icmp-blocks:
 rich rules:

配置 Master

前期準備我衬,創(chuàng)建同步賬號和archive目錄

$ sudo su - postgres
-bash-4.2$ createuser --replication -P replica
Enter password for new role:
Enter it again:
-bash-4.2$ cd /var/lib/pgsql/
-bash-4.2$ mkdir archive

修改 postgresql.conf

-bash-4.2$ cd /var/lib/pgsql/data
-bash-4.2$ vi postgresql.conf

修改以下部分
Uncomment the 'listen_addresses' line and change value of the Master server IP address

listen_addresses = '10.0.0.4'

Uncomment 'wal_level' line and change the value to 'hot_standby'.

wal_level = hot_standby

For the synchronization level, we will use local sync. Uncomment and change value line as below.

synchronous_commit = local

Enable archiving mode and give the archive_command variable a command as value. 這是手工replication需要的數(shù)據(jù)对人,預(yù)防自動同步失敗

archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/archive/%f'

For the 'Replication' settings, uncomment the 'wal_sender' line and change value to 2 (in this tutorial, we use only 2 servers master and slave), and for the 'wal_keep_segments' value is 10.

max_wal_senders = 2
wal_keep_segments = 10

For the application name, uncomment 'synchronous_standby_names' line and change value to 'pgslave01'.

synchronous_standby_names = 'pgslave01'

保存退出

修改 pg_hba.conf

Paste configuration below to the end of the line.

# Localhost
host    replication     replica          127.0.0.1/32            md5

# PostgreSQL Master IP address
host    replication     replica          10.0.0.4/32            md5

# PostgreSQL SLave IP address
host    replication     replica          10.0.0.5/32            md5

重啟服務(wù)

systemctl restart postgresql

配置Slave

停服務(wù)菠发,把data目錄備份

$ sudo systemctl stop postgresql
$ sudo su - postgres
$ cd /var/lib/pgsql
$ mv data{,-backup}

把data 目錄從Master 上同步過來搬男。

-bash-4.2$ pg_basebackup -h 10.0.0.4 -U replica -D /var/lib/pgsql/data -P --xlog
Password:
36536/36536 kB (100%), 1/1 tablespace

修改 postgresql.conf
listen_addresses 改成自己的IP

listen_addresses = '10.0.0.5'

Enable hot_standby on slave

hot_standby = on

新建文件 recovery.conf
內(nèi)容如下:

standby_mode = 'on'
primary_conninfo = 'host=10.0.0.4 port=5432 user=replica password=123456 application_name=pgslave01'
trigger_file = '/tmp/postgresql.trigger.5432'

修改文件權(quán)限

chmod 600 recovery.conf

啟動服務(wù)

systemctl start postgresql

測試

狀態(tài)檢查 on master

psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"

You should see the state value is streaming, and the sync_state is sync.

$ sudo su - postgres
-bash-4.2$ psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
 application_name |   state   | sync_priority | sync_state
------------------+-----------+---------------+------------
 pgslave01        | streaming |             1 | sync
(1 row)

-bash-4.2$ psql -x -c "select * from pg_stat_replication;"
-[ RECORD 1 ]----+-----------------------------
pid              | 37658
usesysid         | 16384
usename          | replica
application_name | pgslave01
client_addr      | 10.0.0.5
client_hostname  |
client_port      | 49766
backend_start    | 2018-09-10 07:48:45.91729+00
state            | streaming
sent_location    | 0/301BC80
write_location   | 0/301BC80
flush_location   | 0/301BC80
replay_location  | 0/301BC80
sync_priority    | 1
sync_state       | sync

新建數(shù)據(jù)庫和表來測試 on Master

$ createdb roytest
$ psql roytest
roytest=# create table fruits (id SERIAL, name char(20), primary key(id));
NOTICE:  CREATE TABLE will create implicit sequence "fruits_id_seq" for serial column "fruits.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "fruits_pkey" for table "fruits"
CREATE TABLE
roytest=#
roytest=# insert into fruits (name) values('apple');
INSERT 0 1
roytest=# insert into fruits (name) values('pear');
INSERT 0 1
roytest=# select * from fruits;
id |         name         
----+----------------------
  1 | apple               
  2 | pear                
(2 rows)

On Slave, 檢查發(fā)現(xiàn)新庫和表都同步過來了硕旗。

-bash-4.2$ psql roytest -c "select * from fruits"
 id |         name
----+----------------------
  1 | apple
  2 | pear
(2 rows)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子智什,更是在濱河造成了極大的恐慌,老刑警劉巖讼呢,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撩鹿,死亡現(xiàn)場離奇詭異,居然都是意外死亡悦屏,警方通過查閱死者的電腦和手機节沦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來础爬,“玉大人甫贯,你說我怎么就攤上這事】囱粒” “怎么了叫搁?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長供炎。 經(jīng)常有香客問我渴逻,道長,這世上最難降的妖魔是什么音诫? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任惨奕,我火速辦了婚禮,結(jié)果婚禮上竭钝,老公的妹妹穿的比我還像新娘梨撞。我一直安慰自己,他們只是感情好香罐,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布卧波。 她就那樣靜靜地躺著,像睡著了一般庇茫。 火紅的嫁衣襯著肌膚如雪港粱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天旦签,我揣著相機與錄音啥容,去河邊找鬼。 笑死顷霹,一個胖子當著我的面吹牛咪惠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淋淀,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼遥昧,長吁一口氣:“原來是場噩夢啊……” “哼覆醇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起炭臭,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤永脓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鞋仍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體常摧,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年威创,在試婚紗的時候發(fā)現(xiàn)自己被綠了落午。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡肚豺,死狀恐怖溃斋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吸申,我是刑警寧澤梗劫,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站截碴,受9級特大地震影響梳侨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜日丹,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一走哺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧聚凹,春花似錦割坠、人聲如沸齐帚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽对妄。三九已至湘今,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剪菱,已是汗流浹背摩瞎。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留孝常,地道東北人旗们。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像构灸,于是被迫代替她去往敵國和親上渴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容