一、背景

  ibmmq是一种传统架构的mq产品,运行稳定,有其自身优点,但在高可用(HA)这一块需要使用公司根据自身需求选用高可用(HA)产品,但由于市面HA商业产品较贵,所以使用linux操作系统级的heartbeat产品是最廉价合适的。关于ibmmq网络共享存储的选用有很多,最贴近生产环境的是ISCSI协议的存储,所以使用ISCSI做为mq服务器共享存储(下文有一点存储方面的知识)。

部署架构图:

二、解决思路

  1、搭建共享存储环境;

   2、安装heartbeat;

   3、安装mq软件;

   4、相关脚本补齐;

   5、测试

三、使用技术栈及版本

  1、linux版本:redhat6.7

   2、共享存储,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/

   都是良心好文。

   3、高可用软件heartbeat

   heartbeat软件是linux提供的,但需要单独安装的。安装在有需求的节点上即可。

   这个软件可以将某一个网卡,例如eth0,虚拟一个ip对外提供,这个vip也是heartbeat中的resource,需要master和salve彼此使用。

   这个软件可以通过心跳线(另一块网卡如eth1)与自己的salve或者master发送心跳包,已检测对方是否active,心跳间隔和判定died时间都可在配置文件中配置。

   这个软件也可以不通过心跳线来做ha,但是缺点在于可能会产生脑裂现象,尤其在网络情况不好的情况下。

   这里注意,心跳包是通过udp协议进行发送的,惊喜之处在于heartbeat不仅名字好听,而且不仅可以实现unicast,multicast还有broadcast也可以做,这样就可以通过这种方式实现集群的ha方案,这里先mark一下,有需要再进行研究。

   heartbeat在使用时会有很多坑,下文会提。

   推荐好文:https://www.cnblogs.com/zhanjindong/p/3618055.html

   版本:heartbeat-3.0.4-2.el6.x86_64

  当然在安装时不止这一个包,下文会提其他的包。

四、难点

  1、搭建iscsi困难,对linux磁盘和存储关系及命令不熟悉;

   2、安装软件缺依赖严重,生产环境为内网环境,必须将所有rpm下载齐全才可安装;

   3、对于heartbeat原理的不熟知,不知道vip在其中是如何被使用的,且不知其切换过程;

   4、在heartbeat主备软件切换时,关于脚本的书写不熟悉。

五、时间点预估

  1、一天研究iscsi存储及其实现和基本原理,并搭建其环境,测试完成(侧重使用);

   2、一天研究heartbeat安装过程,了解其原理,安装mq软件尝试配置;

   3、一天测试heartbeat,观察其异常现象并分析解决;

   4、总结实现过程,为上线准备安装包,梳理流程。

六、虚拟机实现

  1、在LVM服务器配置iscsi的target服务器配置lvm以及配置target服务器的配置文件,使其本地lvm发布至网络;共享存储大小配置为10G;

本地创建好的lvm:

target服务器的/etc/tgt/targets.conf配置

再次检查iscsi的target服务器的对外发布情况

   2、在MQMaster和MQSalve服务器安装iscsi的initiator并发现target服务的共享lvm,这里的坑在于target端的认证一定要齐。

在login到target服务器后,以后再次重启linux系统,都可以直接login到target上。

当login之后,可以在在本地磁盘上看到新的一块盘:

之后只需要给sdb创建一个新的分区,然后对新创建的分区进行格式化,就可以将存储mount到本地的任意一个目录之上了,从而和正常的文件系统一致,进行使用。

那么对于MQSalve而言,因为在MQMaster之上进行了对sdb创建分区的操作,那么在MQSalve上使用iscsi的话,需要进行对于sdb的格式化,然后mount操作即可。

这里经过多次实验,最好不要将共享网络存储同时mount在两个主备节点之上,目前会发现出现数据错误的情况,甚至会出现整个文件系统无法正常使用的情况。

   3、在MQMaster和MQSalve分别安装mq软件;

   4、安装heartbeat软件,在MQMaster和MQSalve上;

关于安装heartbeat,因为考虑生产环境为内网环境,无互联网接入,那么安装rpm包的依赖问题就成了大问题,这是一个极大的坑。

目前采用了先将软件包通过yum方式将所有的rpm包下载到了本地,然后拿出来进行整个目录rpm的安装。这里使用的小技巧为:

heartbeat软件分成了三个小项目,直接yum下载是不可以的。

yum install yum-plugin-downloadonly

这样就将所有的rpm下载了下来,到时候可以直接取到正式环境安装,如果再有关联短缺,那么可以通过同样方式进行下载其他相关rpm,这种方式总比去一个一个地找rpm要方便,尤其在没有运维的情况之下。

安装:

