[PostgreSQL] 實作PostgreSQL Synchronous Hot stand-by Server

前幾天客戶在問PostgreSQL的異地備援方案,沒做過相關的案子,所以上網看了一些文章,有一段在說明什麼樣的資料與business應該採用什麼方案,下面的解說很有趣,給大家參考一下:
  • 可口可樂的秘方:異地備份
據說可口可樂的配方只有三個人知道,這三個人不可以同時搭一班飛機,免得萬一飛機掉下來我們就只能喝百事可樂了。
所以可口可樂的秘方需要做的是「異地備份」。

***就是每隔一段時間找個地方把資料另外存一份,NBU?
  • 我一秒鐘幾十萬上下:即時備援
有沒有看過少林足球呀?公司eBusiness生意這麼大,我一秒鐘幾十萬上下,無緣無故跟你們做什麼備份﹗不好意思啊,你知道我這人就這麼直啊!
如果一秒鐘幾十萬上下,需要的是一個「生意不停頓」Business non-stop系統,知道嗎!

***資料要能同步,而且在Master掛了後馬上能接手。
  • 副總統的責任:異地備援
妳知道 副總統的責任是什麼呢? 就是 ----------- 「不要死
正副總統不但不可以同時搭一班飛機,而且正總統一秒鐘何只幾十萬上下,所以副總統只能「遠遠地」老實的待著,乖乖地做正總統的「異地備援」。

***資料同步能接受delay,但資料所在位置不能在同一棟大樓或區域。另外在原有的機器掛的時後也能接手工作。

回到正題:

為了模擬即時備援+異地備援,我利用VirtualBox實作了Synchronous Hot Standby 的PostgreSQL,在這裡把過程記錄下來。

[JBoss] JBoss ON Re-install Agent

1.     先確認版本.
rhq-enterprise-agent4.4.0.JON310GA.jar,表示是 JON 3.1.0版本的,/webap/有兩個, rhq-enterprise-agent-4.4.0.JON310GA.jarrhq-enterprise-agent-4.4.0.JON312GA.jar

舊的版本會裝在/webap/rhq-agent,而且預設是被啟動的所以要先砍掉原來在runprocess,請參考下圖做法
# ps –ef | grep rhq
# kill -9 xxxx (下圖是1439,請注意那個值我電腦上跟server不一樣)

2.     接著將原版本備份起來
# mv rhq-agent rhq-agent.bak

3.     執行安裝,用下列指令裝完後會產生新的rhq-agent資料夾
# java -jar rhq-enterprise-agent-4.4.0.JON310GA.jar --install


4.     接著就要啟動agent,因之前有安裝過其它版本,所以啟動要多加一個參數
# cd rhq-agent/bin/
# ./rhq-agent.sh –cleanconfig
Agent Name [localhost] : sym-P   ß一般來說是機器名稱(hostname)
Agent Hostname or IP Address [!*] : 192.168.38.13   ß本機ip
Agent Port [16163] :           ß直接按enter,用預設port 16163
RHQ Server Hostname or IP Address [127.0.0.1] : 192.168.38.50 ßJON server ip
RHQ Server Port [7080] :       ß直接按enter,用預設port 7080
出現 > 就完成了

5.     然後用browser去連http://192.168.38.50:7080
上述的192.168.38.50是我的jon server ip
登入的帳密預設如果沒改的話是 rhqadmin / rhqadmin
然後點上方Inventory再點左方Discovery Queue你就會看到剛剛啟動的Agent就會出現勾選後點下方import (請參考下面兩張圖)

6.     import 後會看到如下圖
接著點左方Platforms就會看到該機器裝上去了!!


[JBoss] JBoss ON 安裝與組態設定

客戶買了RedHat的JBossON,所以來寫個安裝手冊備份一下。
先介紹一下安裝環境
a.CentOS 6.3 x86_64 (ram 2048, 1 core)
b.JDK (Oracle JDK1.6.0_41)
c.Postgresql (8.4.13)
d.JBossON (3.1)

1.首先要先安裝JDK,請直接到Oracle下載rpm版本這裡demo的是jdk-6u41-linux-x64-rpm.bin
# chmod 777 jdk-6u41-linux-x64-rpm.bin
# ./jdk-6u41-linux-x64-rpm.bin     #執行安裝,rpm預設安裝path為/usr/java/下
# vi /etc/profile
     JAVA_HOME=/usr/java/jdk1.6.0_41
     PATH=$PATH:$JAVA_HOME/bin
     CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
     export PATH JAVA_HOME CLASSPATH

# mv /usr/bin/java /usr/bin/java.bak
# mv /usr/bin/javac /usr/bin/javac.bak
# mv /usr/bin/javaws /usr/bin/javaws.bak
# ln -s /usr/java/jdk1.6.0_41/bin/java /usr/bin/java
# ln -s /usr/java/jdk1.6.0_41/bin/javac /usr/bin/javac
# ln -s /usr/java/jdk1.6.0_41/bin/javaws /usr/bin/javaws
# reboot

2.安裝PostgreSQL,然後組態一下JBossON所需的資料庫
# yum install postgresql postgresql-server postgresql-contrib
# service postgresql initdb    #初始化資料庫 
# chkconfig postgresql on     #設定開機啟動
# cd /var/lib/pgsql/data/

# vi pg_hba.conf                  #連入設定
     local   all         all                                        trust
     host    all         all         192.168.38.0/24    trust
     host    all         all         127.0.0.1/32          trust

# vi postgresql.conf             #設定Performance組態
     listen_addresses = '*'
     max_connections = 60
     superuser_reserved_connections = 5
     shared_buffers = 80MB
     work_mem = 1MB
     checkpoint_segments = 10
     max_prepared_transactions = 60

# service postgresql restart
# psql -U postgres

postgres=# alter user postgres password '你要的密碼';
postgres=# create user rhqadmin password 'rhqadmin的密碼';
postgres=# create database rhq owner rhqadmin;
postgres=# \l      #查看database是否正確建立
 rhq       | rhqadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
postgres=# \q     #離開psql


3.安裝JON
先到redhat的customer portal下載JON。
# cp jon-server-3.1.0.GA.zip /op/
# unzip jon-server-3.1.0.GA.zip
# /opt/jon-server-3.1.0.GA/bin/rhq-server.sh start

*如果用rhq-server.sh start 無法啟動server,可以利用 rhq-server.sh console,來開啟console模式,此模式會將背端jboss啟動的所有訊息列出,方便 debug.

接著就可以用browser去連http://localhost:7080