一、RHCS

  RHCS是Red Hat Cluster Suite(红帽子集群套件)的缩写。RHCS是一个功能完备的集群应用解决方案,它从应用的前端访问到后端的数据存储都提供了一个行之有效的集群架构实现,不但能保证前端应用持久、稳定的提供服务,同时也保证了后端数据存储的安全。RHCS提供了集群系统中三种集群构架:高可用性集群、负载均衡集群、存储集群

RHCS提供的三个核心功能

  高可用集群是RHCS的核心功能。当应用程序出现故障,或者系统硬件、网络出现故障时,应用可以通过RHCS提供的高可用**管理组件自动、快速从一个节点切换到另一个节点,节点故障转移功能对客户端来说是透明的,从而保证应用持续、不间断的对外提供服务。

  RHCS通过LVS(Linux Virtual Server)来提供负载均衡集群。通过LVS的负载调度功能,可以将客户端请求平均的分配到各个服务节点,同时,LVS还提供了服务节点故障转移功能,当某个服务节点不能提供服务时,LVS会自动屏蔽这个故障节点,并从集群中剔除,同时将新来此节点的请求平滑的转移到其它正常节点上来;而当此故障节点恢复正常后,LVS又会自动将此节点加入到集群中去。这一系列切换动作,对用户来说都是透明的。

  RHCS通过GFS(Global File System)分布式文件系统来提供存储集群功能,它允许多个服务同时去读写一个单一的共享文件系统,存储集群通过将共享数据放到一个共享文件系统中从而消除了在应用程序间同步数据的麻烦。

RHCS集群架构

图1.1是红帽官方给出的集群架构,每台集群里的计算机配置2个网卡,分别连接外网的交换机和内网的交换机,存储部分由统一的光纤交换机接入存储设备。

图1.2则是集群的工作模式,其中node1和node2共同跑的是service1 ,node3和node4跑的是service2,各个node由fencing device来进行管理。

二、     源码安装Apache Qpid

  由于C++ Broker性能较Java Broker强,同时支持HA集群和Federation,故我们选择C++版本的Qpid Broker。目前最新版本为0.32。Qpid 采用 Corosync 作为通信层,利用 Corosync,集群中的每一个 broker 都采用组播通信将自己的状态同步给集群中的其他 broker。

  Qpid 和 RHCS 紧密集成,它可以采用 CMAN 防止集群中的“脑裂”问题,也可以使用 rgmanager 自动重启 failed 的 Qpid。当然,不一定非要使用 RHCS 来搭建您的集群,也可以使用其他的 CRM 集群管理软件来管理 Qpidd。Qpidd 本身只是使用了 Corosync 来完成同步通信,可以使用 CMAN 来防止“脑裂”问题。

  1、从官网下载qpid-cpp-0.32.tar.gz、qpid-python-0.32.tar.gz和qpid-tools-0.32.tar.gz。

[root@node2 Downloads]# ll

total 2396

-rwxr--r--. 1 root root 2226863 Jun 15 18:24 qpid-cpp-0.32.tar.gz

-rwxr--r--. 1 root root  161339 Jun 15 18:24 qpid-python-0.32.tar.gz

-rwxr--r--. 1 root root   60695 Jun 15 18:24 qpid-tools-0.32.tar.gz

[root@node2 Downloads]# tar xvf qpid-cpp-0.32.tar.gz

[root@node2 Downloads]# cd qpid-cpp-0.32

  2、查看INSTALL文档可知,先安装依赖库(部分可选的,这里为了方便,全部安装)

[root@node2 qpid-cpp-0.32]# yum -y install cmake boost-devel libuuid-devel pkgconfig gcc-c++ make ruby help2man doxygen graphviz cyrus-sasl-devel nss-devel nspr-devel xqilla-devel xerces-c-devel ruby ruby-devel swig libdb-cxx-devel libaio-devel db4-devel

  3、Qpid是用cmake来管理的。在这里只需要编译release版本,新建一个BLD-opt文件夹。

[root@node2 qpid-cpp-0.32]# mkdir BLD-opt

[root@node2 qpid-cpp-0.32]# cd BLD-opt

[root@node2 BLD-opt]# cmake
-DCMAKE_BUILD_TYPE=Release ..

[root@node2 BLD-opt]# make all –j4

……

Linking CXX executable server_reconnect

[100%] Built target server_reconnect

Scanning dependencies of target spout

[100%] Building CXX object
examples/messaging/CMakeFiles/spout.dir/spout.o

[100%] Building CXX object
examples/messaging/CMakeFiles/spout.dir/OptionParser.o

