我們直接進入主題。
一、安裝postgresql9.5
有一點需要特别注意,在初始化資料庫時的目錄要特别重要,如:
./initdb -E UTF8 -D /data/data/postgresql/data
/data/data/postgresql/data
這個目錄在從節點時要被手動清空(也可在安裝從節點時不初始化)
二、主從模式的配置
1、主伺服器(master_IP:192.168.20.93)
1.1、 先建立一個新目錄:
mkdir /opt/pgsql/pg_archive
1.2 、首先需要建立一個資料庫使用者進行主從同步。建立使用者replica,并賦予登入和複制的權限。
postgres# CREATE ROLE replica login replication encrypted password 'replica';
1.3、 修改pg_hba.conf,允許replica使用者來同步。
在pg_hba.conf裡增加兩行:
host all all / trust #允許slave(從)連接配接到主伺服器
host replication replica / md5 #允許slave(從)使用replica使用者來複制
這樣,就設定了replica這個使用者可以master(主伺服器)進行複制請求。
注:第二個字段必須是replication
1.4 、修改postgressql.conf
vim /data/data/postgresql/data/postgresql.conf
修改如下:
listen_addresses = '*' # 監聽所有IP
archive_mode = on # 允許歸檔
archive_command = 'cp %p /opt/pgsql/pg_archive/%f' # 用該指令來歸檔logfile segment
wal_level = hot_standby
max_wal_senders = # 這個設定了可以最多有幾個流複制連接配接,差不多有幾個從,就設定幾個
wal_keep_segments = # 設定流複制保留的最多的xlog數目
wal_sender_timeout = s # 設定流複制主機發送資料的逾時時間
max_connections = # 這個設定要注意下,從庫的max_connections必須要大于主庫的
配置完兩個檔案後重新開機伺服器。
pg_ctl stop -D /opt/pgsql/data
pg_ctl start -D /opt/pgsql/data
1.5、測試slave能否連接配接到master資料庫上。在slave上運作如下指令:
./psql -h -U postgres
看看是否能進入資料庫。若可以,則正常。
2、從伺服器(slave_IP:192.168.20.94)
2.1、從主節點拷貝資料到從節點
su - postgres
rm -rf /data/data/postgresql/data/* #先将data目錄下的資料都清空
pg_basebackup -h 192.168.20.93 -U replica -D /opt/pgsql/data -X stream -P # 從master拷貝資料到slave(基礎備份)
這個指令不推薦了。下面的指令比較省事。
切換到安裝目錄
/data/program/postgres/bin
(要和資料庫初始化目錄
/data/data/postgresql/data
區分開來) :
./pg_basebackup -h -U replica -F p -x -P -R -D /data/data/postgresql/data -l replbackup20161122
下面對參數繼續說明:
-h
:指定連接配接的資料庫的主機庫IP位址
-F
:指定連接配接的使用者名,此處是我們專門建立的使用者負責複制流的使用者replica使用者
-p
:
-x
:表示備份開始後,啟動另一個流複制從主庫接收WAL日志
-P
:表示允許在備份過程中實時的列印備份的速度
-R
:表示在備份結束後自動生成recovery.conf檔案,這樣也避免了手動建立或複制
-D
:指定把備份寫到那個目錄,這裡尤其要注意一點就是
在做基礎備份之前從庫的資料目錄(/data/data/postgresql/data) 目錄需要手動清理空
我在安裝postgresql時強調了這個目錄
-l
:表示指定一個備份的辨別,運作指令後看到
...complete
說明生成備份成功
mkdir /opt/pgsql/pg_archive
2.2、配置recovery.conf(如果你用了上面的那個用删除線的指令的話,這一步需要加上。否則這一步省略)
複制
安裝目錄/data/program/postgres/share/recovery.conf.sample
到
資料庫初始化目錄/data/data/postgresql/data/recovery.conf
cp /data/program/postgres/share/recovery.conf.sample /data/data/postgresql/data/recovery.conf
修改recovery.conf
vim /data/data/postgresql/data/recovery.conf
修改如下:
standby_mode = on # 說明該節點是從伺服器
primary_conninfo = 'host=192.168.20.93 port=5432 user=replica password=replica' # 主伺服器的資訊以及連接配接的使用者
recovery_target_timeline = 'latest'
2.3、配置postgresql.conf
vim /data/data/postgresql/data/postgresql.conf
修改如下:
wal_level = hot_standby
max_connections = # 一般查多于寫的應用從庫的最大連接配接數要比較大
hot_standby = on # 說明這台機器不僅僅是用于資料歸檔,也用于資料查詢
max_standby_streaming_delay = s # 資料流備份的最大延遲時間
wal_receiver_status_interval = s # 多久向主報告一次從的狀态,當然從每次資料複制都會向主報告狀态,這裡隻是設定最長的間隔時間
hot_standby_feedback = on # 如果有錯誤的資料複制,是否向主進行回報
配置完後重新開機伺服器
pg_ctl stop -D /opt/pgsql/data
pg_ctl start -D /opt/pgsql/data
3、驗證是否部署成功
3.1、在主節點上執行:
postgres=# select client_addr,sync_state from pg_stat_replication;
結果如下:
client_addr | sync_state
—————+————
192.168.20.94 | async
(1 行記錄)
說明IP_address_of_slave是從伺服器,在接收流。而且是異步流複制。
3.2、此外,還可以分别在主、從節點上運作 ps aux|grep postgres ,進行驗證。
3.3、最後,可以在主庫中用如下指令建立表來驗證從庫中是否也生成了相應的庫和表:
create table test(id BIGSERIAL PRIMARY KEY,name VARCHAR(),age INT);
insert into test(name,age) values('小馬',),('張',);
select * from test;
3.4、在pg庫中常用指令:
\c dbname
:切換dbname資料庫
\l
:列出資料庫名
\dt
:列出目前資料庫所有表
\d 資料庫
: 得到所有表的名字
\d 表名
:得到表結構