用 repmgr实现 pg的master/slave 搭建高可用和自动切换过程略

(详见htthttps://blog.csdn.net/zhaowenzhong/article/details/80774004

ps://blog.csdn.net/zhaowenzhong/article/details/80774568

https://blog.csdn.net/zhaowenzhong/article/details/80774619)

本文章相对简单,只是利用pgpool实现 负载均衡+缓冲池

version:pgpool-II 4.0.4

http://www.pgpool.net/docs/latest/en/html/index.html

对于每个Pgpool-II操作模式,都有样本配置。

pgpool-II的工作模式有

这些模式相互独占,启动服务器后无法更改。您应该在设计系统的早期阶段做出决定。如果您不确定,建议使用流式复制模式.

在任何模式下,Pgpool-II都提供连接池,自动故障转移和在线恢复

原始模式:

只实现一个故障切换功能,可以配置多个后端数据库,当第一个后端数据库不能工作时,pgpool-II会自动切换到第二个后端数据库,以此类推。该模式下无法进行负载均衡

复制模式:

此模式下,实现了同步复制功能,实际上就是把修改数据库的操作分发到后端所有数据库上处理,而只读查询则发送给任意一台数据库,此模式下还实现了负载均衡的功能

优点:

1、复制是同步是,不存在最终一致性问题。

2、自动 Failover。

3、读可以负载均衡。

4、可以在线恢复,不需要停止pgpool-II,就可以在线修复或增加一个后端数据库节点。

5、配置容易。

缺点:

1、写性能不好,有30%的写性能下降。

2、不支持部分查询。如随机函数、序列号,直接在不同的后端数据库上执行SQL,将产生不同的结果。

主/备模式

此模式下,使用其他软件完成实际的数据复制(比如 slony-I(被流式淘汰了),流复制中间层使用pgpool-II式),pgpool-II主要提供高可用和连接池功能。在该模式中,DDL和DML操作在主节点上执行,select可以在主备节点上执行,也可以强制select在主节点上执行。但这需要在SELECT 语句前添加 /*NO LOAD BALANCE*/ 注释。 不建议使用该模式

优点:

1、写性能较好,只有10%到20%的性能下降。

2、自动 Failover。

3、读可以负载均衡。

缺点:

1、复制是异步的;

2、不支持大对象的复制,如果使用了slony-I实现主/备模式,不能实现DDL的复制。

3、配置复杂

并行模式:

本模式实现了查询的并行执行。表可以被分割,数据分布在每个节点中。而且,复制和负载均衡功能也可以同时使用。并行模式和主/备模式不能同步使用。

操作模式

配置文件名

流复制模式(推荐使用pgpool-II的最佳方式)

pgpool.conf.sample-stream

复制模式(本地复制模式)

pgpool.conf.sample-replication

主从模式

pgpool.conf.sample-master-slave

原始模式

pgpool.conf.sample

用户名及密码文件

pcp.conf.sample

pgpool-II认证配置文件

pool_hba.conf.sample

这些配置文件位于/usr/local/etc,默认安装源代码

在配置之前,强烈建议 拷贝一份模板出来并重命名,再最重命名后的文件进行配置。

启动 pgpool-II前 强烈建议 先配置 pcp.conf 和 pool_hba.conf  pgpool.conf

[root@vlnx107001 pgpool-II-10]# cp /etc/pgpool-II-10/pcp.conf.sample /etc/pgpool-II-10/pcp.conf

[root@vlnx107001 pgpool-II-10]# cp /etc/pgpool-II-10/pgpool.conf.sample /etc/pgpool-II-10/pgpool.conf

[root@vln x107001 pgpool-II-10]# cp /etc/pgpool-II-10/pool_hba.conf.sample /etc/pgpool-II-10/pool_hba.conf

pgpool-II的管理接口名为PCP,可通过网络获取数据库的节点信息,并且可以关闭pgpool-II等。要使用PCP命令必须进行用户认证,该种认证不同于PostgreSQL的用户认证。它需。要在pcp.conf文件中定义一个永和密码。在该文件中 用户名和密码是成对出现在每一行中,它们用冒号(:)隔开,密码的格式是md5哈希加密。密码可以使用 pg_md5 your_passwd 加密,然后将your_passwd 密码加密后的串 保存到文件中。

pg_md5 是 pgpool-II提供的一个工具。

也可以通过

postgres=# select usename,passwd from pg_shadow;

postgres=# select rolname,rolpassword from pg_authid;

获取

vim  pcp.conf (用 pg_md5生成的hash密码串)

zhaowz:2aaccca61f2099744a57e9fbe6b9db56

liuj:2aaccca61f2099744a57e9fbe6b9db56

vim  pgpool.conf

详见  http://www.pgpool.net/docs/latest/en/html/runtime-config.html

服务器

角色

vlnx107001    172.31.107.1

master

vlnx107002    172.31.107.2

slave

vlnx107001  172.31.107.254

VIP

vlnx107001    172.31.107.1

pgpoo-II Master

vlnx107002   172.31.107.2

pgpoo-II Slave

mkdir /var/lib/pgsql/pgpool

mkdir /var/run/pgpool-II-10

touch /etc/pgpool-II-10/pool_passwd

mkdir /var/log/pgpool-II-10

touch /var/log/pgpool-II-10/pgpool.log

vim /etc/rsyslog.conf

*.info;mail.none;authpriv.none;cron.none;LOCAL1.none    /var/log/messages

LOCAL1.*                                                /var/log/pgpool-II-10/pgpool.log

vim /etc/logrotate.d/syslog

/var/log/pgpool-II-10/pgpool.log

systemctl restart rsyslog

firewall-cmd --zone=public --add-port=5432/tcp --permanent

firewall-cmd --zone=public --add-port=9999/tcp --permanent

firewall-cmd --zone=public --add-port=9898/tcp --permanent

firewall-cmd --zone=public --add-port=9000/tcp --permanent

firewall-cmd --zone=public --add-port=9694/tcp --permanent

firewall-cmd --reload

或者

firewall-cmd --permanent --zone=public --add-port=9999/tcp --add-port=9898/tcp --add-port=9000/tcp  --add-port=9694/tcp

firewall-cmd --permanent --zone=public --add-port=9999/udp --add-port=9898/udp --add-port=9000/udp  --add-port=9694/udp

firewall-cmd --reload

vim  /etc/pgpool-II-10/pcp.conf

postgres:e8a48653851e28c69d0506508fb27fc5

zhaowz:2aaccca61f2099744a57e9fbe6b9db56

liuj:2aaccca61f2099744a57e9fbe6b9db56

vim /etc/pgpool-II-10/pool_hba.conf

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

host    all         all         0.0.0.0/0                md5

local   all         all                               trust

vim    /etc/pgpool-II-10/pgpool.conf

#connections

list_addresses = *

port = 9999

socket_dir = '/var/run/pgpool-II-10/'

pcp_listen_addresses=  *

pcp_port =9898

pcp_socket_dir = '/var/run/'

num_init_children = 16

#authentication

enable_pool_hba = on

pool_passwd = 'pool_passwd'

allow_clear_text_frontend_auth = false

authentication_timeout =60

#backend connection

backend_hostname0 = '172.31.107.1'

backend_port0 = 5432

backend_weight0 = 1

backend_data_directory0 = '/var/lib/pgsql/10/data'

backend_flag0 = 'ALLOW_TO_FAILOVER'

backend_hostname1 = '172.31.107.2'

backend_port1 = 5432

backend_weight1 = 1

backend_data_directory1 = '/var/lib/pgsql/10/data'

log_destination = 'syslog,stderr'

syslog_facility = 'LOCAL1'

pid_file_name = '/var/lib/pgsql/pgpool/pgpool.pid'

logdir = '/var/lib/pgsql/pgpool'

log_per_node_statement = on

log_line_prefix = '%a:pid %p:%d:%u:%t'

master_slave_mode = on

master_slave_sub_mode = 'stream'

replication_mode = off

load_balance_mode =on

ignore_leading_white_space = on

allow_sql_comments = off

failover_command = '/var/lib/pgsql/pgpool/failover.sh'

# failback   恢复脚本必须放在$PGDATA目录下。恢复过程的俩个脚本不要写具体路径,因为恢复脚本都放在$PGDATA目录下

backend_flag1 = 'ALLOW_TO_FAILOVER'

recovery_user = 'postgres'

recovery_password = 'postgres'

recovery_1st_stage_command = 'recovery_1st_stage'

recovery_2nd_stage_command = 'recovery_2nd_stage'

recovery_timeout = 3600

client_idle_limit_in_recovery = -1

#watchdog health check

use_watchdog = on

wd_ipc_socket_dir = /var/lib/pgsql/pgpool/

wd_interval = 10

wd_lifecheck_method = 'heartbeat'

wd_hostname = '172.31.107.1'

wd_heartbeat_port = 9694

wd_port = 9000

wd_heartbeat_keepalive = 2

wd_heartbeat_deadtime = 30

heartbeat_destination0 = '172.31.107.2'

heartbeat_destination_port0 = 9694

# method 为 query时适用

#wd_life_point = 3

#wd_lifecheck_query = 'SELECT 1'

#wd_lifecheck_dbname = 'postgres'

#wd_lifecheck_user = 'postgres'

#wd_lifecheck_password = 'postgres'

#watchdog server configuration

other_pgpool_hostname0 = '172.31.107.2'

other_pgpool_port0 = 9999

other_wd_port0 = 9000

sr_check_user = 'postgres'

sr_check_password = 'postgres'

sr_check_database = 'postgres'

health_check_user0 = 'postgres'

health_check_password0 = 'postgres'

health_check_database0 = 'postgres'

health_check_period0 = 2

health_check_timeout0 = 20

delegate_IP = '172.31.107.254'

ifconfig_path = '/sbin'

if_up_cmd = 'ifconfig eth0:1 inet $_IP_$ netmask 255.255.0.0  broadcast 172.31.255.255 up'

if_down_cmd = 'ifconfig eth0:1 down'

arping_path = '/usr/sbin'

arping_cmd = 'arping -U $_IP_$ -w 1'

#pgpool

connection_cache = on

max_pool = 20

listen_backlog_multiplier = 2

child_life_time = 180

client_idle_limit = 180

reset_query_list ='ABORT'

vim /etc/pgpool-II-10/pool_passwd

postgres:md53175bce1d3201d16594cebf9d7eb3f9d

zhaowz:md53a496d6e74bee0f18abc9b540d422797

liuj:md5ccb9d6a00145aa2001304cebd847d550

配置 hba

开启pgpool

[root@vlnx107001 pgpool-II-10]#pgpool

停止 pgpool

[root@vlnx107001 pgpool-II-10]# pgpool stop

重新加载 pgpool

[root@vlnx107001 pgpool-II-10]# pgpool reload

连接

[zhaowzh@vlnx107001 ~]$ psql -h 127.0.0.1 -p 9999 -Upostgres -d postgres

后期的维护工作细节,网上很多博客和官方网站都有详细介绍。这里就不再一一罗列了。

http://www.pgpool.net/docs/latest/en/html/index.html

pgpool-II(二)pgpool-II+repmgr(master/slave)+balance+pgpool相关推荐

  1. Redis: Redis的主从复制(Master/Slave),一主二仆,薪火相传,反客为主,哨兵模式sentinel

    命令: slaveof 主库ip  主库端口         配置从库 info replication                         查看redis连接情况 slaveof  no ...

  2. PGPool-II master/slave mode using caveat

    PGPool-II的master/slave模式类似load balance模式.只不过master/slave是与PGPool-II以外的第三方复制软件结合使用的.(如当前支持的slony和stre ...

  3. 《Netkiller Spring Cloud 手札》之 Master / Slave 主从数据库数据源配置

    2019独角兽企业重金招聘Python工程师标准>>> Netkiller Spring Cloud 手札 Spring Cloud Cookbook Mr. Neo Chan, 陈 ...

  4. Redis(八):Redis的复制(Master/Slave)

    Redis的复制(Master/Slave)目录导航: 是什么 能干嘛 怎么玩 复制原理 哨兵模式(sentinel) 复制的缺点 是什么 官网 行话:也就是我们所说的主从复制,主机数据更新后根据配置 ...

  5. redis主从复制_Redis 的主从复制(Master/Slave)

    1. 是什么 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略自动同步到备机的 master/slave 机制,Master以写为主,Slave 以读为主 2. 能干嘛 数据冗余:主从复制 ...

  6. master slave mysql_MYSQL高可用之复制(MASTER/SLAVE)

    MYSQL高可用之复制(MASTER/SLAVE) 随着互联网的快速发展,对数据库的访问已经越来越频繁,仅凭单个服务器已经无法应对高并发的访问,也无法满足数据库提供7*24的服务,这个时候我们就必须考 ...

  7. mongoDB-3.x Master Slave Replication

    mongoDB-3.x Master Slave Replication 官方文档: https://docs.mongodb.org/manual/core/master-slave/ https: ...

  8. mysql master slave区别_mysql master/slave 使用感受

    使用mysql的master/slave部署已经有一段时间.这种架构不能从根本上弥补数据结构设计失误带来的性能问题.聊胜于无. master/slave模式中,数据同步非常快.而master/slav ...

  9. 为反对种族歧视,GitHub正在把master/slave等术语替换掉

    大数据文摘出品 来源:zdnet 编译:牛婉杨.笪洁琼 随着美国"弗洛伊德"事件的持续发酵,战火烧到了技术圈. 像IBM.亚马逊这样的科技巨头都暂停了警方对其面部识别技术的使用,近 ...

最新文章

  1. Linux C连接Mysql
  2. Exchange Server 2010 全新部署篇九:CASHUB中客户端访问功能配置篇
  3. 清除系统LJ.bat
  4. ES6前端就业课第三课之class
  5. python3 UnicodeEncodeError: 'ascii' 错误
  6. 为什么我不推荐Python初学者直接看项目源码?工作五年的程序员给的忠告
  7. airflow+k8s 多用户-分布式-跨集群-容器化调度
  8. mysql print r_PHP 中 PDO 打印出错信息,和 print_r 的位置提前的奇怪表现问题
  9. 编程之美读书笔记1.1——让CPU占用率曲线听你的指挥
  10. SpringBoot 集成 Caffeine、Redis实现双重缓存方式(二)
  11. Oracle中查看所有的表,用户表,列名,主键,外键
  12. 基于linker实现so加壳补充从dex中加载so
  13. 指数基金投资从入门到精通——阅读笔记
  14. Windows python2.7虚拟环境下的PyV8安装
  15. 2021 年高教社杯全国大学生数学建模竞赛题目
  16. EXCEL VBA入门(课堂随机点名系统)
  17. Python中的角度转换功能
  18. 动图gif怎么制作?制作方法你学会了吗?
  19. 动态规划算法解Travelling Salesman Problem(TSP)问题
  20. 这三个移动互联网案例让你大胆追梦

热门文章

  1. LQFP44 to DIP40(LQFP44转DIP40接线图)
  2. python学习027-----python之函数(三):函数返回值、局部变量与全局变量
  3. 鬼谷子训诫:遇横逆之来而不怒、遭变故之起而不惊、当非常之谤而不辩
  4. 【vs】未能完成操作。拒绝访问。
  5. redhat6.9 安装ganglia监控服务
  6. 金山pdf独立版右键菜单
  7. 餐饮行业离职证明申请范文,共计20篇
  8. OpenLayers 3 入门指南
  9. SpringBoot 搭建的个人博客
  10. linux查看 jre 安装目录