rpm -ivh ./rpms/*

   5、配置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服务却是运行状态,需要手动重启一下服务才可以。。。

   6、分析heartbeat日志文件。

完成一次切换的过程大致就如日志所示,将MQMaster换成MQSalve就变得一致了。

   7、测试heartbeat,得到测试结果。

不多讲解,唯一发现在网络环境不好的情况下,会经常发生脑裂的现象。。。恶略的结果就是损害网络存储。。。故心跳线是必须怼的。。。并且必须是直插。。。不能走交换机,不靠谱,否则一旦损毁存储,那么应用软件都得重新安装,事情是小,重点是。。。数据没了。。。所以共享存储做raid10也很重要。。。

  

七、致谢

   感谢外公司两位同事之前的探究并提供了heartbeat的解决思路和mq软件的脚本。

  感谢文章中的好文和一些网络文章,受益良多。

基于使用ISCSI存储的ibmmq通过heartbeat实现HA方案以及碰到的问题总结的更多相关文章

  1. 通过SCVMM分配iSCSI存储

    除了使用基于SMB3.0应用程序的文件共享外,还可以使用iSCSI目标服务器的SAN存储,然后在SCVMM控制台中添加基于SMI-S类型的存储,步骤如下: 1.将一台安装了 iSCSI目标 功能的Wi ...

  2. 通过Windows Server 2008 R2建立iSCSI存储

    名词解释:iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行 SCSI协议,使其能够在诸如高速千兆以太网上 ...

  3. linux下挂载ISCSI存储设备

    安装 首先要在存储设备上做好RAID,设置好iSCSI 目标方(target). 这里主要说明iSCSI initiator的安装. 不同的操作系统对应各自的iSCSI initiator,以Redh ...

  4. Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门

    Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门 转载请在文首保留原文出处:EMC中文支持论坛 - https://community.emc.com/go/chines ...

  5. 有了iscsi存储怎么让主机识别以及使用创建lvm

    1.查找安装包:rpm -ivh iscsi-initiator-utils去sf.net下载iscsitarget包make kernel,usr,install开启服务 (0)查看iscsi发现记 ...

  6. linux杂谈(十七):iscsi存储分离技术

    1.iscsi简单介绍 ​ ​iSCSI利用了TCP/IP的port 860 和 3260 作为沟通的渠道.透过两部计算机之间利用iSCSI的协议来交换SCSI命令,让计算机能够透过快速的局域网集线来 ...

  7. JavaScript系列-----对象基于哈希存储(<Key,Value>之Key篇) (1)

    1.Hash表的结构 首先,允许我们花一点时间来简单介绍hash表. 1.什么是hash表 hash表是一种二维结构,管理着一对对<Key,Value>这样的键值对,Hash表的结构如下图 ...

  8. JavaScript系列-----对象基于哈希存储(<Key,Value>之Value篇) (3)

    JavaScript系列-----Objectj基于哈希存储<Key,Value>之Value 1.问题提出 在JavaScript系列-----Object之基于Hash<Key, ...

  9. 腾讯云存储专家深度解读基于Ceph对象存储的混合云机制

    背景 毫无疑问,乘着云计算发展的东风,Ceph已经是当今最火热的软件定义存储开源项目.如下图所示,它在同一底层平台之上可以对外提供三种存储接口,分别是文件存储.对象存储以及块存储,本文主要关注的是对象 ...

随机推荐

  1. Unity3D中UGUI不使用DOTween制作渐隐渐现效果

    在做UI后期设计时,我们可能要对UI做一些特效,这篇文章我们来学习下如何在Unity3d中对实现渐隐渐现的效果, 首先我们看下Unity New UI即UGUI中渐隐渐现的做法. 观察我们会发现Uni ...

  2. ES6---面向对象上的简化

    一.ES6---面向对象上的简化 1.单个对象提供了2处简化: 1.1 如果对象的属性来自于对象外的变量,且变量名刚好和属性名相同.则不用写两遍相同的名字, 只要写一遍即可. 1.2 所有对象的方法, ...

  3. 你还不了解基于session的授权认证吗?

    前言 在漫长的开发过程中,权限认证是一个永恒不变的话题,随着技术的发展,从以前的基于sessionId的方式,变为如今的token方式.session常用于单体应用,后来由于微服务的兴起,分布式应用占 ...

  4. DPDK LPM库(学习笔记)

    1 LPM库 DPDK LPM库组件为32位的key实现了最长前缀匹配(LPM)表查找方法,该方法通常用于在IP转发应用程序中找到最佳路由匹配. 2 LPM API概述 LPM组件实例的主要配置参数是 ...

  5. python3.x 基础二:内置函数

    自带的函数可以非常简单快捷的实现某些功能, 比如产生一个序列,可以用循环实现: count = 0 while count < 10: print(count) count+=1 但其实用ran ...

  6. js中获取 table节点各tr及td的内容方法

    js中获取 table节点各tr及td的内容方法 分类: java基础2013-10-12 17:54 1055人阅读 评论(0) 收藏 举报 <table id="tb1" ...

  7. VMware如何克隆一个虚拟机

    如何在Vmware克隆一个虚拟机,并修改哪些配置. 克隆虚拟机步骤 其中模板虚拟机的安装部署可参见:「VMware安装Linux CentOS 7.7系统」 找到克隆的模板机,并选择克隆. 进入克隆虚 ...

  8. PAT-1135 Is It A Red-Black Tree(二叉查找树的创建和遍历)

    There is a kind of balanced binary search tree named red-black tree in the data structure. It has th ...

  9. 基于腾讯云搭建squid代理服务器

    本文主要介绍下在腾讯云上搭建squid代理服务器,用于访问国外网站或者为爬虫提供代理ip,以及简单介绍下如何基于腾讯云提供的SDK,批量开启或者销毁代理服务器实例. Squid是一个高性能的代理缓存服 ...

  10. Spring Boot在Docker上的部署

    一.准备工作 1.1 安装Docker环境 Docker 给旧版本的WIN系统提供的是Docker Toolbox下载(https://docs.docker.com/toolbox/overview ...