首页 > Postgresql > pgpool配合流复制的主备模式1主2从

pgpool配合流复制的主备模式1主2从

1 环境
1)主机名:pgpoola ip:10.10.20.10 角色:pgpool主机
2)主机名:pgaa1 ip:10.10.20.1 角色:pg库主结点
3)主机名:pgaa2 ip:10.10.20.2 角色:pg库从1结点
4)主机名:pgaa3 ip:10.10.20.3 角色:pg库从2结点

pgaa1/2/3是使用pg的hot_standy建的1主2从的流复制集群,集群已经建立

2 目标
使用pgpool实现pg集群的负载均衡和读写分离,因为pg的服务器是虚拟机,不用pgpool的failover功能。
这种模式下不需要配置pgaa1/2/3之间的ssh互信任

3 pgpool软件安装
1)下载链接 http://www.pgpool.net/download.php?f=pgpool-II-3.6.8.tar.gz
2)依赖包
yum install gcc-c++ gcc flex readline-devel zlib-devel zlib openssl openssl-devel
3)提示
从可见的文档,pgpoola这个结点需安装pgpool,pgaa/1/2/3这几个结点只需要安装C函数就可以。安装很简单,所以这4台机器pgpool的环境我都安装了。
4)安装
a、pgpoola,pgaa/1/2/3
使用root用户,pgpoola机器需建postgres用户

./configure \
--prefix=/usr/local/pgpool-II-3.6.8/ \
--with-pgsql=/usr/local/pgsql \
--with-openssl

make 
make install

后续工作

ln -sf /usr/local/pgpool-II-3.6.8 /usr/local/pgpool
chown -R postgres:postgres /usr/local/pgpool-II-3.6.8

b、pgaa1/2/3结点
使用postgres用户,可以把安装源的目标的属主改成postgres

chown -R postgres:postgres /tmp/yang/pgpool-II-3.6.8

安装pgpool_regclass

cd /tmp/yang/pgpool-II-3.6.8/src/sql/pgpool-regclass
make
make install

安装C语言函数

cd /tmp/yang/pgpool-II-3.6.8/src/sql/pgpool-recovery
make
make install

c、pgaa1结点
建立regclass和recovery的extension

psql template1
template1=# create extension pgpool_recovery;
template1=# create extension pgpool_regclass;

cd /tmp/yang/pgpool-II-3.6.8/src/sql
psql -f /tmp/yang/pgpool-II-3.6.8/src/sql/insert_lock.sql template1

如果应用数据库已经建立,上面的建extension的语句每个应用库都要执行一下。

4 pgpool配置
pgpoola结点
1)环境变量

[postgres@pgpoola ~]$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

#yangbaoqiu add
export PATH=/usr/local/pgpool/bin:/usr/local/pgsql/bin:$PATH 
export LD_LIBRARY_PATH=/usr/local/pgpool/lib:/usr/local/pgsql/lib:$LD_LIBRARY_PATH 

2)pcp.conf文件
用于pcp_开头一系列工具口令验证,用pg_md5命令生成

cd /usr/local/pgpool/etc

[postgres@pgpoola etc]$ cat pcp.conf
# USERID:MD5PASSWD
postgres:5b2b49e58f0700c8576236d6c396fc2a

3)pool_passwd文件
这个文件用途是psql通过pgpool连接pg库时做用户口令认证的,使用的数据库用户都需在这个文件中生成条目。
这个文件是通过pg_md5生成的,如果文件已经存在则pg_md5往里添加条目

pg_md5 --md5auth -u postgres -p  #注意这里的--md5auth

[postgres@pgpoola etc]$ cat pool_passwd
postgres:md5ed7ab34bb25f4704f58f0f9288e0a781
qiuyb:md54a2ccb6232c195b2060e6b1471190a06

4)pgpool.conf文件
注意如下这些参数:

listen_addresses = '*'
port = 9999
socket_dir = '/tmp'
pcp_listen_addresses = '*'
pcp_port = 9898
pcp_socket_dir = '/tmp'

backend_hostname0 = '10.10.20.1'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/pgdata/pgaa'
backend_flag0 = 'DISALLOW_TO_FAILOVER'

backend_hostname1 = '10.10.20.2'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/pgdata/pgaa'
backend_flag1 = 'DISALLOW_TO_FAILOVER'

backend_hostname2 = '10.10.20.3'
backend_port2 = 5432
backend_weight2 = 1
backend_data_directory2 = '/pgdata/pgaa'
backend_flag2 = 'DISALLOW_TO_FAILOVER'

enable_pool_hba = on
pool_passwd = 'pool_passwd'
ssl = off

num_init_children = 128
max_pool = 4

pid_file_name = '/usr/local/pgpool/run/pgpool.pid'
logdir = '/tmp'

replication_mode = off
replicate_select = off

load_balance_mode = on
master_slave_mode = on
master_slave_sub_mode = 'stream'

sr_check_period = 10
sr_check_user = 'zabbix'
sr_check_password = 'Gghhx_888'
sr_check_database = 'postgres'

5 启动pgpool
只需要在pgpoola这个结点操作,数据库结点不用操作
<>
[postgres@pgpoola ~]$ pgpool

这些pgpool在后台以daemon方式运行
如果想看详细的信息:

[postgres@pgpoola ~]$mkdir -p /usr/local/pgpool/log
[postgres@pgpoola ~]$/usr/local/pgpool/bin/pgpool -n -d > /usr/local/pgpool/log/pgpool.log 2>&1 &

-n:不以daemon方式运行
-d:debug方式

6 停pgpool

[postgres@pgpoola ~]pgpool stop

7 查看pgpool的运行状态
1)看节点状态

[postgres@pgpoola ~]$ psql -h 10.10.20.10 -p 9999 -U postgres
Password for user postgres: 
psql (9.6.6)
Type "help" for help.

postgres=# show pool_nodes;
 node_id |  hostname  | port | status | lb_weight |  role   | select_cnt | load_balance_node | replication_delay 
---------+------------+------+--------+-----------+---------+------------+-------------------+-------------------
 0       | 10.10.20.1 | 5432 | up     | 0.333333  | primary | 13138      | true              | 0
 1       | 10.10.20.2 | 5432 | up     | 0.333333  | standby | 2          | false             | 0
 2       | 10.10.20.3 | 5432 | up     | 0.333333  | standby | 2          | false             | 0
(3 rows)

2) 查看pgpool进程

ps -ef|grep pgpool

3)其它pgpool命令

postgres=# show pool_status;
postgres=# show pool_nodes;
postgres=# show pool_processes;
postgres=# show pool_pools;
postgres=# show pool_version;
分类: Postgresql 标签: , , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.