热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于PgpoolII的PostgreSQL集群安装与配置教程

本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。

安装Pgpool-II


Pgpool-II 是一个位于 PostgreSQL服务器和 PostgreSQL数据库客户端之间的中间件,Pgpool-II提供了连接池(Connection Pooling)、复制(Replication)、负载均衡(Load Balancing)、缓存(In Memory Query Cache)、看门狗(Watchdog)、超出限制链接(Limiting Exceeding Connections)等功能,可以基于这些特性来搭建PostgreSQL高可用集群。


yum安装

官方参考地址

Yum Repository

Installation from RPM

安装CentOS7的yum源。

$ yum install http://www.pgpool.net/yum/rpms/4.0/redhat/rhel-7-x86_64/pgpool-II-release-4.0-1.noarch.rpm

安装支持PostgreSQL10版本的pgpool-II

$ yum install pgpool-II-pg10

$ yum install pgpool-II-pg10-debuginfo

$ yum install pgpool-II-pg10-devel

$ yum install pgpool-II-pg10-extensions

服务开机启动

$ systemctl enable pgpool.service

启动/停止服务

$ systemctl start pgpool.service

$ systemctl stop pgpool.service

配置Pgpool-II

参考文章

image.png

pgpool-II的安装及使用

PGPool-II+PG流复制实现HA主备切换

实例准备

role ip PostgreSQL Pgpool-II port

master 192.168.1.3 10.9 4.0.5 5432

slave 192.168.1.2 10.9 4.0.5 5432

vip 192.168.1.100 – – –

watchdog端口9000,pcp端口9898,psql服务连接端口9999

架构图

Pgpool-II集群

配置系统环境

配置程序运行的用户和组为 postgres


创建或修改目录权限

$ chown -R postgres.postgres /etc/pgpool-II

$ mkdir /var/run/pgpool/

$ chown postgres.postgres /var/run/pgpool/


修改pgpool运行用户和组为postgres

$ vi /usr/lib/systemd/system/pgpool.service

User=postgres

Group=postgres

配置认证方式

配置pool_hba.conf,要么都是trust,要么都是md5验证方式,这里采用了md5验证方式如下设置


“local” is for Unix domain socket connections only

local all all md5


IPv4 local connections:

host all all 127.0.0.1/32 md5

host all all ::1/128 md5

host all all 0.0.0.0/0 md5

配置pg_hba.conf,认证方式保持一致


“local” is for Unix domain socket connections only

local all all md5


IPv4 local connections:

host all all 127.0.0.1/32 md5

host all all 0.0.0.0/0 md5


IPv6 local connections:

host all all ::1/128 md5

非必要可选步骤,为了集群可扩展性,可以将复制的认证条件放宽


Allow replication connections from localhost, by a user with the
replication privilege.

local replication all md5

host replication all 127.0.0.1/32 md5

host replication all ::1/128 md5

host replication all 192.168.1.0/24 md5

配置pcp

pcp.conf 配置用于pgpool自己登陆管理使用的,一些操作pgpool的工具会要求提供密码等,配置如下

配置用户名密码

$ pg_md5 postgres

e8a48653851e28c69d0506508fb27fc5

$ vi pcp.conf


USERID:MD5PASSWD

postgres:e8a48653851e28c69d0506508fb27fc5

添加pg数据库用户密码

在pgpool中添加pg数据库的用户名和密码,数据库登录用户是postgres,这里输入登录密码

$ pg_md5 -p -m -u postgres pool_passwd

password:


输入密码后,会生成一个pool_passwd文件

$ cat pool_passwd

postgres:md53175bce1d3201d16594cebf9d7eb3f9d

配置系统命令权限

$ chmod +s /sbin/ifconfig

$ chmod +s /sbin/ip

$ chmod +s /sbin/ifup

$ chmod +s /bin/ping

$ chmod +s /sbin/arping

配置 pgpool.conf

primary

$ cp pgpool.conf.sample-stream pgpool.conf

编辑内容如下


- pgpool Connection Settings -

listen_addresses = ‘*’

port = 9999


- pgpool Communication Manager Connection Settings -

pcp_listen_addresses = ‘*’

pcp_port = 9898


- Backend Connection Settings -

backend_hostname0 = ‘192.168.1.3’

backend_port0 = 5432

backend_weight0 = 1

backend_data_directory0 = ‘/var/lib/pgsql/10/data’

backend_flag0 = ‘ALLOW_TO_FAILOVER’

