debian8下配置postgresql9.5.2、pgpool3.5.2、heartbeat3.0.5的HA热备

项目要求通过heartbeat控制pg和pgpool的主备过程,从而达到高可用,pg的自己的流复制主备方案参考我另外一篇主备方案文章,pgpool这里只用到连接池的功能。应用通过heartbeat虚拟出来的VIP访问pgpool池。

注:debian8下建议还是直接apt-get install heartbeat,编译各种依赖还会提示源码错误,配置文件路径一模一样,不过那个启动和关闭脚本得自己写,但是偶尔会报错openhpi相关的,老外说是BUG,但解决办法如下:

vim /etc/systemd/system/openhpid.service
[Unit]
Description=Daemon providing access to the SAF Hardware Platform Interface
[Service]
Type=simple
ExecStart=/usr/sbin/openhpid -n -c /etc/openhpi/openhpi.conf
[Install]
WantedBy=multi-user.target

一、准备工作

1、两台debian8.4 xfs文件格式虚拟机,分别配置两个IP,留着一个VIP后面用

2、按照另外一篇PG流复制主备方案,配置好PG的主备配置

3、按照另外一篇pgpool编译安装用于连接池的配置安装pgpool

4、参考我另外一篇关于linux下邮箱配置的文章,配置好邮箱

二、配置heartbeat

1、配置文件

cd /etc/ha.d
vim authkeys
auth 11 crc
#2 sha1 HI!
#3 md5 Hello!
#---------------------heartbeat主配置文件----------------------
vim ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
#心跳间隔
keepalive 2
#死亡阀值
deadtime 30
#警告时间
warntime 10
#首次启动heartbeat,等待多久才启动主服务资源
initdead 30
#连接端口
udpport 694
#心跳线接口
#bcast   eth1
#主节点的网卡设备、备份机的心跳线接口IP
ucast eth0 192.168.180.223
#自动切换还是关掉好
auto_failback off
node elink-master
node elink-slave
#ping 192.168.180.1
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
#----------------------VIP资源控制文件----------------------
vim haresources
elink-master IPaddr::192.168.180.221/32/eth0 elinkresource.sh
#---资源控制脚本,如果主机已经拿到资源,备机就算启动heartbeat也不会启动下面的脚本----
cd resource.d
vim elinkresource.sh
isPid()
{
        pid_result=`ps -ef | grep $1 | awk ‘{if($8!~/grep/) print $2}‘`
        echo $1‘的进程号: ‘$pid_result
        if [ -n "$pid_result" ];then
                return 1
        else
                return 0
        fi
}
start() {
        echo "***************************start PG HA******************************"
        isPid postmaster
        if [ $? -eq 0 ];then
                /etc/init.d/postgresql start
        else
                echo ‘postgresql已经有进程,无需再次启动‘
        fi
        isPid pgpool.conf
        if [ $? -eq 0 ];then
                pgpool -f /usr/local/etc/pgpool.conf -F /usr/local/etc/pcp.conf -D
        else
                echo ‘pgpool已经有进程,无需再次启动‘
        fi
        #pg_master_process_result=`ssh -l root 192.168.180.222 "ps -ef | grep postmaster | grep -v grep"`
        key_result=`su - postgres -c "pg_controldata | grep cluster | grep ‘archive recovery‘"`
        if [ -n "$key_result" ];then
                su - postgres -c "pg_ctl promote"
        else
                echo ‘此服务器不是备机无法promote为主机!!!‘
        fi
        isPid sleep
        if [ $? -eq 0 ];then
                /opt/monitorpg.sh &
        else
                echo ‘sleep监控进程已经存在无需再次启动‘
        fi
}

stop() {
        echo "****************************stop PG HA*****************************"
        #sleep_result=`ps -ef | grep ‘sleep 30‘ | awk ‘{if($8!~/grep/) print $3}‘`
        #kill -9 $sleep_result
        pgpool -f /usr/local/etc/pgpool.conf -F /usr/local/etc/pcp.conf -D -m fast stop
        /etc/init.d/postgresql stop
        mv /usr/local/pgsql/data/recovery.done /usr/local/pgsql/data/recovery.conf
}

case $1 in
        start)
                start
        ;;
        stop)
                stop
        ;;
        restart)
                stop
                sleep 10
                start
        ;;
        *)
                echo "Usage: $0{start|stop|restart}"
esac

2、业务监控脚本

heartbeat只能监控网络层的,例如关机、停止heartbeat后能切换过去,但如果sql都查询不了,那这个资源就是无效资源,当然需要切换

monitor(){
        result=`/usr/local/pgsql/bin/psql -h 192.168.180.222 -p5432 -U postgres -w -d postgres --command "select 1" | sed -n 3p | cut -c9-9`
        #echo $result
        if [ 1 -eq "$result" ];then
                echo `date`" 数据库正常,检测值:"$result >> /opt/moni.log
        else
                echo `date`" 数据库挂了,检测值:"$result >> /opt/moni.log
                service heartbeat stop
                break
        fi
}
while sleep 10
do
        monitor
done

3、测试

目前主要有三类测试,

a、主机heartbeat down机,备机能否正常接管资源

主机:/etc/init.d/heartbeat stop,理论上业务监控脚本、pg、pgpool、heartbeat都会停止、recovery.done变为recovery.conf