Linking CXX executable spout

[100%] Built target spout

[root@node2 BLD-opt]#

  4、执行安装,默认的安装目录为/usr/local/

[root@node2 BLD-opt]# make install

[root@node2 BLD-opt]# qpidd -v

qpidd (qpid-cpp) version 0.32

在这里,说明已经Apache
Qpid安装成功。

  5、再分别安装qpid-python-0.32、qpid-tools-0.32和qpid-qmf-0.32工具包。

[root@node2 Downloads]# tar xvf qpid-python-0.32.tar.gz

[root@node2 Downloads]# cd qpid-python-0.32

[root@node2 qpid-python-0.32]# ./setup.py build

[root@node2 qpid-python-0.32]# ./setup.py install --record
install_log

 

[root@node2 Downloads]# tar xvf qpid-tools-0.32.tar.gz

[root@node2 Downloads]# cd qpid-tools-0.32

[root@node2 qpid-tools-0.32]# ./setup.py build

[root@node2 qpid-tools-0.32]# ./setup.py install --record
install_log

注意,其中install_log是方便卸载而记录安装过程而用的。

  6、修改HA集群所需要的配置文件

[root@node2 Downloads]# vim /usr/local/etc/qpid/qpidd.conf

目前为了方便测试,需要关闭认证。配置如下:

auth=0

ha-cluster=yes

ha-brokers-url= node1.example.com,node2.example.com

  7、分别修改qpidd和qpidd-primary脚本

[root@node2
Downloads]# vim /usr/local/etc/rc.d/init.d/qpidd

[root@node2 Downloads]# vim /usr/local/etc/rc.d/init.d/qpidd-primary

分别将

QPID_HA=/usr/local/bin/qpid-ha

修改为:

QPID_HA=/usr/bin/qpid-ha

保存

  8、添加用户qpidd,并赋予root权限。

[root@node2 Downloads]# useradd qpidd

修改 /etc/passwd 文件,找到如下的一行,把用户ID修改为 0(这个方法其实并不推荐)

[root@node2 Downloads]# vim /etc/passwd

qpidd:x:501:501::/home/qpidd:/bin/bash

修改为:

qpidd:x:0:501::/home/qpidd:/bin/bash

保存即可

  9、最后新建一个目录/var/lib/qpidd

[root@node2 Downloads]# mkdir /var/lib/qpidd

三、    
实现Apache Qpid高可用集群

  RHCS提供了多种集群配置和管理工具,常用的有基于GUI的system-config-cluster和基于web的Conga(luci+ricci)等。在这里我们采用Conga。因为Qpid每个节点服务的存储空间是独立的,所以这里不需要实现共享储存GFS+ISCSI。使用到的RHCS套件的工具主要包括luci、ricci、cman、rgmanager和fence等等。

操作系统:Centos
6.5 i386(Microsoft windows
7 旗舰版 64位+ vmware workstation 10)

由于机器性能有限,Qpid主服务和RHCS管理端共用一台主机。

主机名

IP地址

主要用途

虚拟IP

所需软件

node1.example.com

192.168.15.16

Qpid主服务+RHCS管理端

192.168.15.30

luci+ricci+cman+rgmanager

node2.example.com

192.168.15.69

Qpid备用服务

ricci+cman+rgmanager

  1、修改管理主机和每个节点的hosts文件,为每个节点主机名增加域名表示,保证所有主要的hosts文件一样

[root@node1 ~]# cat /etc/hosts

127.0.0.1   localhost
localhost.localdomain

::1         localhost
localhost.localdomain

192.168.15.16     node1.example.com

192.168.15.69     node2.example.com

[root@node1 ~]# scp /etc/hosts 
root@192.168.15.69:/etc/hosts

  2、每个节点上分别关闭selinux、iptables和NetworkManager

[root@node1 ~]# iptables -F

[root@node1 ~]# service iptables stop

iptables: Setting chains to policy ACCEPT: nat mangle
filte [  OK  ]

iptables: Flushing firewall rules:                       [  OK  ]

iptables: Unloading modules:                            [ 
OK  ]

[root@node1 ~]# chkconfig iptables off

