一、背景

  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. DRF视图组件

    DRF视图组件: CVB模式继承----五层 from django.views import View # Django的View from rest_framework.views import ...

  2. Mysql之Linux中mariadb主从复制

    master主机mysql安装配置 1.下载mariadb(Centos7开始mysql的名字) (1)其它方式(不推荐):rpm安装/软件源安装 (2)yum安装(推荐): ①centos官方的yu ...

  3. removebg抠图小工具

    由于比较简单,直接上代码(removebg接口官网),更多小工具获取 (1)官网API,需注册获取X-Api-Key:removebg_官网api.py import requests respons ...

  4. Liquibase使用小结

    简介 Liquibase是一个用于跟踪.管理和应用数据库变化的开源数据库重构工具.它将所有数据库的变化保存在XML文件中,便于版本控制和项目部署升级.在快速搭建项目的JHipster框架中集成了该工具 ...

  5. vue 实例化使用模板

    var vm = new Vue({ el:"", data:{ }, methods:{ } })

  6. 0521Day03命名规范 Data函数 可变长参数 枚举类型

    [重点] 命名规范 枚举类型 Date函数 可变长参数 pirnt,println 命名规范 1. 驼峰命名法:main,username,setUsername 用于变量.方法的命名 2. Pasc ...

  7. [Firefox附加组件]0003.弹出对话框

    Firefox中使用面板(panel)模块来显示弹出对话框,面板的内容通过HTML编写.你可以在面板上运行content script,尽管在面板里的脚本无法直接访问插件代码,但是你可以在面板脚本和插 ...

  8. PHP生成指定范围的日期

    /** * 生成指定范围的日期 * * @param $string $startDate 开始日期 2020-01-01 * @param $string $endDate 结束日期 2020-01 ...

  9. 此flash player与您的地区不相容——更换新版本edge后出现的问题

    最新切换到了edge浏览器,使用flash时提示:"此flash player与您的地区不相容",而chrome是没有问题的.网上找到解决方案,发现一个可以有效解决的方式,如下: ...

  10. Netty学习笔记(一) - 简介和组件设计

    在互联网发达的今天,网络已经深入到生活的方方面面,一个高效.性能可靠的网络通信已经成为一个重要的诉求,在Java方面需要寻求一种高性能网络编程的实践. 一.简介 当前JDK(本文使用的JDK 1.8) ...