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池。

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

  1. vim/etc/systemd/system/openhpid.service
  2. [Unit]
  3. Description=DaemonprovidingaccesstotheSAFHardwarePlatformInterface
  4. [Service]
  5. Type=simple
  6. ExecStart=/usr/sbin/openhpid-n-c/etc/openhpi/openhpi.conf
  7. [Install]
  8. WantedBy=multi-user.target

一、准备工作

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

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

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

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

二、配置heartbeat

1、配置文件

  1. cd/etc/ha.d
  2. vimauthkeys
  3. auth11crc
  4. #2sha1HI!
  5. #3md5Hello!
  1. #---------------------heartbeat主配置文件----------------------
  2. vimha.cf
  3. debugfile/var/log/ha-debug
  4. logfile/var/log/ha-log
  5. logfacilitylocal0
  6. #心跳间隔
  7. keepalive2
  8. #死亡阀值
  9. deadtime30
  10. #警告时间
  11. warntime10
  12. #首次启动heartbeat,等待多久才启动主服务资源
  13. initdead30
  14. #连接端口
  15. udpport694
  16. #心跳线接口
  17. #bcasteth1
  18. #主节点的网卡设备、备份机的心跳线接口IP
  19. ucasteth0192.168.180.223
  20. #自动切换还是关掉好
  21. auto_failbackoff
  22. nodeelink-master
  23. nodeelink-slave
  24. #ping192.168.180.1
  25. respawnhacluster/usr/lib/heartbeat/ipfail
  26. apiauthipfailgid=haclientuid=hacluster
  1. #----------------------VIP资源控制文件----------------------
  2. vimharesources
  3. elink-masterIPaddr::192.168.180.221/32/eth0elinkresource.sh
  1. #---资源控制脚本,如果主机已经拿到资源,备机就算启动heartbeat也不会启动下面的脚本----
  2. cdresource.d
  3. vimelinkresource.sh
  4. isPid()
  5. {
  6. pid_result=`ps-ef|grep$1|awk'{if($8!~/grep/)print$2}'`
  7. echo$1'的进程号:'$pid_result
  8. if[-n"$pid_result"];then
  9. return1
  10. else
  11. return0
  12. fi
  13. }
  14. start(){
  15. echo"***************************startPGHA******************************"
  16. isPidpostmaster
  17. if[$?-eq0];then
  18. /etc/init.d/postgresqlstart
  19. else
  20. echo'postgresql已经有进程,无需再次启动'
  21. fi
  22. isPidpgpool.conf
  23. if[$?-eq0];then
  24. pgpool-f/usr/local/etc/pgpool.conf-F/usr/local/etc/pcp.conf-D
  25. else
  26. echo'pgpool已经有进程,无需再次启动'
  27. fi
  28. #pg_master_process_result=`ssh-lroot192.168.180.222"ps-ef|greppostmaster|grep-vgrep"`
  29. key_result=`su-postgres-c"pg_controldata|grepcluster|grep'archiverecovery'"`
  30. if[-n"$key_result"];then
  31. su-postgres-c"pg_ctlpromote"
  32. else
  33. echo'此服务器不是备机无法promote为主机!!!'
  34. fi
  35. isPidsleep
  36. if[$?-eq0];then
  37. /opt/monitorpg.sh&
  38. else
  39. echo'sleep监控进程已经存在无需再次启动'
  40. fi
  41. }
  42.  
  43. stop(){
  44. echo"****************************stopPGHA*****************************"
  45. #sleep_result=`ps-ef|grep'sleep30'|awk'{if($8!~/grep/)print$3}'`
  46. #kill-9$sleep_result
  47. pgpool-f/usr/local/etc/pgpool.conf-F/usr/local/etc/pcp.conf-D-mfaststop
  48. /etc/init.d/postgresqlstop
  49. mv/usr/local/pgsql/data/recovery.done/usr/local/pgsql/data/recovery.conf
  50. }
  51.  
  52. case$1in
  53. start)
  54. start
  55. ;;
  56. stop)
  57. stop
  58. ;;
  59. restart)
  60. stop
  61. sleep10
  62. start
  63. ;;
  64. *)
  65. echo"Usage:$0{start|stop|restart}"
  66. esac

2、业务监控脚本

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

  1. monitor(){
  2. result=`/usr/local/pgsql/bin/psql-h192.168.180.222-p5432-Upostgres-w-dpostgres--command"select1"|sed-n3p|cut-c9-9`
  3. #echo$result
  4. if[1-eq"$result"];then
  5. echo`date`"数据库正常,检测值:"$result>>/opt/moni.log
  6. else
  7. echo`date`"数据库挂了,检测值:"$result>>/opt/moni.log
  8. serviceheartbeatstop
  9. break
  10. fi
  11. }
  12. whilesleep10
  13. do
  14. monitor
  15. 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,不然启动会报错

猜你在找的Postgre SQL相关文章