首页 >数据库 >mysql教程 >CentOS 6.5下PostgreSQL 故障切换实现

CentOS 6.5下PostgreSQL 故障切换实现

WBOY
WBOY原创
2016-06-07 15:53:25993浏览

pgpool-II 是一个中间 件,工作在PostgreSQL多服 务 器和PostgreSQL数据 库 客 户 端之 间。使用并行 查 询 功能,数据可分布在多

pgpool-II 是一个中间 件,工作在PostgreSQL多服 务 器和PostgreSQL数据 库 客 户 端之 间。

它提供了以下功能

连 接池: pgpool -Ⅱ保存 连 接到PostgreSQL服 务 器,并重复利用具有相同属性的新的 连 接(即用 户 名,数据 库 , 协议 的版本),减少 连 接的开 销 ,并提高了系 统 的整体吞吐量。复制: pgpool - II可以管理多个PostgreSQL服务器。 使用复制功能,可以 实时备份在 2个或多个物理磁 盘 上,因此即使在硬 盘出故障的时候也不用停止服务。

负载 平衡: 如果数据 库 是复制,任何服 务 器上 执 行一个SELECT 查 询 将返回相同的 结 果。 pgpool -Ⅱ采用一个复制功能 优 势 是,以减少多个服 务 器之 间 分配上的SELECT 查 询 每个PostgreSQL服 务 器的 负载 ,提高系 统 的整体吞吐量。在最好的,性能的提高比例的PostgreSQL服 务 器的数量。在同一 时间有 大量用 户 的 查 询的时候,负载 平衡的情况下有最佳的 执 行。

连接超 过限制 : 有一个关于与 PostgreSQL 的最大并 发连 接数限制,最大 连接数超过后 的 连 接被拒 绝 。 设 置最大 连 接数,但是增加的 资 源消耗和影响系 统 性能。 pgpool - II 也有 对 最大 连 接数的限制,但 额 外的 连 接将被排 队 ,而不是立即返回 错误 。

并行查询 : 使用并行 查 询 功能,数据可分布在多个服 务 器中,以便 查 询 可以 执 行所有服 务 器上同 时 减少 总 体 执 行 时间 。 并行 查 询 的工作 时 候 , 寻 找最佳的大 规 模的数据。
 
进行pgpool搭建前需要配置好postgresql的流复制,操作步骤参考

一、安装

wget ?f=pgpool-II-3.4.0.tar.gz
 tar -zxvf pgpool-3.4.0.tar.gz
 cd pgpool-II-3.4.0/
 ./configure --prefix=/usr/local/pgpool --with-pgsql=path --with-pgsql=/usr/local/pgsql
 make
 make install
 chown postgres.postgres /usr/local/pgpool/ -R
 chown postgres.postgres /usr/src/pgpool-II-3 -R
 mkdir /var/run/pgpool
 chown postgres.postgres /var/run/pgpool/
 #切换postgres 用户安装一些函数
 su - postgres
 
 cd /usr/src/pgpool-II-3.4.0/src/sql/
 make
 make install
 cd pgpool-recovery/
 make install
 cd ../pgpool-regclass/
 make install

二、配置

cd /usr/local/pgpool/etc
 cp pcp.conf.sample pcp.conf
 pg_md5 postgres
 e8a48653851e28c69d0506508fb27fc5
 echo "postgres:e8a48653851e28c69d0506508fb27fc5" >> pcp.conf
 echo "postgres:e8a48653851e28c69d0506508fb27fc5" >> pool_passwd
 cp pool_hba.conf.sample pool_hba.conf
 vim pool_hba.conf
 host    all        postgres    db2                  md5
 
 
 listen_addresses = '*'                    #允许所有主机监听
 port = 9999                            #访问端口
 backend_hostname0 = 'db1'                #DBmaster ip
 backend_port0 = 5432                    #DBmaster postgresql 端口
 backend_weight0 = 1                    #权重
 backend_data_directory0 = '/opt/data'    #DBmaster 数据库目录
 backend_flag0 = 'ALLOW_TO_FAILOVER'    #允许切换
 
 backend_hostname0 = 'db2'
 backend_port0 = 5432
 backend_weight0 = 1
 backend_data_directory0 = '/opt/data'
 backend_flag0 = 'ALLOW_TO_FAILOVER'
 
 enable_pool_hba = on  #随意,自由定制,,使用 pool_hba.conf 对client的验证
 pool_passwd = 'pool_passwd' #md5验证文件
 sr_check_user = 'postgres'  #用来故障切换的用户
 
 failover_command = '/usr/local/pgsql/bin/failover_command.sh %d %H /tmp/trigger_file'

故障切换脚本
 
vim /usr/local/pgsql/bin/failover_command.sh
 
#! /bin/sh
# 用于流复制的故障转移命令。
# 该脚本假设数据库节点 0 是主节点,1 是备用节点。

# 如果待机状态下降,则无需执行任何操作。如果主节点出现故障,请创建一个
# 触发器文件,以便备用节点接管主节点。
#
# 参数: $1:失败的节点 ID。 $2:新的主主机名。 $3:
# 触发器文件的路径。
failed_node=$1
new_master=$2
trigger_file=$3
# 如果待机状态下降,则不执行任何操作。
#if [ $failed_node = 1 ];然后
#      退出 0;
#fi
# 创建触发器文件。
/usr/bin/ssh -T $new_master /bin/touch $trigger_file
退出 0;
chmod x /usr/local/pgsql/bin/failover_command.sh

三、调试

 启动命令,标记日志输出
 
[postgres@db1 etc]$ pgpool -nd >/tmp/pgpool.log 2>&1 &
[postgres@db1 etc]$ netstat - ntlp
(并非所有进程都能被识别,非拥有的进程信息
将不会显示,您必须是 root 才能查看全部内容。)
 活跃的互联网连接(仅限服务器)
Proto Recv-Q Send-Q 本地地址              国外地址            状态      PID/程序名称   
 tcp        0      0 0.0.0.0:22                  0.0.0.0:*                 听      -                   
 tcp        0      0 127.0.0.1:25                0.0.0.0:*听      -                 
 tcp        0      0 0.0.0.0:9898                0.0.0.0:*                  听 16664/ pgpool       
 tcp        0      0 0.0.0.0:9999                0.0.0.0:*                  监听 16664/pgpool       
 tcp       0      0 :: :22                    :::*                        听      -                 
 tcp        0      0 ::1:25                     :::*                        听      -                 
 tcp        0      0 :::9999                   :::*                       听     16664/pgpool

 
登录

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn