pgpool 流复制主从安装与配置(高可用、读写分离)[转]

Centos5.4(x64)+postgresql9.12+pgpool 3.1.2

以下配置pgpool与主从均在一台服务器,主数据库端口为5433 ;从数据库端口为5432。

1.下载并安装postgresql9.1.2数据库

cd /tmp

wget http://ftp.postgresql.org/pub/source/v9.1.2/postgresql-9.1.2.tar.gz

tar -zxvf postgresql-9.1.2.tar.gz

cd postgresql-9.1.2

./configure --prefix=/usr/local/pgsql9.1

make

make install

2.下载并安装pgpool

wget http://www.pgpool.net/mediawiki/images/pgpool-II-3.1.2.tar.gz

tar -zxvf pgpool-II-3.1.2.tar.gz

cd pgpool-II-3.1.2

./configure --prefix=/usr/local/pgpool --with-pgsql=/usr/local/pgsql9.1/

make

make install

3.数据库配置主从流实时复制

创建postgres用户

useradd postgres 

cd /data
建立主数据库存放目录

mkdir masterdata
建立slave数据库存放目录

mkdir slavedata
对主数据库目录赋予postgres权限

chown -R postgres:postgres masterdata

对slave数据库目录赋予postgres权限
chown -R postgres:postgres slavedata
su - postgres
初始化主数据库

/usr/local/pgsql9.1/bin/initdb -D /data/masterdata

修改主数据库参数

vi /data/masterdata/postgresql.conf

listen_addresses = '*'

port = 5433 
logging_collector = on

wal_level = hot_standby

synchronous_commit = on

max_wal_senders = 2

wal_keep_segments = 32

synchronous_standby_names = '*'


vi /data/masterdata/pg_hba.conf

host    all             all             192.168.100.0/24        md5
host     replication     postgres        192.168.100.24/32       trust

启动主数据库

以下操作在postgres用户下执行

su - postgres

/usr/local/pgsql9.1/bin/pg_ctl -D /data/masterdata/ start

创建测试库并将主库设置为备份状态

/usr/local/pgsql9.1/bin/psql -p 5433 -U postgres

create database test;

select pg_start_backup('/data/masterdata/');

\q

将主库整体拷贝为slave库

cp -rp /data/masterdata/* /data/slavedata/

配置slave数据库

vi /data/slavedata/postgresql.conf

port = 5432

wal_level = minimal

hot_standby = on 

停止主数据库backup状态

/usr/local/pgsql9.1/bin/psql -p 5433 -U postgres

select pg_stop_backup();

\q

设置slave服务器流复制

vi  /data/slavedata/ recovery.conf

 

standby_mode = 'on'
primary_conninfo = 'host=192.168.100.24 port=5432 user=postgres'
trigger_file = '/data/slavedata/trigger_activestb'

启动重数据库

/usr/local/pgsql9.1/bin/pg_ctl -D /data/slavedata/ start

4.配置pgpool

配置pgpool.conf

cp /usr/local/pgpool/etc/pgpool.conf.sample-stream  /usr/local/pgpool/etc/pgpool.conf
listen_addresses = '*'

port = 9998

backend_hostname0 = '127.0.0.1'

backend_port0 = 5433

backend_weight0 = 1

backend_data_directory0 = '/data/masterdata

backend_hostname1 = '127.0.0.1'

backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/data/slavedata'

log_statement = on

log_per_node_statement = on

pid_file_name = '/usr/local/pgpool/pgpool.pid'

logdir = '/usr/local/pgpool/log'

log_connections = on

log_hostname = on

debug_level = 1

failover_command = '/usr/local/pgpool/etc/failedcommand.sh %d %H /data/slavedata/trigger_activestab'

sr_check_user = 'postgres'

delay_threshold = 10000

 

 

mkdir /usr/local/pgpool/log/

编辑Master库失败强制转到slave文件

vi /usr/local/pgpool/etc/failedcommand.sh

#! /bin/sh
# Failover command for streaming replication.
# This script assumes that DB node 0 is primary, and 1 is standby.
#
# If standby goes down, do nothing. If primary goes down, create a
# trigger file so that standby takes over primary node.
#
# Arguments: $1: failed node id. $2: new master hostname. $3: path to
# trigger file.

failed_node=$1
new_master=$2
trigger_file=$3

# Do nothing if standby goes down.
if [ $failed_node = 1 ]; then
        exit 0;
fi

 /usr/bin/ssh -T $new_master /bin/touch $trigger_file

exit 0;

赋予文件可执行权限

chmod a+x  /usr/local/pgpool/etc/failedcommand.sh 

设置Master服务器与Slave密钥登录认证,请查看http://blog.163.com/czg_e/blog/static/46104561201101922246729/

配置pgpool连接认证

mv /usr/local/pgpool/etc/pool_hba.conf.sample  /usr/local/pgpool/etc/pool_hba.conf

vi  /usr/local/pgpool/etc/pool_hba.conf

host    all         all         192.168.100.0/24      md5

设置pgpool pcp用户管理权限

mv /usr/local/pgpool/etc/pcp.conf.sample  /usr/local/pgpool/etc/pcp.conf

通过pg md5对密码加密

/usr/local/pgpool/bin/pg_md5 -p

vi  /usr/local/pgpool/etc/pcp.conf

postgres:刚才加密后的密码

 5.启动pgpool

pgpool -f /usr/local/pgpool/etc/pgpool.conf -a /usr/local/pgpool/etc/pool_hba.conf  -F /usr/local/pgpool/etc/pcp.conf

测试pgpool 是否正常运行

psql -p 9998 -U postgres

 

异常处理

2012-03-24 12:52:47 ERROR: pid 2424: pool_read_message_length: message length (8) in slot 1 does not match with slot 0(12)
2012-03-24 12:52:47 ERROR: pid 2424: Failed to read the authentication packet length. This is likely caused by the inconsistency of auth method among DB nodes. In this case you can check the previous error messages (hint: length field) from pool_read_message_length and recheck the pg_hba.conf settings.

通过pgsql不能登录且日志中输入如上信息,经排查发现为master库中pg_hba.conf设置采用md5 方式认证,而slave pg_hba.con配置的为trust认证方式,后将slave的pg_hba.conf文件配置为了md5方式即可通过验证登录。

 

psql: ERROR:  MD5 authentication is unsupported in replication, master-slave and parallel modes.
HINT:  check pg_hba.conf

通过pgsql不能登录且提示如上信息,解决上面错误需将pgpool.conf中 enable_pool_hba设置为 on;pool_hba.conf中加入md5验证(host    all         all         10.10.10.0/24         md5);pool_passwd中设置用户名密码验证(/usr/local/pgpool/bin/pg_md5 -m -p -u postgres pool_passwd )。

posted @ 2015-08-11 19:14  夏~天  阅读(1758)  评论(1编辑  收藏  举报