backend_hostname1 = ‘192.168.1.2’

backend_port1 = 5432

backend_weight1 = 1

backend_data_directory1 = ‘/var/lib/pgsql/10/data’

backend_flag1 = ‘ALLOW_TO_FAILOVER’


- Authentication -

enable_pool_hba = on

pool_passwd = ‘pool_passwd’

authentication_timeout = 60


FILE LOCATIONS

pid_file_name = ‘/var/run/pgpool/pgpool.pid’


CONNECTION POOLING

connection_cache = on


REPLICATION MODE

replication_mode = off


LOAD BALANCING MODE

load_balance_mode = on


MASTER/SLAVE MODE

master_slave_mode = on

master_slave_sub_mode = ‘stream’


- Streaming -

sr_check_period = 5

sr_check_user = ‘repuser’

sr_check_password = ‘repuser’

sr_check_database = ‘postgres’


HEALTH CHECK

health_check_period = 10

health_check_timeout = 10

health_check_user = ‘postgres’

health_check_password = ‘postgres’

health_check_database = ‘postgres’


FAILOVER AND FAILBACK

failover_command = ‘/var/lib/pgsql/10/failover_stream.sh %H’


WATCHDOG

use_watchdog = on

wd_hostname = ‘192.168.1.3’

wd_port = 9000

delegate_IP = ‘192.168.1.100’

if_cmd_path = ‘/sbin’

if_up_cmd = ‘ifconfig eth0:0 inet _IP_ netmask 255.255.255.0’

if_down_cmd = ‘ifconfig eth0:0 down’


– heartbeat mode –

heartbeat_destination0 = ‘192.168.1.2’

heartbeat_device0 = ‘eth0’


- Other pgpool Connection Settings -

other_pgpool_hostname0 = ‘192.168.1.2’

other_pgpool_port0 = 9999

other_wd_port0 = 9000

standby

编辑内容如下


- pgpool Connection Settings -

listen_addresses = ‘*’

port = 9999


- pgpool Communication Manager Connection Settings -

pcp_listen_addresses = ‘*’

pcp_port = 9898


- Backend Connection Settings -

backend_hostname0 = ‘192.168.1.3’

backend_port0 = 5432

backend_weight0 = 1

backend_data_directory0 = ‘/var/lib/pgsql/10/data’

backend_flag0 = ‘ALLOW_TO_FAILOVER’

backend_hostname1 = ‘192.168.1.2’

backend_port1 = 5432

backend_weight1 = 1

backend_data_directory1 = ‘/var/lib/pgsql/10/data’

backend_flag1 = ‘ALLOW_TO_FAILOVER’


- Authentication -

enable_pool_hba = on

pool_passwd = ‘pool_passwd’

authentication_timeout = 60


FILE LOCATIONS

pid_file_name = ‘/var/run/pgpool/pgpool.pid’


CONNECTION POOLING

connection_cache = on


REPLICATION MODE

replication_mode = off


LOAD BALANCING MODE

load_balance_mode = on


MASTER/SLAVE MODE

master_slave_mode = on

master_slave_sub_mode = ‘stream’


- Streaming -

sr_check_period = 5

sr_check_user = ‘repuser’

sr_check_password = ‘repuser’

sr_check_database = ‘postgres’


HEALTH CHECK

health_check_period = 10

health_check_timeout = 10

health_check_user = ‘postgres’

health_check_password = ‘postgres’

health_check_database = ‘postgres’


FAILOVER AND FAILBACK

failover_command = ‘/var/lib/pgsql/10/failover_stream.sh %H’


WATCHDOG

use_watchdog = on

wd_hostname = ‘192.168.1.2’

wd_port = 9000

delegate_IP = ‘192.168.1.100’

if_cmd_path = ‘/sbin’

if_up_cmd = ‘ifconfig eth0:0 inet _IP_ netmask 255.255.255.0’

if_down_cmd = ‘ifconfig eth0:0 down’


– heartbeat mode –

heartbeat_destination0 = ‘192.168.1.3’

heartbeat_device0 = ‘eth0’


- Other pgpool Connection Settings -

other_pgpool_hostname0 = ‘192.168.1.3’

other_pgpool_port0 = 9999

other_wd_port0 = 9000

failover_stream.sh

配置failover_stream.sh脚本,内容如下:

$ pwd

/var/lib/pgsql/10

$ touch failover_stream.sh

$ chmod u+x failover_stream.sh

$ cat failover_stream.sh

