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

前端之家收集整理的这篇文章主要介绍了debian8下配置postgresql9.5.2、pgpool3.5.2、heartbeat3.0.5的HA热备前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

vim/etc/systemd/system/openhpid.service
[Unit]
Description=DaemonprovidingaccesstotheSAFHardwarePlatformInterface
[Service]
Type=simple
ExecStart=/usr/sbin/openhpid-n-c/etc/openhpi/openhpi.conf
[Install]
WantedBy=multi-user.target

一、准备工作@H_502_1@

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

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

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

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

二、配置heartbeat@H_502_1@

1、配置文件@H_502_1@

cd/etc/ha.d
vimauthkeys
auth11crc
#2sha1HI!
#3md5Hello!
#---------------------heartbeat主配置文件----------------------
vimha.cf
debugfile/var/log/ha-debug
logfile/var/log/ha-log
logfacilitylocal0
#心跳间隔
keepalive2
#死亡阀值
deadtime30
#警告时间
warntime10
#首次启动heartbeat,等待多久才启动主服务资源
initdead30
#连接端口
udpport694
#心跳线接口
#bcasteth1
#主节点的网卡设备、备份机的心跳线接口IP
ucasteth0192.168.180.223
#自动切换还是关掉好
auto_failbackoff
nodeelink-master
nodeelink-slave
#ping192.168.180.1
respawnhacluster/usr/lib/heartbeat/ipfail
apiauthipfailgid=haclientuid=hacluster
#----------------------VIP资源控制文件----------------------
vimharesources
elink-masterIPaddr::192.168.180.221/32/eth0elinkresource.sh
#---资源控制脚本,如果主机已经拿到资源,备机就算启动heartbeat也不会启动下面的脚本----
cdresource.d
vimelinkresource.sh
isPid()
{
pid_result=`ps-ef|grep$1|awk'{if($8!~/grep/)print$2}'`
echo$1'的进程号:'$pid_result
if[-n"$pid_result"];then
return1
else
return0
fi
}
start(){
echo"***************************startPGHA******************************"
isPidpostmaster
if[$?-eq0];then
/etc/init.d/postgresqlstart
else
echo'postgresql已经有进程,无需再次启动'
fi
isPidpgpool.conf
if[$?-eq0];then
pgpool-f/usr/local/etc/pgpool.conf-F/usr/local/etc/pcp.conf-D
else
echo'pgpool已经有进程,无需再次启动'
fi
#pg_master_process_result=`ssh-lroot192.168.180.222"ps-ef|greppostmaster|grep-vgrep"`
key_result=`su-postgres-c"pg_controldata|grepcluster|grep'archiverecovery'"`
if[-n"$key_result"];then
su-postgres-c"pg_ctlpromote"
else
echo'此服务器不是备机无法promote为主机!!!'
fi
isPidsleep
if[$?-eq0];then
/opt/monitorpg.sh&
else
echo'sleep监控进程已经存在无需再次启动'
fi
}

stop(){
echo"****************************stopPGHA*****************************"
#sleep_result=`ps-ef|grep'sleep30'|awk'{if($8!~/grep/)print$3}'`
#kill-9$sleep_result
pgpool-f/usr/local/etc/pgpool.conf-F/usr/local/etc/pcp.conf-D-mfaststop
/etc/init.d/postgresqlstop
mv/usr/local/pgsql/data/recovery.done/usr/local/pgsql/data/recovery.conf
}

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

2、业务监控脚本@H_502_1@

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

monitor(){
result=`/usr/local/pgsql/bin/psql-h192.168.180.222-p5432-Upostgres-w-dpostgres--command"select1"|sed-n3p|cut-c9-9`
#echo$result
if[1-eq"$result"];then
echo`date`"数据库正常,检测值:"$result>>/opt/moni.log
else
echo`date`"数据库挂了,检测值:"$result>>/opt/moni.log
serviceheartbeatstop
break
fi
}
whilesleep10
do
monitor
done

3、测试@H_502_1@

目前主要有三类测试,@H_502_1@

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

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

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

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

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

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

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

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

猜你在找的Postgre SQL相关文章