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

Postgres高可用环境搭建

Postgres高可用环境搭建1.postgreSQLHA配置基础PG的流模式加上pgpool软件实现双机热备,类似于OricalDG的FSF功能。pgpool-1与pgpool-

Postgres高可用环境搭建

1. postgreSQL HA配置

基础PG的流模式加上pgpool软件实现双机热备,类似于Orical DG的FSF功能。pgpool-1与pgpool-2作为中间件,将主备pg节点加入集群,实现读写分离,负载均衡和HA,故障自动切换。两个pgpool节点使用一个虚拟IP节点,作为应用程序访问的地址,两节点之间通过watchdog进行监控,当pgpool-1宕机时,pgpool-2会自动接管虚拟IP继续对外提供不间断的服务。
Postgres高可用环境搭建

2.pgpool主备模式

Postgres高可用环境搭建
Postgres高可用环境搭建

3.pgpool常用命令

# 查询 pgpool节点状态
psql -h 192.168.230.55 -p 9999 -c "show pool_nodes"

# 查看备库状态
psql -p 5433 -c "show transaction_read_only"

# 查看节点状态
psql -p 9999 -c "show pool_nodes" test

# 启动pgpool
pgpool -n -d > /tmp/pgpool.log 2>&1 &

show pool_version
show pool_nodes
show pool_status
show pool_pools
show pool_processes

Postgres高可用环境搭建
Postgres高可用环境搭建

主机规划

Postgres高可用环境搭建

1.)配置域名

vim /etc/hosts
192.168.18.211 pg1
192.168.18.212 pg2
192.168.18.215 vip

2.)下载pgpool-3.7.13

下载地址:http://pgpool.net/mediawiki/index.php/Downloads
3.)配置节点互信

# pg1和pg2都执行以下命令,生成公钥
ssh-kengen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# 公钥互相拷贝
scp ~/.ssh/authorized_keys postgres@pg2:~/.ssh/  # pg1主机
scp ~/.ssh/authorized_keys postgres@pg1:~/.ssh/  # pg2主机

# 验证,两个主机均执行如下命令
ssh postgres@pg2 uptime
ssh postgres@pg1 uptime

4.)安装pgpool

mkdir /usr/local/pgpool   # root用户
chown postgres:postgres /usr/local/pgpool  # root

cd /osft/pgpool-II-3.7.13
./configure --prefix=/usr/local/pgpool --with-pgsql=/usr/local/pg12.2/
make
make install

5.)安装pgpool相关的函数,可选,建议安装

cd /soft/pgool-II-3.7.13/src/sql
make
make install
cd sql
psql -f insert_lock.sql

6.)配置postgres用户环境变量(pg1,pg2)

vim .bash_profile
export PGPOOL_HOME=/usr/local/pgpool
export PATH=$PATH:$PGPOOL_HOME/bin

7.)配置pgpool
首先配置pg1上的pool_hba.conf,该文件是对登录用户进行验证的,要和pg的pg_hba.conf保持一致。

cd /usr/local/pgpool/etc/
cp pool_hba.conf.sample pool_hba.conf

vim pool_hba.conf
host replication repl  pg2 trust
host replication repl  192.168.18.0/24 trust
host all          all  192.168.18.0/24 trust

其次,配置pcp.conf(pg1,pg2),该文件用于pgpool自己登录管理使用的,一些操作pgpool的工具会要求提供密码等,比如节点的添加和删除等,配置如下:

cd /usr/local/pgpool/etc
cp pcp.conf.sample pcp.conf

# 使用pg_md5生成配置的用户名和密码
pg_md5 postgres
xxx

vim pcp.conf
postgres:xxx   # xxx标识上面pg_md5生成的内容

配置pgpool.conf,在pgpool中添加pg数据库的用户名和密码(pg1,pg2)

# 创建pgpool.conf文件
cp pgpool.conf.sample-master-slave pgpool.conf

pg_md5 -p -m -u postgres pool_passwd
# 输入数据库登录用户postgres密码,生成pool_passwd文件

more pool_passwd # 查看生成的文件

最后,配置pgpool.conf,该文件是最核心的文件,HA是否能够正常云霄路,与该文件息息相关,该配置文件分为不同的模块,需要根据不同的模块来配置。
Postgres高可用环境搭建
Postgres高可用环境搭建
Postgres高可用环境搭建
Postgres高可用环境搭建
Postgres高可用环境搭建
pg2主机上的pgpool.conf其他配置同上,不同之处如下:
Postgres高可用环境搭建
Postgres高可用环境搭建

8)切换脚本的编辑(pg1,pg2)
vim /usr/local/pgpool/failover_stream.sh
Postgres高可用环境搭建
赋予执行权限:
chmod +x /usr/local/pgpool/failover_stream.sh

9.)设置ip arping等setuid权限,执行failover_stream.sh时会用到,否则无法启动IP(pg1,pg2)

chmod u+x /sbin/ip
chmod u+x /sbin/arping

10)启动集群守护进程
pg1、pg2启动数据库与pgpool进程

pg_ctl start -l pg.log
pgpool -n -d -D > /usr/local/pgpool/pgpool.log 2>&1 &   #-d 标识debug状态
  1. 查看pgpool后台进程
ps -ef |grep pgpool

12)启动顺序:
先启动主库的pg数据库,然后再启动主库的pgpool守护进程,这样vip会在主库上生成,否则会在备库上产生,但是不影响业务的访问。可以看出vip是可以在不同的集群上漂移,跟以往的双机热备有区别的。接着再启动备库的pg数据库,最后启动pgpool进程。

13)故障切换
场景一:模拟主库pgpool进程中断,此时备库主机的pgpool会把vip接管过来,但是主备库的角色没有发生变化。

pgpool -m start stop

show pool_nodes; # 先连数据库,再查看

pg_controldata |grep cluster

场景二:模拟主库数据库关闭,pg_ctl -m fast stop 此处备库的pgpool切换脚本会把备库切换成主库,提供主库服务。检查postgresql.auto.conf文件,需要将primary_conninfo注释掉,否则不会承担主库的责任,向备库发送日志,重启数据库。

场景三:将原来的主库编程备库,创建standby.signal文件:
Postgres高可用环境搭建
Postgres高可用环境搭建
执行pg_ctl promote命令会进行主从切换,执行后发现standby.signal备删除了,查看最新状态pg_controlddata |grep cluster 原来备库的postgresql.auto.conf中自动添加了一行primary_conninfo的信息,需要把这行注释,否则虽然现在是主库,但是配置还是当做备库,日志会报错background worker logical replication launcher exited with exit code

启动备库,注意rewind会自动把standby.signal文件删除,以及修改postgres.auto.conf文件,需要手动修改,主库数据库如果管理或者发生异常中断,pgpool会将备库切换成主库,提供服务,不会影响业务,但是恢复主备库之间的关系,需要人为干预,不够智能。所以如果需要维护数据库,需要先停止pgpool进程再关闭主库,否则发生切换,害的修复备库。

14)压力测试
方法一:通过第三台机器网络连接测试:
Postgres高可用环境搭建
方法二:pgbench工具测试

pgbench -c 30 -T 60 -h vip -p 9999 -U postgres -r postgres
pgbench -c 30 -T 60 -S -h vip -p 9999 -U postgres -r postgres # select压力测试,两个节点负载均衡

方法三:把备库脱离出集群,进行单机测试:

pcp_detach_node -h vip -p 9898 -U postgres -n 0
pgbench -c 30 -T 60 -S -h vip -p 9999 -U postgres -r postgres

推荐阅读
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
author-avatar
SureChueng
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有