备机:pg_controldata | grep cluster显示为production,pg_ctl promote激活备机、pgpool、业务监控脚本启动、recovery.conf自动改为recovery.done

主机恢复为standby:启动postgresql和heartbeat即可

b、主机业务挂掉,备机能否接管

主要是判断能否连上本地的数据库进行一个select查询,如果没有就会停止本地的heartbeat让备机接管资源

c、主机硬关机,备机能否接管资源

只要我心跳基本上都能很快接管,但是原主机恢复的时候,需要检查下recovery.done是否变为recover.conf,不然启动会报错

时间: 2024-10-07 10:24:58

debian8下配置postgresql9.5.2、pgpool3.5.2、heartbeat3.0.5的HA热备的相关文章

debian8下给postgresql9.5配置pgpool-II-3.5

前提: 1.请确定postgresql可以访问(远程),postgres用户密码是否修改,否则pgpool无法验证通过 2.安装必要的安装包,pgxs,apt-get install postgresql-server-dev-9.5,否则会报pgxs的错误 参考: 中文(还好蛮新):http://pgpool.projects.pgfoundry.org/pgpool-II/doc/pgpool-zh_cn.html 英文(官网):http://www.pgpool.net/docs/late

在ubuntu 14.04下配置caffe,cuda 7.5 + opencv 3.0

我只能说太坑了...第一次在linux环境下编译caffe,很不适应.现在一边编译一边记录出现的问题和解决方法. 我是在笔记本上配置caffe, i7处理器+ GTX 970m,配置是按这一篇配的,(要FQ) http://deshrajdry.blogspot.com/2015/06/install-caffe-on-ubuntu-1404-right-way.html .有经验的可以直接看官方的配置文档. 我的ubuntu 14.04是安装在移动硬盘上的,安装很简单,百度下就有很多中文安装方

Eclipse下配置Ant脚本 自己主动打包带签名的Android apk

尽管eclipse非常少用了,可是在古老的项目上还是会用到.一个麻烦事是打带签名包的时候.非常不方便.下边纪录下配置ant,自己主动打包带签名apk的过程,作为备忘.(PC环境为MAC) 1,第一步得安ant,下载相应安装包,解压后配置环境变量: export ANT_HOME="/Users/yanzi/work/apache-ant-1.9.4" export PATH=${PATH}:${ANT_HOME}/bin 通过which ant检查是否成功安装. 2,在项目文件夹下执行

阿里云服务器,数据库热备、暖备、冷备实战-镜像篇(域环境下配置)

阿里云服务器 值得信赖 概述 “数据库镜像”是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中.建议使用不同位置的两台服务器来承载.在同一时刻,其中一台上的数据库用于客户端访问,充当“主体服务器”角色:而另一台则根据镜像会话的配置和状态,充当热备份服务器,即“镜像服务器角色”,这两种角色不是绝对的. 优点 l 增强了数据保护功能 l 提高了数据库的可用性 l 提高了生产数据库在升级期间的可用性 工作方式 在

Ubuntu下配置tftp服务和NFS服务

Ubuntu下配置tftp服务和NFS服务 配置tftp 方法一:(推荐方法)Ubuntu10.04 测试通过 1.安装TFTP软件 sudo apt-get install tftp-hpa tftpd-hpa tftp-hpa是客户端,tftpd-hpa是服务器端 2.建立tftpboot目录,作为服务器的目录sudo mkdir ~/tftpboot释放权限:(服务器目录,需要设置权限为777,chomd 777)sudo chmod 777 ~/tftpboot 3.配置TFTP服务器

openSUSE下配置Apache开启重写模块

这几天刚重装了系统,需要进行一大堆配置,笔者是一名LAMPer,当然要配置apache+php+mysql了,我用的发行版是opensuse13.1,. 安装好apache后,需要开启URL重写功能以配合项目的开发.打开apache的配置文件/etc/apache2/httpd.conf,找到AllowOverride None,改成AllowOverride ALL,再找到Option None改为Option FollowSymLinks .这样还不行,还要加载Rewrite模块. Rewr

Eclipse下配置TinyOS开发环境

通过给Eclipse安装Yeti 2 - TinyOS 2 Plugin for Eclipse来配置TinyOS IDE,从而可建立TinyOS Project Yeti 2的介绍请参考网站:http://tos-ide.ethz.ch/wiki/pmwiki.php?n=Site.TinyOSEclipsePlugin 1.下载.解压并打开Eclipse(我用的是Eclipse IDE for Java Developers) 2.打开Install对话框:Help->Install New

Linux下配置tomcat + apr + native应对高并发

在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,这时并发的线程数量明显下降,从原来的300可能会马上下降到只有几十,新的请求会毫无阻塞的进来. 一.Tomcat运行模式介绍 Tomcat 有三种(bio,nio.apr) 运行模式,首先来简单介绍下: (1)BIO    BIO(blocking I/O

CentOS 下配置JDK

从官网上下载jdk到系统中,并解压好 tar –axvf jdk.tr.gz 1. PATH环境变量.作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序.我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好 PATH变量后,就可以在任何目录下执行javac/java等工具了. 2. CLASSPATH环境变量.作用是指定类搜索路径