PgPool的介紹可以看其官方頁面,我做的是在兩台Ubuntu 10.04 上,安裝PostgreSQL 8.4,然後使用pgpool作Replication/Load Balance,其他的Parallel Query等功能請自行研究。
兩台電腦分別稱為Ubuntu A、Ubuntu B,IP分別是192.168.220.128與129.168.220.129,下面開始介紹我安裝與設定的步驟。
先在Ubuntu A、Ubuntu B兩台上都安裝PostgreSQL。
$ sudo aptitude update
先更新系統
Fetched 582kB in 25s (22.4kB/s)
Reading package lists... Done
$ sudo aptitude install postgresql
安裝PostgreSQL,load head後會問你要不要安裝,按y繼續...後面有些安裝時也差不多,就不重複說了
The following NEW packages will be installed:
libpq5{a} postgresql postgresql-8.4{a} postgresql-client-8.4{a}
postgresql-client-common{a} postgresql-common{a}
The following packages will be REMOVED:
linux-headers-2.6.32-21{u} linux-headers-2.6.32-21-generic{u}
0 packages upgraded, 6 newly installed, 2 to remove and 1 not upgraded.
Need to get 4,917kB of archives. After unpacking 66.2MB will be freed.
Do you want to continue? [Y/n/?]
$ sudo aptitude install pgadmin3
安裝pgsql管理介面
$ sudo vi /etc/postgresql/8.4/main/postgresql.conf
修改設定檔內容,將#listen_addresses = 'localhost' 改成listen_addresses = '*'
$ sudo vi /etc/postgresql/8.4/main/pg_hba.conf
修改信任IP來源,為了方便測試,先加入下面這行,測試完成後再依安全性修改
host all all 0.0.0.0/0 trust
$ sudo -i -u postgres
切換至postgres帳號
$ psql
進入postgresql
=# ALTER USER postgres WITH PASSWORD '密碼';
設定postgres的密碼
=# \q
跳出postgresql
$ sudo /etc/init.d/postgresql-8.4 restart
重新啟動PGSQL
然後在Ubuntu A上安裝PgPool。
$ sudo apt-get install libpq-dev
安裝pgpool所需lib,不然在make的時候會有下面的錯誤
configure: error: libpq is not installed or libpq is old
$ wget http://pgfoundry.org/frs/download.php/2664/pgpool-II-2.3.3.tar.gz
下載pgpool-ii,我是抓2.3.3版,現在也有3.0 beta版可用
$ tar -zxvf pgpool-II-2.3.3.tar.gz
解壓縮pgpool-ii
$ cd pgpool-II-2.3.3/
進入pgpool-ii目錄
$ sudo ./configure
產生設定檔
$ sudo make
產生安裝檔
$ sudo make install
安裝pgpool
$ sudo cp /usr/local/etc/pgpool.conf.sample /usr/local/etc/pgpool.conf
複製設定檔範例
$ sudo vi /usr/local/etc/pgpool.conf
修改設定檔內容,這邊依所需功能來做修改,所以我改了下面這些
將listen_addresses = 'localhost' 改成 listen_addresses = '*'
replication_mode = false 改成 replication_mode = true
socket_dir = '/tmp' 改成 socket_dir = '/var/run/postgresql'
pcp_socket_dir = '/tmp' 改成 /pcp_socket_dir = '/var/run/postgresql'
backend_socket_dir = '/tmp' 改成 backend_socket_dir = '/var/run/postgresql'
下面這段也做修改
backend_hostname0 = '192.168.220.128'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/data'
backend_hostname1 = '192.168.220.129'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/data1'
$ sudo cp /usr/local/etc/pcp.conf.sample /usr/local/etc/pcp.conf
複製設定檔範例
$ pg_md5 postgres的密碼
取得密碼的md5
$ sudo vi /usr/local/etc/pcp.conf
加入一行
postgres:密碼md5若要新增pgpool使用的帳號就在這邊加
$ sudo -i -u root
切換至root
$ mkdir -p /var/run/pgpool
建立一個資料夾,pgpool執行時會在這邊產生pgpool.pid
$ pgpool -n -d > /tmp/pgpool.log 2>&1 &
啟動pgpool,我將log檔存至/tmp/pgpool.log,可以去開來看log
$ ps aux | grep pgpool
查看是否有啟動,有的話會看到有很多pgpool的程序
然後就測試PgPool的Replication功能了
$ sudo -i -u postgres
切換到postgres帳號
$ createdb DB1 -U postgres -p 9999
以postgres帳號透過pgpool建立名為DB1的DB
$ echo "\\l" | psql
查看現有DB,若有看到DB1的話,表示在Ubuntu A這台ok了,然後換到Ubuntu B去檢查,如果也有DB1,表示複寫機制成功運作。
複寫的設定暫時說到這邊,後續的DB使用上請自行變化。
下面是一些其他的指令,也許有機會用到
$ /usr/lib/postgresql/8.4/bin/initdb /var/lib/pgsql/data1
DB初始化,ubuntu好像用不到
$ sudo chown -R postgres /var/run/pgpool
將指定目錄/var/run/pgpool給予帳號postgres讀寫權限
postgresql在Ubuntu預設會裝到這下面/usr/lib/postgresql/
This comment has been removed by the author.
ReplyDelete我在pgpool在make的時候出現error
ReplyDelete需要再安裝 flex byacc bison三個套件
(# apt-get install flex byacc bison)