[root@node1 ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/g'
/etc/selinux/config

[root@node1 ~]# setenforce 0

[root@node1 ~]# service NetworkManager stop

Stopping NetworkManager daemon:                [  OK  ]

[root@node1 ~]# chkconfig NetworkManager off

  3、在每个节点分别安装ricci、rgmanager、cman,并配置开机自动启动

[root@node1 ~]# yum -y install ricci rgmanager cman

[root@node1 ~]# chkconfig ricci on

[root@node1 ~]# chkconfig rgmanager on

[root@node1 ~]# chkconfig cman on

  4、在每个节点分别启动ricci,并设置用于luci连接的认证密码,帐号默认为系统用户名

[root@node1 ~]# service ricci start

Starting ricci:                                           
[  OK  ]

[root@node1 ~]# passwd ricci

Changing password for user ricci.

New password:

BAD PASSWORD: it is too simplistic/systematic

Retype new password:

passwd: all authentication tokens updated successfully.

  5、在管理端安装luci并启用luci

[root@node1 ~]# yum -y install luci

[root@node1 ~]# chkconfig luci on

[root@node1 ~]# service luci start

Start luci...                                             
[  OK  ]

Point your web browser to https://node1.example.com:8084 (or
equivalent) to access luci

  6、集群配置文件内容

集群文件当然可以手动配置生成。也可以通过配置工具自动生成,这就需要按照下面的步骤通过luci配置工具的使用生成下面内容的配置文件。

<?xml version="1.0"?>

<cluster config_version="36"
name="qpid-test">

       
<clusternodes>

               
<clusternode name="node1.example.com"
nodeid="1"/>

               
<clusternode name="node2.example.com"
nodeid="2"/>

       
</clusternodes>

        <cman
expected_votes="1" two_node="1"/>

        <rm>

               
<failoverdomains>

                       
<failoverdomain name="node1-domain" ordered="1"
restricted="1">

                               
<failoverdomainnode name="node1.example.com"
priority="1"/>

                        </failoverdomain>

                       
<failoverdomain name="node2-domain" ordered="1"
restricted="1">

                               
<failoverdomainnode name="node2.example.com"
priority="1"/>

                       
</failoverdomain>

                </failoverdomains>

               
<resources>

                       
<ip address="192.168.15.100/24"
sleeptime="10"/>

                       
<script file="/usr/local/etc/rc.d/init.d/qpidd"
name="qpidd"/>

                       
<script file="/usr/local/etc/rc.d/init.d/qpidd-primary"
name="qpidd-primary"/>

               
</resources>

               
<service autostart="0" domain="node1-domain"
name="node1-qpidd-service" recovery="restart">

                       
<script ref="qpidd"/>

                </service>

               
<service autostart="0" domain="node2-domain"
name="node2-qpidd-service" recovery="restart">

                       
<script ref="qpidd"/>

               
</service>

               
<service autostart="0" name="qpidd-primary-service"
recovery="relocate">

                       
<ip ref="192.168.15.100/24"/>

                       
<script ref="qpidd-primary"/>

               
</service>

        </rm>

</cluster>

 

  7、集群web管理界面配置

通过浏览器访问https://192.168.15.16:8084/,就可以打开luci登录界面。现在就通过配置工具来生成上面的配置文件。

浏览器打开https://192.168.15.16:8084 输入root和root密码进行登陆。

创建集群

node name就hosts定义的名字,其中password为刚才设置ricci的密码,ricci端口保持默认。

因为之前在两个节点上都安装了ricci、cman、rgmanager等包,故勾选use locally installed package和Reboot Nodes Before Joining Cluster。因为没有用到GFS,所以不用勾选enable
shared storage support。

点击Create
Cluster,创建过程luci管理端正在为ricci的HA节点上自动检查和安装所需要的包,安装完会自动重启。

重启完后,再次进入luci界面,可以发现,每个节点都已经成功连接加入集群。

创建故障转移域

分别为两个Qpid服务单独创建故障转移域

创建资源

创建Qpid的启动脚本qpidd,路径为 /usr/local/etc/rc.d/init.d/qpidd

创建Qpid的启动脚本qpidd-primary,路径为 /usr/local/etc/rc.d/init.d/qpidd-primary

创建IP地址资源,用作对外服务的虚拟IP地址(注意:这里一定要填写没有被使用的空闲IP地址),这里用192.168.15.100/24

创建服务组

分别为每个Qpid服务节点node1和node2创建服务服node1-qpidd-service和node2-qpidd-service,勾选Automatically Start This Service, 故障转移域选择分别对应的node1-domain和node2-domain,Recovery Policy选择Restart,并分别添加脚本资源qpidd

创建qpidd-primary服务组,勾选Automatically Start This
Service, 故障转移域选None,Recovery Policy选择Relocate,并添加脚本资源qpidd-primary和IP地址资源192.168.16.100/24,最后提交。

fence设备在实机环境下需要配置,vmware虚拟机可以暂时不需要。

最后,三个服务组正常启动。至此,Apache Qpid 高可用集群部署已经完成。

