PGPool-II master/slave mode using caveat

PGPool-II的master/slave模式类似load balance模式.只不过master/slave是与PGPool-II以外的第三方复制软件结合使用的。(如当前支持的slony和stream replication)
PGPool会将需要复制的SQL发到Master数据库,不需要复制的SQL符合条件的情况下将可能被分发到Slave数据库以达到负载均衡的效果。

以下是Master/Slave mode使用注意事项:
1. 临时表的DDL,DML操作必须在Master库完成(PGPool自动识别),需要注意的是Select(需要给PGPool一个hint),需要加/*NO LOAD BALANCE*/执行前缀在Select之前.
2. replication_mode必须设置为false , master_slave_mode设置为true.
3. master_slave_sub 可以设置为slony或stream . 配置文件模板分别为pgpool.conf.sample-master-slave , pgpool.conf.sample-stream . 默认的设置为slony . 
4. 可以使用white_function_list 和 black_function_list 控制函数在该模式下的使用特性,如下:
    white_function_list : 函数白名单,逗号隔开函数名,在这里的函数被认为不会更新数据库的内容。因此不包含在这个列表中的函数不会被load balance , replication in replication mode,或In master slave mode, such SELECTs are sent to master(primary) only.
    black_function_list  : Specify comma separated function name list, those do update database. SELECTs using functions specified in this list are not load balanced, replicated if in replication mode. In master slave mode, such SELECTs are sent to master(primary) only.
    不可以同时设置white_function_list 与 black_function_list为非空.
5. failover注意事项
    使用master/slave中的stream模式,当primary或standby DOWN机时可以使用failover功能,不需要额外配置detect。通过生产触发文件,可以将standby中的数据库转换为normal模式.
  
  如果计划使用多个standby 节点,强烈建议设置delay_threshold参数.
6. SQL发送到primary或standby的注意事项
    只能发送到primary节点的SQL
        * INSERT, UPDATE, DELETE, COPY FROM, TRUNCATE, CREATE, DROP, ALTER, COMMENT
        * SELECT ... FOR SHARE | UPDATE
        * SELECT in transaction isolation level SERIALIZABLE
        * LOCK command more strict than ROW EXCLUSIVE MODE
        * Some of transaction commands
            o BEGIN READ WRITE, START TRANSACTION READ WRITE
            o SET TRANSACTION READ WRITE, SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE
            o SET transaction_read_only = off 
        * Two phase commit commands: PREPARE TRANSACTION, COMMIT PREPARED, ROLLBACK PREPARED
        * LISTEN, UNLISTEN, NOTIFY
        * VACUUM
        * Some of sequence functions(nextval and setval)
        * Creating large objects 
    可以发送到primary或standby节点的SQL,如果开启了负责均衡,这些类型的SQL将发到STANDBY节点。需要注意,如果设置了delay_threshold,并且复制延时超过这个值那么这些SQL不会发送给该STANDBY。
        * SELECT not listed above
        * COPY TO
        * DECLARE, FETCH, CLOSE
        * SHOW 
     同时发送到primary和standby节点的SQL
        * SET
        * DISCARD
        * DEALLOCATE ALL 
7. 显性的事务中需要注意到事项
    事务启动命令必须发给primary节点(如begin)
    事务启动后紧跟的SELECT语句可以发送给primary或standby节点,
    在事务内的INSERT语句只能发送给PRIMARY节点,并且INSERT后面所有的SELECT也必须发送给PRIMARY节点,因为INSERT之后可能数据已经发生改变,之后的SELECT如果发给STANDBY可能造成结果不一致。直到事务结束所有INSERT之后的SELECT都将发往PRIMARY节点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值