實現PostgreSQL資料庫伺服器的負載平衡

來源:互聯網
上載者:User
作業系統:Debian 3.0 r2
所使用的核心:linux-2.4.23
實驗用到的模組: ipvsadm-1.21,PostgreSQL (ipvsadm命令的詳細用法請參考這裡)
功能描述:這是一個關於LinuxVirtualServer的比較簡單的實驗,是如何?兩台PostgreSQL資料庫的負載平衡。做這個實驗的目的有三個:
1,是一個朋友的需求;
2,我本人也有一段時間沒有看LVS方面的東西了,借這個機會再複習一下;
3,因為這是個最簡單的LVS的實驗,對LVS的初學者來說有很好的協助。

安裝步驟:
1, 首先你要重新編譯核心,如果你不清楚如何編譯核心,可以到我們的“基礎知識”欄目中去看看。將NetFilter和LVS的選項編譯進你的核心,你可以參考一下這三張圖片:網路編譯選項,NetFilter編譯選項,LVS編譯選項
2, 核心編譯完成後用新核心啟動系統,然後安裝ipvsadm
tar zxvf ipvsadm-1.21.tar.gz
cd ipvsadm-1.21
make
make install
安裝完畢

3, 我們現在有如下的網路結構,要實現對兩台PostgreSQL伺服器的負載平衡,
http://www.linux.gov.cn/himages/Linux/lvs_001.gif
實現對這兩台PostgreSQL伺服器:192.168.3.2,192.168.3.3的負載平衡很容易,用下面的幾條命令:

echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 192.168.1.100:5432 -s rr
ipvsadm -a -t 192.168.1.100:5432 -r 192.168.3.2:5432 -m -w 1
ipvsadm -a -t 192.168.1.100:5432 -r 192.168.3.3:5432 -m -w 1

解釋:
echo 1 > /proc/sys/net/ipv4/ip_forward:開啟Linux LVS Router的路由功能。否則資料包是不會被轉寄的

ipvsadm -A -t 192.168.1.100:5432 -s rr :添加一台虛擬伺服器,虛擬伺服器的IP地址是192.168.1.100,連接埠是5432,用的演算法是Round Robin(輪尋)

ipvsadm -a -t 192.168.1.100:5432 -r 192.168.3.2:5432 -m -w 1
在虛擬伺服器192.168.1.100中添加真實的伺服器192.168.3.2:5432;

ipvsadm -a -t 192.168.1.100:5432 -r 192.168.3.3:5432 -m -w 1
在虛擬伺服器192.168.1.100中添加真實的伺服器192.168.3.3:5432

以上是這個實驗的全部的內容,現在我們對他做一個小的討論:

1, 首先,這個實驗是針對PostgreSQL叢集的,PostgreSQL的預設連接埠號碼5432。如果你要做其他服務的叢集,同樣沒問題的如http、FTP、SMTP,你只需要將命令裡的連接埠號碼5432改成相應的連接埠號碼就可以了。

2, 這個PostgreSQL的叢集並不是很理想,有兩種情況值得提一下:
(A),當兩台PostgreSQL中的一台出現故障時,ipvsadm並不能自動的檢測到,不會將出現故障的伺服器從叢集中剔除,ipvsadm仍然會按照定好的規則對兩台伺服器做負載平衡,這樣就會造成PostgreSQL的服務時好時壞。

(B),因為我們現在只使用了一台Linux LVS Router,當Linux LVS Router出現故障時,整個PostgreSQL將停止服務。

解決這兩個問題的方法是用一種方法,時時的監測叢集中所有機器包括伺服器、LVS Router的健康狀態,如果有伺服器出現了故障,叢集系統自動的將他從系統中剔除;然後準備兩台以上的LVS Router,有一台是主用,其他的作為備份,當主用的LVS Router出現故障時,作為備份的LVS Router會及時的接管主用LVS Router的工作。在LVS項目中有一個組件叫Keepalived,Keepalived是專門做這項工作的,關於Keepalived這方面的應用 請參考這個實驗:《架構高穩定、高可用、高效率的伺服器負載平衡(Load balancer)系統》。同時Keepalived也是Linux下VRRP的解決方案。

3,在實際的應用中,我們一般不會採用這樣的網路架構,大多數情況下我們採用的是如示的架構:
http://www.linux.gov.cn/himages/Linux/lvs_002.gif
資料庫的寫入動作是由背景“資料庫編輯人員”錄入的,資料庫的內容儲存在“網路存放裝置”中。訪問資料庫的人員通過PostgreSQL叢集訪問資料庫的內容。

關於PostgreSQL的安裝、啟動的一點小問題:
1,很多時候我們在安裝一個從來沒有用過的GNU 軟體時,總會遇到些小問題,這就需要我們從新回過頭來去看他的文檔,檢查他的配置。我在第一次安裝PostgreSQL時就遇到了一點小問題,在這裡寫出來,供大家參考:
PostgreSQL的安裝還是比較簡單的,完全按照他文檔中的INSTALL檔案來做就可以了,以下是我的安裝步驟:

./configure Cprefix=/usr/local/pgsql
gmake
su
gmake install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

2,啟動PostgreSQL:
su - postgres
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 &
這樣就安裝好了,我的問題出現在啟動的時候,啟動時,我查看系統中的進程,發現PostgreSQL的進程已經在運行,但5432連接埠並沒有啟動,最後發現是設定檔的問題:
將/usr/local/pgsql/data/postgresql.conf檔案中的
# tcpip_socket = false 改成
tcpip_socket = yes

為了能讓其他的機器都能訪問PosgreSQL服務還要修改/usr/local/pgsql/data/pg_hba.conf
加入如下的行:
#TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
host all all 0.0.0.0 0.0.0.0 trust
這句話的意思是開放所有機器對PostgreSQL的存取權限。

我們這個實驗並不是專門針對PostgreSQL的,所以其他的不多說了。

最後,LinuxVirtualServer和PostgreSQL可都是我們華人在自由軟體集市裡的驕傲啊!!

作者:lna@networksbase.com

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.