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; |
近期评论