1、背景html
ibmmq是一种传统架构的mq产品,运行稳定,有其自身优势,但在高可用(HA)这一块须要使用公司根据自身需求选用高可用(HA)产品,但因为市面HA商业产品较贵,因此使用linux操做系统级的heartbeat产品是最廉价合适的。关于ibmmq网络共享存储的选用有不少,最贴近生产环境的是ISCSI协议的存储,因此使用ISCSI作为mq服务器共享存储(下文有一点存储方面的知识)。node
部署架构图:linux
2、解决思路服务器
一、搭建共享存储环境;网络
二、安装heartbeat;架构
三、安装mq软件;并发
四、相关脚本补齐;运维
五、测试tcp
3、使用技术栈及版本布局
一、linux版本:redhat6.7
二、共享存储,iscsi
Target版本:scsi-target-utils-1.0.24-18.el6.x86_64
Initiator版本:iscsi-initiator-utils-6.2.0.873-27.el6_9.x86_64
网络共享存储介绍:按照网络结构分:扫盲文章:http://www.ptyqm.com/19026.html
根据生产环境状况,只考虑两种共享存储实现
1)NAS:网络附加存储,NFS共享存储实现简单,方便使用,以文件系统的形式被使用,由于是以文件系统的方式提供,因此在数据传输速度上比较慢;
2)IP-SAN:IP存储经过TCP/IP协议实现,目前主要实现的协议有:iscsi(Internet Small Computer System Interface),能够在虚拟机实现,且贴近生产环境。
iscsi:一种文件块级别的协议,传输速度较快,经过tcp/ip共享存储设备。能够将本地磁盘作成lvm(逻辑卷管理),是在linux中对磁盘的分区的一种管理机制,是在磁盘分区和文件系统之间增长了一个逻辑层,为文件系统屏蔽磁盘分区布局,优势在于能够随时调节逻辑卷,增长或者减小空间。
iscsi在使用中区分为target端和initiator端,target端即为提供存储端,initiator端为使用网络存储端。
target和initiator端分别安装各类软件便可,安装好便可经过配置和命令使用。方便之处在于在initiator端看到的网络存储只至关于本地的一块磁盘,例如/dev/sdb,剩下的只需格式化后便可使用。
参考译文:https://linux.cn/article-4971-1.html
其后几篇都很是详细的介绍了iscsi的使用,原版英文在:https://www.tecmint.com/create-centralized-secure-storage-using-iscsi-targetin-linux/
都是良心好文。
三、高可用软件heartbeat
heartbeat软件是linux提供的,但须要单独安装的。安装在有需求的节点上便可。
这个软件能够将某一个网卡,例如eth0,虚拟一个ip对外提供,这个vip也是heartbeat中的resource,须要master和salve彼此使用。
这个软件能够经过心跳线(另外一块网卡如eth1)与本身的salve或者master发送心跳包,已检测对方是否active,心跳间隔和断定died时间均可在配置文件中配置。
这个软件也能够不经过心跳线来作ha,可是缺点在于可能会产生脑裂现象,尤为在网络状况很差的状况下。
这里注意,心跳包是经过udp协议进行发送的,惊喜之处在于heartbeat不只名字好听,并且不只能够实现unicast,multicast还有broadcast也能够作,这样就能够经过这种方式实现集群的ha方案,这里先mark一下,有须要再进行研究。
heartbeat在使用时会有不少坑,下文会提。
推荐好文:http://www.javashuo.com/article/p-mzdcguhl-bh.html
版本:heartbeat-3.0.4-2.el6.x86_64
固然在安装时不止这一个包,下文会提其余的包。
4、难点
一、搭建iscsi困难,对linux磁盘和存储关系及命令不熟悉;
二、安装软件缺依赖严重,生产环境为内网环境,必须将全部rpm下载齐全才可安装;
三、对于heartbeat原理的不熟知,不知道vip在其中是如何被使用的,且不知其切换过程;
四、在heartbeat主备软件切换时,关于脚本的书写不熟悉。
5、时间点预估
一、一天研究iscsi存储及其实现和基本原理,并搭建其环境,测试完成(侧重使用);
二、一天研究heartbeat安装过程,了解其原理,安装mq软件尝试配置;
三、一天测试heartbeat,观察其异常现象并分析解决;
四、总结实现过程,为上线准备安装包,梳理流程。
6、虚拟机实现
一、在LVM服务器配置iscsi的target服务器配置lvm以及配置target服务器的配置文件,使其本地lvm发布至网络;共享存储大小配置为10G;
本地建立好的lvm:
target服务器的/etc/tgt/targets.conf配置
再次检查iscsi的target服务器的对外发布状况
二、在MQMaster和MQSalve服务器安装iscsi的initiator并发现target服务的共享lvm,这里的坑在于target端的认证必定要齐。
在login到target服务器后,之后再次重启linux系统,均可以直接login到target上。
当login以后,能够在在本地磁盘上看到新的一块盘:
以后只须要给sdb建立一个新的分区,而后对新建立的分区进行格式化,就能够将存储mount到本地的任意一个目录之上了,从而和正常的文件系统一致,进行使用。
那么对于MQSalve而言,由于在MQMaster之上进行了对sdb建立分区的操做,那么在MQSalve上使用iscsi的话,须要进行对于sdb的格式化,而后mount操做便可。
这里通过屡次实验,最好不要将共享网络存储同时mount在两个主备节点之上,目前会发现出现数据错误的状况,甚至会出现整个文件系统没法正常使用的状况。
三、在MQMaster和MQSalve分别安装mq软件;
四、安装heartbeat软件,在MQMaster和MQSalve上;
关于安装heartbeat,由于考虑生产环境为内网环境,无互联网接入,那么安装rpm包的依赖问题就成了大问题,这是一个极大的坑。
目前采用了先将软件包经过yum方式将全部的rpm包下载到了本地,而后拿出来进行整个目录rpm的安装。这里使用的小技巧为:
heartbeat软件分红了三个小项目,直接yum下载是不能够的。
yum install yum-plugin-downloadonly
这样就将全部的rpm下载了下来,到时候能够直接取到正式环境安装,若是再有关联短缺,那么能够经过一样方式进行下载其余相关rpm,这种方式总比去一个一个地找rpm要方便,尤为在没有运维的状况之下。
安装:
rpm -ivh ./rpms/*
五、配置heartbeat软件并踩坑。
安装好heartbeat软件后,其会默认在/etc下建立目录:ha.d
这时本身必须将3个配置文件:如上图红框,找到后cp过来。。。
天坑1:authkeys文件的权限只能是600,不然heartbeat一直会不停地报错,不知是heartbeat版本问题仍是其余。。。
天坑2:本身写的脚本必须放在resource.d这个目录之下,进去后还会发现不少服务的相关脚本,这一点也没官方提示,找了半天。。。
关于authkeys这个文件的配置网上一拉一大把,随便拽一个,master和salve一致就能够用,可是必须是:
关于haresource文件的配置,哈,ha的资源文件:文件中提供了不少配置的说明,截取一段:
根据翻译,依照空格进行separate,第一位提供服务的域名,这点是小坑,注意必定要在hosts中增长域名配置,不然不生效。。。报错。。。第二是服务的ip地址能够有多个,能够指定网卡和默认的子网掩码,能够广播地址,最后是执行的脚本。。。
个人配置:MQMaster 192.168.0.208/24/eth0 mq,第一为主节点的名字,第二为vip和子网掩码以及指定vip的网卡,最后是个人脚本mq,这样配置主从节点必须一致,但在官方指导中,有这样一句话:
#They must match the names of the nodes listed in ha.cf, which in turn
# must match the `uname -n` of some node in the cluster. So they aren't
# virtual in any sense of the word.
主节点的名字hostname,必须在另外一个配置文件ha.cf中出现,且指定出现的属性项为:node MQMaster,不然VIP会失败~
这里使用heartbeat注意,不须要先行建立VIP,heartbeat会自行根据haresource中的资源配置进行相应网卡的VIP建立,在heartbeat软件的认知中,VIP是一种及其重要的资源:启动heartbeat master后:
后文在日志中也能够看到heartbeat的启动过程。
关于ha.cf的配置:
这就比较简单了,完过后,经过service heartbeat stop/restart/start进行对服务的操做便可,此服务随操做系统启动,但据测试,坑的地方在于,有时候只启动master机器,它并不会拿来资源,而heartbeat服务倒是运行状态,须要手动重启一下服务才能够。。。
六、分析heartbeat日志文件。
完成一次切换的过程大体就如日志所示,将MQMaster换成MQSalve就变得一致了。
七、测试heartbeat,获得测试结果。
很少讲解,惟一发如今网络环境很差的状况下,会常常发生脑裂的现象。。。恶略的结果就是损害网络存储。。。故心跳线是必须怼的。。。而且必须是直插。。。不能走交换机,不靠谱,不然一旦损毁存储,那么应用软件都得从新安装,事情是小,重点是。。。数据没了。。。因此共享存储作raid10也很重要。。。
7、致谢
感谢外公司两位同事以前的探究并提供了heartbeat的解决思路和mq软件的脚本。
感谢文章中的好文和一些网络文章,受益良多。