#! /bin/sh


Failover command for streaming replication.
Arguments: $1: new master hostname.

new_master=$1

trigger_command="/usr/bin/pg_ctl promote -D /var/lib/pgsql/10/data"


Prompte standby database.

/usr/bin/ssh -T $new_master $trigger_command

exit 0;

设置主机互信

配置ssh秘钥,分别在master、slave上生成ssh密钥对,并设置主机互信。

$ ssh-keygen -t rsa -b 1024

$ cd ~/.ssh

$ pwd

/var/lib/pgsql/.ssh

$ touch authorized_keys

$ chmod 600 authorized_keys


将master公钥id_rsa.pub内容拷贝到salve认证文件authorized_keys,同理将slave公钥id_rsa.pub内容拷贝到master认证文件authorized_keys
测试主机互信
salve

$ ssh postgres@192.168.1.3


master

$ ssh postgres@192.168.1.2

如果这个脚本的执行目标是本地,并且ssh本地登陆没有设置免秘钥,那么这个脚本会一直卡在输入密码的阶段,这时候主备自动切换过程就阻塞了。如果 pgpool和 postgresql在同一台机器部署,需要添加本地登陆免秘钥。

$ pwd

/var/lib/pgsql

$ cd .ssh/

$ ls

authorized_keys id_rsa id_rsa.pub

$ cat id_rsa.pub >> authorized_keys

启动集群

分别启动master、slave的PostgreSQL服务

$ systemctl start postgresql-10.service

分别启动各节点Pgpool-II服务

$ systemctl start pgpool.service

集群状态

用vip登录集群,查看状态

$ psql -p 9999 -h 192.168.1.100 -U postgres

Password for user postgres:

psql (10.9)

Type “help” for help.

postgres=# show pool_nodes;

node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay | last_status_change

---------±--------------±-----±-------±----------±--------±-----------±------------------±------------------±--------------------

0 | 192.168.1.3 | 5432 | up | 0.500000 | primary | 5 | true | 0 | 2019-08-08 16:11:26

1 | 192.168.1.2 | 5432 | up | 0.500000 | standby | 3 | false | 0 | 2019-08-08 16:13:14

(2 rows)

至此,基于 Pgpool-II 中间件的 PostgreSQL 集群搭建完成。

PCP命令

获取节点数


获取192.168.1.3可见节点数

$ pcp_node_count -h 192.168.1.3 -p 9898 -U postgres

Password:

2


获取192.168.1.2可见节点数

$ pcp_node_count -h 192.168.1.2 -p 9898 -U postgres

Password:

2

获取节点信息


查看节点0信息

$ pcp_node_info -h 192.168.1.3 -p 9898 -U postgres 0

Password:

192.168.1.3 5432 2 0.500000 up primary 0 2019-08-08 16:11:26


查看节点1信息

$ pcp_node_info -h 192.168.1.3 -p 9898 -U postgres 1

Password:

192.168.1.2 5432 2 0.500000 up standby 0 2019-08-08 16:13:14

$

从pgpool-II中脱离一个节点

该命令将节点slave从pgpool-II中脱离。一般如果需要维护某个数据库节点、或不希望pgpool-II将连接分发到该节点时,需要将该节点从pgpool-II中用该命令脱离。

$ pcp_detach_node -h 192.168.1.100 -p 9898 -U postgres -n 1

为pgpool-II关联一个节点

该命令将节点slave关联到pgpool-II中。当维护结束,或新添加一个节点后,可以将节点添加到pgpool-II。

另外,如果该节点由于主机或数据库故障导致检测到数据库为启动时,即使后期服务器重新修复、数据库手工启动,也需要执行attach操作。同时需要注意从两个节点上观察是否节点都已经attach。

$ pcp_attach_node -h 192.168.1.100 -p 9898 -U postgres -n 1



推荐阅读
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Nginx Buffer 机制引发的下载故障
    Nginx ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • 树状笔记软件for linux,Ubuntu 14.04安装开源树状笔记管理软件 WikidPad 2.2
    WikidPad是一款开源免费的wiki风格的树状笔记管理软件,类似于Notepad。基于Python,支持Windows、Mac、Linux等平台。W ... [详细]
  • 目录Atlas介绍Atlas部署Atlas基本管理Atlas结合MHA故障恢复读写分离建议Atlas介绍Atlas是由Qihoo360Web平台部基础架构团队开发维护的一个基于My ... [详细]
author-avatar
子幽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有