首页 > 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用户

1
2
3
4
5
6
7
./configure \
--prefix=/usr/local/pgpool-II-3.6.8/ \
--with-pgsql=/usr/local/pgsql \
--with-openssl
 
make
make install

后续工作

1
2
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

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

安装pgpool_regclass

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

安装C语言函数

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

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

1
2
3
4
5
6
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)环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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命令生成

1
2
3
4
5
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往里添加条目

1
2
3
4
5
pg_md5 --md5auth -u postgres -p  #注意这里的--md5auth
 
[postgres@pgpoola etc]$ cat pool_passwd
postgres:md5ed7ab34bb25f4704f58f0f9288e0a781
qiuyb:md54a2ccb6232c195b2060e6b1471190a06

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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方式运行
如果想看详细的信息:

1
2
[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

1
[postgres@pgpoola ~]pgpool stop

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

1
2
3
4
5
6
7
8
9
10
11
12
[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进程

1
ps -ef|grep pgpool

3)其它pgpool命令

1
2
3
4
5
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.