Postgresql - Middleware - Pgpool-II installation and modes

Pgpool 官网

http://www.pgpool.net/

 

What is Pgpool-II

是一个PG server和PG db 客户端之间的中间件。

  • 可以建立连接池,保存连接,复用这些重复的连接。
  • 管理多个PG server。使用replication 函数建立实施备份在两个或多个地方,为了服务不熟影响。
  • 负载均衡。Pgpool-II利用复制特性的优势,在多个服务器之间分配选择查询来降低每个PG server的负载。
  • 管理最大连接,最大连接之外的连接会排队,不会被立刻返回错误。

 

 

1. 下载

# wget http://www.pgpool.net/download.php?f=pgpool-II-3.7.4.tar.gz

下载之后的文件名可能有点小问题,改一下。

# mv download.php\?f\=pgpool-II-3.7.4.tar.gz pgpool-II-3.7.4.tar.gz

# tar -zxvf pgpool-II-3.7.4.tar.gz

 

2. 安装

# cd pgpool-II-3.7.4

# ./configure

# make

# make install

 

3. 配置

# cd /usr/local/etc/

# cp pgpool.conf.sample pgpool.conf

# vim pgpool.conf

listen_addresses = '*'

port = 9999

backend_data_directory0 = '/usr/local/pgsql/data'

 

# cp pcp.conf.sample pcp.conf

通过pg_md5获取一个加密的密码,写入到pcp.conf文件中

# pg_md5 mytest

a599d36c4c7a71ddcc1bc7259a15ac3a

# vim pcp.conf

mytest:a599d36c4c7a71ddcc1bc7259a15ac3a ### USERID:MD5PASSWD

 

配置数据库节点

# vim pgpool.conf

backend_hostname0 = 'localhost'

# Host name or IP address to connect to for backend 0

backend_port0 = 5432

# Port number for backend 0

backend_weight0 = 1

# Weight for backend 0 (only in load balancing mode)

backend_data_directory0 = '/usr/local/pgsql/data'

# Data directory for backend 0

backend_flag0 = 'ALLOW_TO_FAILOVER'

# Controls various backend behavior

# ALLOW_TO_FAILOVER, DISALLOW_TO_FAILOVER

# or ALWAYS_MASTER

 

backend_hostname1 = 'dbw21as'

backend_port1 = 5433

backend_weight1 = 1

backend_data_directory1 = '/usr/local/pgsql/data2'

backend_flag1 = 'ALLOW_TO_FAILOVER'

 

4. 启动/停止

启动的时候会在/var/run/pgpool/中创建pid文件,所以如果没有文件夹需要建立。

# pgpool

执行成功,但不打印之日。

 

如果想要打日志,就要执行,-d 启用调试信息。

pgpool -n -d > /var/log/pgpool/pgpool.log 2>&1 &

生成名称类似于 “pgpool.log.Thursday” 的日志文件,然后在每天午夜 00:00 轮换日志文件。

pgpool -n 2>&1 | /usr/local/apache2/bin/rotatelogs -l -f /var/log/pgpool/pgpool.log.%A 86400 &

 

停止:

关闭,如果有客户端连接就等待

# pgpool stop

如果还有客户端连接,强制关闭

# pgpool -m fast stop

 

#############################################################################

Runing Mode of Pgpool-II

在多个模式下,我们可以使用不同的配置文件模板,只需要更改简单的配置即可。

这些模式是互斥的,在启动服务器后不能更改。你应该在设计系统的早期做出决定。如果不确定,建议使用流复制模式。

 

1. streaming replication mode

/usr/local/etc/pgpool.conf.sample-stream

与PostgreSQL服务器一起使用流式复制。在这种模式下,PostgreSQL负责同步数据库。这种模式被广泛使用,也是推荐使用pgpool-II的方式。在模式中负载均衡.

 

2. logical replication mode

/usr/local/etc/pgpool.conf.sample-logical

与运行逻辑复制的PostgreSQL服务器一起使用。在这种模式下,PostgreSQL负责同步表。在模式中负载均衡。由于逻辑复制不复制所有表,因此用户有责任复制可负载平衡的表。PGPOLII负载平衡表所有表。这意味着如果一个表没有被复制,pgpool-II可能会在用户端查找过时的表。

 

3. master slave mode 

/usr/local/etc/pgpool.conf.sample-master-slave

可用于操作Slony的PostgreSQL服务器。在这种模式下,PostgreSQL负责同步数据库。由于Slony-I正在被流复制所淘汰,除非使用特定的理由使用Slony,否则我们不建议使用这种模式。在模式中负载均衡.

 

4. native replication mode

/usr/local/etc/pgpool.conf.sample-replication

Pgpool-II 负责同步数据库。该模式的优点是同步方式是同步的:直到所有PostgreSQL服务器完成写入操作后,写入数据库才返回。但是,您可以使用PostgreSQL 9.6或更高版本获得类似的效果,在流复制中设置synchronous_commit = remote_apply,如果可以使用该设置,建议使用它代替本机复制模式,因为您可以避免在本机复制模式中的一些限制。由于PostgreSQL不提供跨节点快照控制,所以会话X可以在会话Y提交节点B上的数据之前看到会话Y提交的节点A上的数据。如果会话X尝试基于节点A上看到的数据更新节点B上的数据,那么节点A和节点A之间的数据一致性。B可能丢失了。为了避免这个问题,用户需要对数据发出显式锁定。这也是我们建议使用synchronous_commit = remote_apply的流复制模式的另一个原因。在模式中负载均衡.

 

5. raw mode

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

原始模式,最普通。

 

 

#############################################################################

测试native replication mode

1. 创建conf文件

cp pgpool.conf.sample-replication pgpool.conf

 

2. 配置数据库server

vim pgpool.conf

listen_addresses = '*'

backend_hostname0 = 'localhost'

# Host name or IP address to connect to for backend 0

backend_port0 = 5432

# Port number for backend 0

backend_weight0 = 1

# Weight for backend 0 (only in load balancing mode)

backend_data_directory0 = '/usr/local/pgsql/data'

# Data directory for backend 0

backend_flag0 = 'ALLOW_TO_FAILOVER'

# Controls various backend behavior

# ALLOW_TO_FAILOVER or DISALLOW_TO_FAILOVER

backend_hostname1 = 'dbw21ascom'

backend_port1 = 5432

backend_weight1 = 1

backend_data_directory1 = '/usr/local/pgsql/data'

backend_flag1 = 'ALLOW_TO_FAILOVER'

 

3. 启动

pgpool -n -d > /var/log/pgpool/pgpool.log 2>&1 &

 

4.

$ psql -p 9999 -d test_0718 -c "create table test_0718_01(id int);"

$ psql -p 9999 -d test_0718 -c "insert into test_0718_01 values(1);"

INSERT 0 1

$ psql -p 9999 -d test_0718 -c "insert into test_0718_01 values(2);"

INSERT 0 1

到两个机器中的数据库查看

$ psql -U postgres -d test_0718 -h localhost -c "select * from test_0718_01;"

id

----

1

2

(2 rows)

$ psql -U postgres -d test_0718 -h dbw21as -c "select * from test_0718_01;"

id

----

1

2

(2 rows)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值