测试:

从luci界面看到,目前node2节点处理active状态,node1为ready/standby状态。使用qpid的命令行工具测试一下虚拟IP 192.168.15.100是否正常工作。

然后关闭node2节点主机,模拟宕机,可以见到node1会自动切换为active状态。

这时候,再次使用命令行工具测试一下虚拟IP是否正常工作。

这说明HA集群内部切换服务主机,对客户端来说是完全透明的。

Apache Qpid 高可用集群的更多相关文章

  1. Apache httpd和JBoss构建高可用集群环境

    1. 前言 集群是指把不同的服务器集中在一起,组成一个服务器集合,这个集合给客户端提供一个虚拟的平台,使客户端在不知道服务器集合结构的情况下对这一服务器集合进行部署应用.获取服务等操作.集群是企业应用 ...

  2. linux系统下对网站实施负载均衡+高可用集群需要考虑的几点

    随着linux系统的成熟和广泛普及,linux运维技术越来越受到企业的关注和追捧.在一些中小企业,尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案. 那么如何实 ...

  3. Linux企业集群用商用硬件和免费软件构建高可用集群PDF

    Linux企业集群:用商用硬件和免费软件构建高可用集群 目录: 译者序致谢前言绪论第一部分 集群资源 第1章 启动服务 第2章 处理数据包 第3章 编译内容 第二部分 高可用性 第4章 使用rsync ...

  4. 分布式架构高可用架构篇_02_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试

    参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...

  5. Spark高可用集群搭建

    Spark高可用集群搭建 node1    node2    node3   1.node1修改spark-env.sh,注释掉hadoop(就不用开启Hadoop集群了),添加如下语句 export ...

  6. activemq+Zookeper高可用集群方案配置

    在高并发.对稳定性要求极高的系统中,高可用的是必不可少的,当然ActiveMQ也有自己的集群方案.从ActiveMQ 5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式 ...

  7. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...

  8. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  9. Flink的高可用集群环境

    Flink的高可用集群环境 Flink简介 Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布,数据通信以及容错机制等功能. 因现在主要Flink这一块做先关方面的学习, ...

随机推荐

  1. STM32F407 DAC 个人笔记

    DAC框图 VDDA:模拟电源输入 VSSAL:模拟电源接地输入 Vref+:正模拟参考电压输入 -------------- DORx:输入数字寄存器 DAC_OUT:模拟输出通道 DAC_OUT1 ...

  2. java编程思想阅读记录

    第五章:初始化与清理 1.构造器确保初始化 构造器采用与类名相同的方法. 创建对象时,将会为对象分配存储空间,并调用相应的构造器.这就确保了在你能操作对象之前,它就已经恰当的被初始化了. 垃圾回收器负 ...

  3. Leetcode 336.回文对

    回文对 给定一组唯一的单词, 找出所有不同 的索引对(i, j),使得列表中的两个单词, words[i] + words[j] ,可拼接成回文串. 示例 1: 输入: ["abcd&quo ...

  4. Laya List翻页滚动方案 & List滚动源码解析

    Laya List翻页滚动方案 & List滚动源码解析 @author ixenos 2019-03-29 1.List翻页滚动方案 /** * 计算下一页的起始索引, 不足时补足 * @p ...

  5. CodeForces contest/776 A+B+C题解

    ICM Technex 2017 and Codeforces Round #400 (Div. 1 +Div.2,combined) A. A Serial Killer 谜一样的题意:每天从两个人 ...

  6. chef cookbook 实战

    在Workstation中创建cookbook,并且上传到Chef server,以及其他与Chef相关的工作. 安装chef client命令 knife bootstrap 10.6.1.207 ...

  7. Python入门--番外--中文目录乱码问题

    写Python的程序,读取含有中文目录下的文件,结果发现根本读取不了该中文目录下的文件, 原因:通过调试发现:该文件的目录乱码,目录无法解析,自然导致无法读取文件内容 解决方法: strPath = ...

  8. jquery.fullPage.js全屏滚动插件

    注:本文内容复制于http://www.51xuediannao.com/js/jquery/jquery.fullPage.html 和 http://www.360doc.com/content/ ...

  9. Iass、Pass、SasS三种云服务区别?

    Iass.Pass.SasS三种云服务区别 我们可以把云计算理解成一栋大楼,而这栋楼又可以分为顶楼.中间.低层三大块.那么我们就可以把Iass(基础设施).Pass(平台).Sass(软件)理解成这栋 ...

  10. T2038 香甜的黄油 codevs

    http://codevs.cn/problem/2038/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond   题目描述 Description 农夫John ...