中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

POSTGRESQL10.3 RPM包如何實現主從搭建

發布時間:2021-11-16 15:41:45 來源:億速云 閱讀:135 作者:小新 欄目:關系型數據庫

這篇文章主要介紹POSTGRESQL10.3  RPM包如何實現主從搭建,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!



一、POSTGRESQL主從復制搭建

1、安裝POSTGRESQL

PGSQL10.3

下載地址:

https://yum.postgresql.org/testing/10/redhat/rhel-6-x86_64/repoview/postgresqldbserver10.group.html

下載

·         postgresql10 - PostgreSQL client programs and libraries

·         postgresql10-contrib - Contributed source and binaries distributed with PostgreSQL

·         postgresql10-libs - The shared libraries required for any PostgreSQL clients

·         postgresql10-server - The programs needed to create and run a PostgreSQL server

依次使用rpm –ivh 進行安裝(兩個節點都安裝)

安裝順序:

rpm -ivh postgresql10-libs-10.3-1PGDG.rhel6.x86_64.rpm

rpm -ivh postgresql10-10.3-1PGDG.rhel6.x86_64.rpm

rpm -ivh postgresql10-server-10.3-1PGDG.rhel6.x86_64.rpm

rpm -ivh postgresql10-contrib-10.3-1PGDG.rhel6.x86_64.rpm

2、啟動POSTGRESQL服務

(1)第一步啟動

service postgresql-10 initdb

(2)第二步啟動

service postgresql-10 start

3、修改監聽

(1)修改監聽地址

vi  /var/lib/pgsql/10/data/postgresql.conf

# - Connection Settings -

 #這里原本是#listen_addresses ='localhost'修改為以下黃色字體

listen_addresses = '192.168.159.128'           

(2)查看監聽

顯示黃色特色字體即可

netstat -anlp |grep post

tcp        0      0 192.168.159.128:5432        0.0.0.0:*                   LISTEN      4784/postmaster    

udp        0      0 ::1:57424                   ::1:57424                   ESTABLISHED 4784/postmaster    

unix  2      [ ACC ]     STREAM     LISTENING     30353  4784/postmaster     /var/run/postgresql/.s.PGSQL.5432

unix  2      [ ACC ]     STREAM     LISTENING     30356  4784/postmaster     /tmp/.s.PGSQL.5432

4、主從搭建

(1)主庫環境

su - postgres

psql

創建一個用戶復制的用戶replica

CREATE ROLE replica login replication encrypted password 'replica';

修改pg_hba.conf文件,指定replica登錄網絡(最后一添加)

vi /var/lib/pgsql/10/data/pg_hba.conf

host    replication     replica            192.168.159.0/24         md5
host    all          replica           192.168.159.0/24         trust

 
主庫配置文件修改以下幾項,其他不變
vi /var/lib/pgsql/10/data/postgresql.conf
listen_addresses = '*'
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'   #根據實際情況設置

(2)從庫環境

