8、HA環境下配置多節點的ssh
VIP(s1):
[root@s1 ~]# mkdir /opt/PostgresPlus/9.2AS/.ssh
[root@s1 ~]# chown enterprisedb.enterprisedb /opt/PostgresPlus/9.2AS/.ssh/
[root@s1 ~]# su enterprisedb
bash-4.1$ ssh-keygen -t rsa -C "enterprisedb key"
bash-4.1$ scp ~/.ssh/id_rsa.pub root@192.168.1.223:.ssh/authorized_keys
bash-4.1$ scp ~/.ssh/id_rsa.pub root@192.168.1.224:.ssh/authorized_keys
s3和s4:
[root@s1 ~]# mkdir /opt/PostgresPlus/9.2AS/.ssh
[root@s1 ~]# chown enterprisedb.enterprisedb /opt/PostgresPlus/9.2AS/.ssh/
[root@s1 ~]# su enterprisedb
bash-4.1$ ssh-keygen -t rsa -C "enterprisedb key"
在s3和s4上,分別將公鑰放在HA上,但在放完一個時,須要先將HA上的公鑰文件備份一個出來
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.228
scp ~/.ssh/id_rsa.pub root@192.168.1.228:.ssh/authorized_keys
[root@s1 .ssh]# cp authorized_keys authorized_keys_s3或[root@s1 .ssh]# cp authorized_keys authorized_keys_s4
再將兩個公鑰文件都合併到authorized_keys文件中。
[root@s1 .ssh]# cat authorized_keys_s3 >> authorized_keys
[root@s1 .ssh]# cat authorized_keys_s4 >> authorized_keys
這樣,s3和s4上的enterprisedb用戶均可以到HA作無密碼訪問了。
s3上作一次驗證:
[root@s3 ~]# su - enterprisedb
-bash-4.1$ ssh root@192.168.1.228
s4上作一次驗證:
[root@s4 ~]# su - enterprisedb
-bash-4.1$ ssh root@192.168.1.228
下面須要在HA中切換到s2,再作一次一樣的操做。
在s2中:
[root@s2 ~]# mkdir /opt/PostgresPlus/9.2AS/.ssh
[root@s2 ~]# chown enterprisedb.enterprisedb /opt/PostgresPlus/9.2AS/.ssh/
[root@s2 ~]# su enterprisedb
bash-4.1$ ssh-keygen -t rsa -C "enterprisedb key"
bash-4.1$ scp ~/.ssh/id_rsa.pub root@192.168.1.223:.ssh/authorized_keys_for_s2
bash-4.1$ scp ~/.ssh/id_rsa.pub root@192.168.1.224:.ssh/authorized_keys_for_s2
到s3上合併s1和s2的公鑰
[root@s3 ~]# cd .ssh/
[root@s3 .ssh]# cp authorized_keys authorized_keys_for_s1
[root@s3 .ssh]# cat authorized_keys_for_s2 >> authorized_keys
到這裏,s2能夠對s3無密碼訪問了。
在s4上重複上一步驟,使s2能夠對s4無密碼訪問
[root@s4 ~]# cd .ssh/
[root@s4 .ssh]# cp authorized_keys authorized_keys_for_s1
[root@s4 .ssh]# cat authorized_keys_for_s2 >> authorized_keys
在s2上進行驗證:
[root@s2 9.2AS]# su - enterprisedb
-bash-4.1$ ssh root@192.168.1.224
沒有問題,s2能夠對s4無密碼訪問了。
下面開始處理s3和s4對s2的無密碼訪問
在s3上
[root@s3 ~]# su - enterprisedb
-bash-4.1$ scp ~/.ssh/id_rsa.pub root@192.168.1.228:.ssh/authorized_keys_from_s3
到s2上,將authorized_keys_from_s3的內容合併到authorized_keys
[root@s2 ~]# cd .ssh/
[root@s2 .ssh]# touch authorized_keys
[root@s2 .ssh]# cat authorized_keys_from_s3 >> authorized_keys
在s4上重複s2上的步驟
scp ~/.ssh/id_rsa.pub root@192.168.1.228:.ssh/authorized_keys_from_s4
在s2上,將authorized_keys_from_s4的內容合併到authorized_keys
cat authorized_keys_from_s4 >> authorized_keys
這裏爲止,s3和s4對s2均可以無密碼訪問了。
下面開始HA對多個備機的流複製。
9、HA環境下配置流複製
s1:
[root@s1 ~]# mkdir /mnt/iscsi/edbbackup
[root@s1 ~]# mkdir /mnt/iscsi/edbbackup/fullbackup
[root@s1 ~]# mkdir /mnt/iscsi/edbbackup/archive
[root@s1 ~]# chown -R enterprisedb.enterprisedb /mnt/iscsi/edbbackup
s3:
[root@s3 ~]# mkdir /opt/ppas_fullbackup
[root@s3 ~]# mkdir /opt/ppas_archive
[root@s3 ~]# chown enterprisedb.enterprisedb /opt/ppas_fullbackup/
[root@s3 ~]# chown enterprisedb.enterprisedb /opt/ppas_archive/
s4:同s3
在HA中修改edb配置文件postgresql.conf
[root@s1 ~]# cp /mnt/iscsi/edb/data/postgresql.conf /mnt/iscsi/edb/data/postgresql.conf.bak
[root@s1 ~]# vim /mnt/iscsi/edb/data/postgresql.conf
postgresql.conf:
wal_level = hot_standby
archive_mode = on
archive_command = 'cp -i %p /mnt/iscsi/edbbackup/archive/%f < /dev/null'
有幾臺standby就設max_wal_senders爲多少,如今有兩臺standby,設爲2
max_wal_senders = 2
hot_standby = on
log_statement = 'all'
三、主庫配置文件pg_hba.conf修改
[root@s1 ~]# vim /mnt/iscsi/edb/data/pg_hba.conf
在pg_hba.conf文件中加入下面的內容:
#add by zws for stream replication 2013.07.15
host all all 192.168.1.228/32 trust
host all all 192.168.1.223/32 trust
host all all 192.168.1.224/32 trust
host replication enterprisedb 192.168.1.228/32 trust
host replication enterprisedb 192.168.1.223/32 trust
host replication enterprisedb 192.168.1.224/32 trust
四、重啓主庫
[root@s1 ~]# /etc/init.d/ppas-9.2 restart
五、對主庫作一次全備
[root@s1 ~]# pg_basebackup -D /mnt/iscsi/edbbackup/fullbackup/$(date +"%Y%m%d") -Ft -x -z -Z 3 -v -h 192.168.1.228 -p 5444 -U enterprisedb
圖1
[root@s1 ~]# ll /mnt/iscsi/edbbackup/fullbackup/
能夠看到全備生成的目錄以及目錄中的base.tar.gz,即全備生成的文件。
六、恢復s3上的備庫
[root@s3 ~]# /etc/init.d/ppas-9.2 status
中止standby數據庫,刪除備庫中的data目錄或更名,把主庫中全備的數據文件恢復到備庫。
[root@s3 ~]# /etc/init.d/ppas-9.2 stop
a、在備機s3中重命名ppas的data,模擬data目錄損壞
[root@s3 ~]# mv /opt/PostgresPlus/9.2AS/data /opt/PostgresPlus/9.2AS/data.bak
[root@s3 ~]# mkdir /opt/PostgresPlus/9.2AS/data
[root@s3 ~]# chown enterprisedb.enterprisedb /opt/PostgresPlus/9.2AS/data
[root@s3 ~]# chmod 0700 /opt/PostgresPlus/9.2AS/data
b、把主庫中全備的數據文件恢復到備庫
[root@s3 ~]# su enterprisedb
[root@s3 ~]# scp root@192.168.1.228:/mnt/iscsi/edbbackup/fullbackup/20130718/base.tar.gz /opt/ppas_fullbackup/
將base.tar.gz包tar出來,tar包解壓到/opt/PostgresPlus/9.2AS/data/
c、在備機的data目錄中,添加recovery.conf文件
[root@s3 ~]# cp /opt/PostgresPlus/9.2AS/share/recovery.conf.sample /opt/PostgresPlus/9.2AS/data/recovery.conf
修改recovery.conf文件的配置參數:
[root@s3 ~]# vim /opt/PostgresPlus/9.2AS/data/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.228 port=5444 user=enterprisedb application_name=hot_standby1'
restore_command = 'scp -Cp root@192.168.1.228:/mnt/iscsi/edbbackup/archive/%f "%p"'
記得修改文件的全部者
[root@s3 ~]# chown enterprisedb.enterprisedb /opt/PostgresPlus/9.2AS/data/recovery.conf
d、修改主庫的配置文件postgresql.conf中的synchronous_standby_names參數:
synchronous_standby_names = 'hot_standby1'
該參數與備機的恢復文件中的primary_conninfo參數中的屬性application_name是一致的,這時能夠再次檢查步驟c中的參數值。
在作多節點複製的時候,我將這個值改成了'*'號。
e、在主機中執行reload命令,從新加載配置文件
[root@s1 /]# /etc/init.d/ppas-9.2 restart
f、啓動s3上的備庫,能夠看到備庫中的data目錄已經完整恢復了。
[root@s3 ~]# /etc/init.d/ppas-9.2 start
g、在s4節點重複上面的步驟。若是有更多的流複製節點,依次重複上面的步驟。
10、HA環境下流複製的測試
建立測試表
CREATE TABLE streamreplication_test (username TEXT,some_tstimestamptz TEXT,random_value INT4);
插入記錄測試(100萬條)
CREATE TABLE streamreplication_test (username TEXT,some_ts timestamptz,random_value INT4);
INSERT INTO streamreplication_test (username, some_ts, random_value)
SELECT
'user #' || cast(floor(random() * 10) as int4),
now() - '1 year'::INTERVAL * random(),
cast(random() * 100000000 as INT4)
FROM
generate_series(1,1000000);
能夠在s3和s4的備庫查詢檢查。在HA中寫入數據的同時,s3和s4也存在數據了。
手動切HA,再作測試均正常。
sql