把備庫的數據文件夾目錄清空
rm -rf /var/lib/pgsql/10/data/*

在備庫上運行

pg_basebackup -F p --progress -D /var/lib/pgsql/10/data/ -h 192.168.159.128 -p 5432 -U replica --password

輸入密碼replica 

!!!注意,復制完成后,在備庫一定要將數據目錄下的所有文件重新授權

chown -R postgres.postgres /var/lib/pgsql/10/data/

創建recovery.cnf 文件

cp /usr/pgsql-10/share/recovery.conf.sample /var/lib/pgsql/10/data/recovery.conf

vi  /var/lib/pgsql/10/data/recovery.conf

standby_mode = on

primary_conninfo = 'host=192.168.159.128 port=5432 user=replica password=replica'

recovery_target_timeline = 'latest'

trigger_file = '/var/lib/pgsql/10/data/trigger.kenyon'

vi /var/lib/pgsql/10/data/postgresql.conf
listen_addresses ='*'

wal_level = hot_standby

max_connections =1000 #一般從的最大鏈接要大于主的

hot_standby =on  #說明這臺機器不僅僅用于數據歸檔,也用于查詢

max_standby_streaming_delay =30s

wal_receiver_status_interval = 10s  #多久向主報告一次從的狀態

hot_standby_feedback = on   #如果有錯誤的數據復制,是否向主進行范例

啟動備庫

service postgresql-10 start

如果無法啟動,如下操作:

scp /var/lib/pgsql/10/data/postmaster.opts 192.168.159.129:/var/lib/pgsql/10/data/

 chown -R postgres.postgres /var/lib/pgsql/10/data/

chmod 700 data/

5、驗證主從功能

主庫查詢

su - postgres

psql

postgres=# select client_addr,sync_state from pg_stat_replication;

   client_addr   | sync_state

-----------------+------------

 192.168.159.129 | async

(1 row)

在主庫創建表

create table test2 (name varchar(3));

在從庫查詢表

\d

主庫查詢黃色字體

[root@ha1 data]# ps aux | grep postgres

postgres  4686  0.0  0.8 356584 15592 ?        S    15:22   0:00 /usr/pgsql-10/bin/postmaster -D /var/lib/pgsql/10/data

postgres  4688  0.0  0.0 209416  1572 ?        Ss   15:22   0:00 postgres: logger process                             

postgres  4690  0.0  0.1 356700  3744 ?        Ss   15:22   0:00 postgres: checkpointer process                       

postgres  4691  0.0  0.1 356584  3044 ?        Ss   15:22   0:00 postgres: writer process                             

postgres  4692  0.0  0.3 356584  5980 ?        Ss   15:22   0:00 postgres: wal writer process                         

postgres  4693  0.0  0.1 356992  2616 ?        Ss   15:22   0:00 postgres: autovacuum launcher process                

postgres  4694  0.0  0.0 211516  1540 ?        Ss   15:22   0:00 postgres: archiver process                           

postgres  4695  0.0  0.0 211648  1784 ?        Ss   15:22   0:02 postgres: stats collector process                    

postgres  4696  0.0  0.1 356876  2272 ?        Ss   15:22   0:00 postgres: bgworker: logical replication launcher     

postgres  4711  0.7  0.4 358576  8536 ?        Ss   15:24   0:35 postgres: dbuser exampledb 192.168.159.1(63172) idle 

postgres  4845  0.0  0.1 357384  3424 ?        Ss   15:39   0:00 postgres: wal sender process replica 192.168.159.129(46554) streaming 0/401B0A0

root      5049  0.0  0.0 103256   840 pts/3    S+   16:42   0:00 grep postgres

備庫查詢黃色字體

[root@ha2 data]# ps aux | grep postgres

postgres  4827  0.0  2.2 398228 42844 ?        S    15:39   0:00 /usr/pgsql-10/bin/postmaster -D /var/lib/pgsql/10/data

postgres  4829  0.0  0.0 209416  1536 ?        Ss   15:39   0:00 postgres: logger process                             

postgres  4830  0.0  0.2 398324  3948 ?        Ss   15:39   0:00 postgres: startup process   recovering 000000010000000000000004

postgres  4831  0.0  0.1 398228  3496 ?        Ss   15:39   0:00 postgres: checkpointer process                       

postgres  4832  0.0  0.1 398228  2772 ?        Ss   15:39   0:00 postgres: writer process                             

postgres  4833  0.0  0.0 211516  1604 ?        Ss   15:39   0:00 postgres: stats collector process                    

postgres  4834  0.1  0.1 405444  3688 ?        Ss   15:39   0:06 postgres: wal receiver process   streaming 0/401B0A0 

root      4912  0.0  0.0 103252   828 pts/3    S+   16:42   0:00 grep postgres

6、POSTGRESQL相關

(1)創建LINUX用戶

useradd dbuser

passwd dbuser

(2)創建數據庫用戶

CREATE USER dbuser WITH PASSWORD 'password';

(3)創建數據庫

CREATE DATABASE exampledb OWNER dbuser;

(4)賦予權限

GRANT ALL PRIVILEGES ON DATABASE exampledb TO dbuser;

(5)以dbuser的身份連接數據庫exampledb

su - dbuser

psql -d exampledb

(6)網絡登陸方式

vi /var/lib/pgsql/10/data/pg_hba.conf(在IPV4那里添加以下)

host    exampledb        dbuser             192.168.159.0/24        trust

切換dbuser用戶登陸

psql -h 192.168.159.128 -U dbuser -p password -d exampledb -p 5432

 (7)重啟和停止命令

service postgresql-10 restart

service postgresql-10 stop

(8)重要配置文件

pg_hba.conf

postgresql.conf

(9)PG的安裝目錄及命令目錄

查看進程是否啟動,可以找到

命令目錄/usr/pgsql-10/bin/

安裝目錄/var/lib/pgsql/10/data

[root@ha1 ~]# ps -ef|grep post

root      1732     1  0 02:25 ?        00:00:00 /usr/libexec/postfix/master

postfix   1742  1732  0 02:25 ?        00:00:00 pickup -l -t fifo -u

postfix   1743  1732  0 02:25 ?        00:00:00 qmgr -l -t fifo -u

postgres  2322     1  1 02:38 ?        00:00:00 /usr/pgsql-10/bin/postmaster -D /var/lib/pgsql/10/data

postgres  2324  2322  0 02:38 ?        00:00:00 postgres: logger process                             

postgres  2329  2322  0 02:38 ?        00:00:00 postgres: checkpointer process                       

postgres  2330  2322  0 02:38 ?        00:00:00 postgres: writer process                             

postgres  2331  2322  0 02:38 ?        00:00:00 postgres: wal writer process                         

postgres  2332  2322  0 02:38 ?        00:00:00 postgres: autovacuum launcher process                

postgres  2333  2322  0 02:38 ?        00:00:00 postgres: stats collector process                    

postgres  2334  2322  0 02:38 ?        00:00:00 postgres: bgworker: logical replication launcher     

root      2336  2232  0 02:39 pts/0    00:00:00 grep post

 



7、主備手動切換
4、手動主備切換

(1)創建備庫recovery.conf 文件( 在備庫上操作192.168.159.152)

  cp $PGHOME/share/recovery.conf.sample $PGDATA/recovery.conf

配置以下參數  

standby_mode = 'on'  --標記PG為STANDBY SERVER

primary_conninfo = 'host=192.168.159.151 port=1921 user=repuser '   --標識主庫信息

trigger_file = '/data/pg/data/trigger.kenyon'     --標識觸發器文件

(2) 關閉主庫(在主庫上操作192.168.159.151)

/opt/postgresql-10.3/bin/pg_ctl -D /data/pg/data/ -l logfile stop

(3)激活備庫到主庫狀態 ( 在備庫上操作192.168.159.152 )

   激活備庫只要創建一個文件即可,根據備庫 recovery.conf 配置文件的參數 trigger_file 值,

  創建這個 trigger 文件即可。 例如 "touch /data/pg/data/trigger.kenyon"

touch /data/pg/data/trigger.kenyon

過一會兒發現 recovery.conf 文件變成 recovery.done ,說明備庫已經激活。

查看logfile日志,出現以下信息即激活
2018-06-04 21:11:01.137 PDT [12818] 日志:  已找到觸發器文件:/data/pg/data/trigger.kenyon
2018-06-04 21:11:01.148 PDT [12818] 日志:  redo 在 0/C02A390 完成
2018-06-04 21:11:01.172 PDT [12818] 日志:  已選擇的新時間線ID:2
2018-06-04 21:11:05.442 PDT [12818] 日志:  歸檔恢復完畢
2018-06-04 21:11:05.568 PDT [12817] 日志:  數據庫系統準備接受連接


(4)修改原來主庫的配置文件
vi /data/pg/data/postgresql.conf
max_connections = 1500


(5)激活原來的主庫,讓其轉變成從庫  (在原來的主庫上執行192.168.159.151) 

--創建 $PGDATA/recovery.conf 文件,配置以下參數
vi /data/pg/data/recovery.conf

recovery_target_timeline = 'latest'

standby_mode = 'on'  --標記PG為STANDBY SERVER

primary_conninfo = 'host=192.168.159.152 port=1921 user=repuser '   --標識主庫信息

trigger_file = '/data/pg/data/trigger.kenyon'     --標識觸發器文件

--修改 pg_hba.conf (現在的主庫上增加192.168.159.152),添加以下配置
vi /data/pg/data/pg_hba.conf

host   replication     repuser          192.168.159.151/32         md5


啟動原來的主庫即現在的從庫(192.168.159.151)
/opt/postgresql-10.3/bin/pg_ctl -D /data/pg/data/ -l logfile start

查看現在的從庫logfile日志發現報錯信息
2018-06-05 00:08:00.326 PDT [9729] 詳細信息:  WAL結束時,到了時間線1和地址0/C02A400.
2018-06-05 00:08:00.327 PDT [9725] 日志:  在當前恢復點0/C02A630之前, 新的時間點2脫離了當前茅的數據庫系統時間點1
2018-06-05 00:08:05.322 PDT [9729] 日志:  在0/C000000處時間線1上重啟WAL流操作
2018-06-05 00:08:05.327 PDT [9729] 日志:  復制由主用服務器終止
2018-06-05 00:08:05.327 PDT [9729] 詳細信息:  WAL結束時,到了時間線1和地址0/C02A400.
2018-06-05 00:08:05.329 PDT [9725] 日志:  在當前恢復點0/C02A630之前, 新的時間點2脫離了當前茅的數據庫系統時間點1
2018-06-05 00:08:10.328 PDT [9729] 日志:  在0/C000000處時間線1上重啟WAL流操作
2018-06-05 00:08:10.332 PDT [9729] 日志:  復制由主用服務器終止
2018-06-05 00:08:10.332 PDT [9729] 詳細信息:  WAL結束時,到了時間線1和地址0/C02A400.
2018-06-05 00:08:10.333 PDT [9725] 日志:  在當前恢復點0/C02A630之前, 新的時間點2脫離了當前茅的數據庫系統時間點1

在現在的主庫操作:
scp /data/pg/data/pg_wal/00000002.history 192.168.159.151:/data/pg/data/pg_wal/4、手動主備切換

(1)創建備庫recovery.conf 文件( 在備庫上操作192.168.159.152)

  cp $PGHOME/share/recovery.conf.sample $PGDATA/recovery.conf

配置以下參數  

standby_mode = 'on'  --標記PG為STANDBY SERVER

primary_conninfo = 'host=192.168.159.151 port=1921 user=repuser '   --標識主庫信息

trigger_file = '/data/pg/data/trigger.kenyon'     --標識觸發器文件

(2) 關閉主庫(在主庫上操作192.168.159.151)

/opt/postgresql-10.3/bin/pg_ctl -D /data/pg/data/ -l logfile stop

(3)激活備庫到主庫狀態 ( 在備庫上操作192.168.159.152 )

   激活備庫只要創建一個文件即可,根據備庫 recovery.conf 配置文件的參數 trigger_file 值,

  創建這個 trigger 文件即可。 例如 "touch /data/pg/data/trigger.kenyon"

touch /data/pg/data/trigger.kenyon

過一會兒發現 recovery.conf 文件變成 recovery.done ,說明備庫已經激活。

查看logfile日志,出現以下信息即激活
2018-06-04 21:11:01.137 PDT [12818] 日志:  已找到觸發器文件:/data/pg/data/trigger.kenyon
2018-06-04 21:11:01.148 PDT [12818] 日志:  redo 在 0/C02A390 完成
2018-06-04 21:11:01.172 PDT [12818] 日志:  已選擇的新時間線ID:2
2018-06-04 21:11:05.442 PDT [12818] 日志:  歸檔恢復完畢
2018-06-04 21:11:05.568 PDT [12817] 日志:  數據庫系統準備接受連接


(4)修改原來主庫的配置文件
vi /data/pg/data/postgresql.conf
max_connections = 1500


(5)激活原來的主庫,讓其轉變成從庫  (在原來的主庫上執行192.168.159.151) 

--創建 $PGDATA/recovery.conf 文件,配置以下參數
vi /data/pg/data/recovery.conf

recovery_target_timeline = 'latest'

standby_mode = 'on'  --標記PG為STANDBY SERVER

primary_conninfo = 'host=192.168.159.152 port=1921 user=repuser '   --標識主庫信息

trigger_file = '/data/pg/data/trigger.kenyon'     --標識觸發器文件

--修改 pg_hba.conf (現在的主庫上增加192.168.159.152),添加以下配置
vi /data/pg/data/pg_hba.conf

host   replication     repuser          192.168.159.151/32         md5


啟動原來的主庫即現在的從庫(192.168.159.151)
/opt/postgresql-10.3/bin/pg_ctl -D /data/pg/data/ -l logfile start

查看現在的從庫logfile日志發現報錯信息
2018-06-05 00:08:00.326 PDT [9729] 詳細信息:  WAL結束時,到了時間線1和地址0/C02A400.
2018-06-05 00:08:00.327 PDT [9725] 日志:  在當前恢復點0/C02A630之前, 新的時間點2脫離了當前茅的數據庫系統時間點1
2018-06-05 00:08:05.322 PDT [9729] 日志:  在0/C000000處時間線1上重啟WAL流操作
2018-06-05 00:08:05.327 PDT [9729] 日志:  復制由主用服務器終止
2018-06-05 00:08:05.327 PDT [9729] 詳細信息:  WAL結束時,到了時間線1和地址0/C02A400.
2018-06-05 00:08:05.329 PDT [9725] 日志:  在當前恢復點0/C02A630之前, 新的時間點2脫離了當前茅的數據庫系統時間點1
2018-06-05 00:08:10.328 PDT [9729] 日志:  在0/C000000處時間線1上重啟WAL流操作
2018-06-05 00:08:10.332 PDT [9729] 日志:  復制由主用服務器終止
2018-06-05 00:08:10.332 PDT [9729] 詳細信息:  WAL結束時,到了時間線1和地址0/C02A400.
2018-06-05 00:08:10.333 PDT [9725] 日志:  在當前恢復點0/C02A630之前, 新的時間點2脫離了當前茅的數據庫系統時間點1

在現在的主庫操作:
scp /data/pg/data/pg_wal/00000002.history 192.168.159.151:/data/pg/data/pg_wal/

(1)創建備庫recovery.conf 文件( 在備庫上操作192.168.159.149)

  cp /usr/pgsql-10/share/recovery.conf.sample /var/lib/pgsql/10/data/recovery.conf

配置以下參數  

standby_mode = 'on'  --標記PG為STANDBY SERVER

primary_conninfo = 'host=192.168.159.128 port=5432 user=replica password=replica'   --標識主庫信息

trigger_file = '/var/lib/pgsql/10/data/trigger.kenyon'     --標識觸發器文件

(2) 關閉主庫(在主庫上操作192.168.159.148)

service postgresql-10 stop

(3)激活備庫到主庫狀態 ( 在備庫上操作192.168.159.149 )

   激活備庫只要創建一個文件即可,根據備庫 recovery.conf 配置文件的參數 trigger_file 值,

  創建這個 trigger 文件即可。 例如 "touch /var/lib/pgsql/10/data/trigger.kenyon"

touch /var/lib/pgsql/10/data/trigger.kenyon

過一會兒發現 recovery.conf 文件變成 recovery.done ,說明備庫已經激活。

查看/var/lib/pgsql/10/data/log/目錄下的最新日志,出現以下信息即激活
(我這里的日志是tail  -100f postgresql-Tue.log)
2018-06-05 19:32:36.403 PDT [3969] LOG:  fetching timeline history file for timeline 2 from primary server
2018-06-05 19:32:36.429 PDT [3969] LOG:  started streaming WAL from primary at 0/3000000 on timeline 1
2018-06-05 19:32:36.461 PDT [3969] LOG:  replication terminated by primary server
2018-06-05 19:32:36.461 PDT [3969] DETAIL:  End of WAL reached on timeline 1 at 0/301B078.
2018-06-05 19:32:36.478 PDT [3916] LOG:  new target timeline is 2
2018-06-05 19:32:36.479 PDT [3969] LOG:  restarted WAL streaming at 0/3000000 on timeline 2
2018-06-05 19:32:37.044 PDT [3916] LOG:  redo starts at 0/301B078

(4)修改原來主庫的配置文件(192.168.159.148)
vi /var/lib/pgsql/10/data/postgresql.conf
max_connections = 150


(5)激活原來的主庫,讓其轉變成從庫  (在原來的主庫上執行192.168.159.148) 

--創建 $PGDATA/recovery.conf 文件,配置以下參數
vi /data/pg/data/recovery.conf

recovery_target_timeline = 'latest'

standby_mode = 'on'  --標記PG為STANDBY SERVER

primary_conninfo = 'host=192.168.159.149 port=1921 user=repuser '   --標識主庫信息

trigger_file = '/var/lib/pgsql/10/data/trigger.kenyon'     --標識觸發器文件

--修改 pg_hba.conf (現在的主庫上增加192.168.159.149),添加以下配置
vi /data/pg/data/pg_hba.conf

host    replication     replica            192.168.159.0/24         md5
host    all          replica           192.168.159.0/24         trust


注意這里修改完配置文件后需要重啟數據庫服務(192.168.159.149)
service postgresql-10 restart

啟動原來的主庫即現在的從庫(192.168.159.148)
service postgresql-10 start


主庫查詢

su - postgres

psql

postgres=# select client_addr,sync_state from pg_stat_replication;

   client_addr   | sync_state 
-----------------+------------
 192.168.159.148 | async
(1 row)

相關報錯:
(1)網絡登錄方式報錯
psql: FATAL:  no pg_hba.conf entry for host "192.168.159.128", user "dbuser", database "exampledb", SSL off

出現這個報錯,就要檢查pg_hba.conf文件了,
添加設置host exampledb dbuser 192.168.159.0/24        trust  重啟數據庫即可解決

(2)發現登陸postgres時出現以下問題
-bash-4.1$ 
root用戶執行
cp /etc/skel/.bash* /var/lib/pgsql/
再次登陸即可變成
[postgres@node1 ~]$

以上是“POSTGRESQL10.3  RPM包如何實現主從搭建”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

靖宇县| 康平县| 汤原县| 平昌县| 承德县| 墨江| 邵阳市| 赤壁市| 南部县| 临湘市| 商水县| 西丰县| 彰化县| 金川县| 巨野县| 红桥区| 隆回县| 图木舒克市| 天柱县| 东乡| 洛宁县| 灵山县| 嵩明县| 中西区| 额济纳旗| 台安县| 日照市| 衡东县| 北碚区| 红安县| 邵阳县| 莲花县| 金门县| 安达市| 新昌县| 绥中县| 沙湾县| 夏河县| 南溪县| 凤凰县| 鄂托克前旗|