如果在同一台机器上请参考

http://blog.csdn.net/liuyifeng1920/article/details/50233067
http://blog.csdn.net/zuolj/article/details/53186136

环境

[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
[root@node1 ~]# uname -r
3.10.0-229.el7.x86_64

关闭防火墙和SElinux

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0

安装包下载

链接:http://pan.baidu.com/s/1c32p2Y 密码:ejeq

以下操作是在其中一台上,其他两台按照如下配置即可

添加hosts信息

10.0.0.20 node1
10.0.0.21 node2
10.0.0.22 node3

安装Java 1.8

查看CentOS自带JDK是否已安装

[root@node1 ~]# yum list installed |grep java
java-1.6.0-openjdk.x86_64
java-1.6.0-openjdk-devel.x86_64
java-1.7.0-openjdk.x86_64
java-1.7.0-openjdk-devel.x86_64
tzdata-java.noarch 2015e-1.el6 @anaconda-CentOS-201508042137.x86_64

若有自带安装的JDK,卸载CentOS系统自带Java环境

[root@node1 ~]# yum -y remove java-1.7.0-openjdk*
[root@node1 ~]# yum -y remove java-1.6.0-openjdk*

卸载 tzdata-java

[root@node1 ~]# yum -y remove tzdata-java.noarch

上传jdk-8u131-linux-x64.rpm

[root@node1 ~]# rz  软件包的地址

解压

[root@node1 ~]# rpm -ivh jdk-8u131-linux-x64.rpm

Preparing... ########################################### [100%]
1:jdk1.8.0_131 ########################################### [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...

进入配置文件

[root@node1 ~]# vim /etc/profile

将以下文件添加到尾行

JAVA_HOME=/usr/java/jdk1.8.0_131
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH

更新 profile 文件

[root@node1 ~]# source /etc/profile

查看Java版本信息

[root@node1 ~]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

安装zookeeper

[root@node1 local]# cd /usr/local/src/
[root@node1 src]# rz
[root@node1 src]# ll
-rw-r--r-- root root Jun : zookeeper-3.4..tar.gz
[root@node1 src]# tar -zxvf zookeeper-3.4..tar.gz -C /usr/local/

配置环境变量,在尾部添加以下信息

[root@node1 ~]# vim /etc/profile
#zookeeper
ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.
export PATH=$PATH:$ZOOKEEPER_HOME/bin
[root@node1 ~]# source /etc/profile

创建zookeeper的数据目录和日志目录

 [root@node1 ~]# mkdir -p /usr/local/zookeeper-3.4.9/{data,log}

修改zookeeper配置文件

[root@node1 ~]# cd /usr/local/zookeeper-3.4./conf/
[root@node1 conf]# cp zoo_sample.cfg zoo.cfg
[root@node1 conf]# vim zoo.cfg
# Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔
tickTime=
# The number of ticks that the initial
# synchronization phase can take
# Zookeeper接受客户端初始化连接时最长能忍受多少个心跳时间间隔数
initLimit=
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
# 标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度
syncLimit=
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
# dataDir=/tmp/zookeeper
# Zookeeper保存数据的目录
dataDir=/usr/local/zookeeper-3.4./data
# Zookeeper保存日志的目录
dataLogDir=/usr/local/zookeeper-3.4./log # the port at which the clients will connect
#客户端访问 zookeeper 的端口号
clientPort=
# the maximum number of client connections.
# increase this if you need to handle more clients
# maxClientCnxns=
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=
# Purge task interval in hours
# Set to "" to disable auto purge feature
# autopurge.purgeInterval=
# server.A=B:C:D
# A位数字与myid文件值对应,B服务器地址,C集群成员信息交换端口,D是Leader挂掉后用来选举Leader的端口
server.=10.0.0.20::
server.=10.0.0.21::
server.=10.0.0.22::

在dataDir下创建myid文件,对应节点id

在10.0.0.20上
[root@node1 ~]# cd /usr/local/src/zookeeper-3.4./data
[root@node1 data]# echo >myid 在10.0.0.21上
[root@node2 ~]# cd /usr/local/src/zookeeper-3.4./data
[root@node2 data]# echo >myid 在10.0.0.22上
[root@node3 ~]# cd /usr/local/src/zookeeper-3.4./data
[root@node3 data]# echo >myid

启动zookeeper服务,依次在3台服务器上启动zk服务

[root@node1 ~]# /usr/local/zookeeper-3.4./bin/zkServer.sh start
[root@node2 ~]# /usr/local/zookeeper-3.4./bin/zkServer.sh start
[root@node3 ~]# /usr/local/zookeeper-3.4./bin/zkServer.sh start

查看zookeeper所有节点的状态

[root@node1 ~]# /usr/local/zookeeper-3.4./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: follower [root@node2 ~]# /usr/local/zookeeper-3.4./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: follower [root@node3 ~]# /usr/local/zookeeper-3.4./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: follower

activemq安装

[root@node1 ~]# cd /usr/local/
[root@node1 src]# rz
[root@node1 src]# ll
-rw-r--r-- root root Oct apache-activemq-5.15.0-bin.tar.gz
[root@node1 src]# tar -zxvf apache-activemq-5.15.0-bin.tar.gz -C /usr/local/

2.配置,在3台服务器上做同样配置,需注意个别参数配置

[root@node1 ~]# cd /usr/local/src/apache-activemq-5.15.0/conf

[root@node1 conf]# vim activemq.xml 
 81         <persistenceAdapter>
<!--
< kahaDB directory="${activemq.data}/kahadb"/>
-->
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas=""
bind="tcp://0.0.0.0:0"
zkAddress="10.0.0.20:2181,10.0.0.21:2181,10.0.0.22:2181"
hostname="10.0.0.20"
sync="local_disk"
zkPath="/activemq/leveldb-stores"
/>
</persistenceAdapter>
directory : 存储数据的路径

replicas : 集群中的节点数【(replicas/)+1公式表示集群中至少要正常运行的服务数量】,3台集群那么允许1台宕机, 另外两台要正常运行

bind : 当这个节点成为Master, 它会绑定配置好的地址和端口来履行主从复制协议,默认端口为61616

zkAddress : ZooKeeper的ip和port, 如果是集群, 则用逗号隔开(这里作为简单示例ZooKeeper配置为单点, 这样已经适用于大多数环境了, 集群也就多几个配置)

zkPassword : 当连接到ZooKeeper服务器时用的密码,此处由于没有密码

hostname : 本机ip

sync : 在认为消息被消费完成前, 同步信息所存贮的策略, 如果有多种策略用逗号隔开, ActiveMQ会选择较强的策略(local_mem, local_disk则肯定选择存贮在本地硬盘)

zkPath : ZooKeeper选举信息交换的存贮路径,启动服务后actimvemq会到zookeeper上注册生成此路径。

启动服务,依次在3台服务器上启动服务,会启动activemq的8161和61616两个端口;由于zookeeper机制,并不是3台服务器都会启动这两个端口,zookeeper确保只有一台会启动这两个端口对外提供服务

[root@node1 ~]# /usr/local/src/apache-activemq-5.15.0/bin/activemq start

[root@node2 ~]# /usr/local/src/apache-activemq-5.15.0/bin/activemq start

[root@node3 ~]# /usr/local/src/apache-activemq-5.15.0/bin/activemq start

在浏览器地址栏里输入

10.0.0.20:
10.0.0.21:
10.0.0.22:
    因为使用zookeeper做负载均衡,三台只有一台是master,其他两台处于等待状态,所以只有其中一台提供服务,但一旦这台服务器宕机以后,会有另外一台顶替上来,所以其他几个ip地址是打不开的,只有一台能打开
将当前可以访问的activemq进程干掉,其余两个中的其中一个成为master,即可以访问

总结

zookeeper+activemq的配置方案,能够提供(3-1)/2的容错率,也就是3台服务器允许宕机一台,而不影响整个集群的对外提供服务。

Activemq+Zookeeper集群的更多相关文章

  1. ActiveMQ+Zookeeper集群配置文档

    Zookeeper + ActiveMQ 集群整合配置文档 一:使用ZooKeeper实现的MasterSlave实现方式 是对ActiveMQ进行高可用的一种有效的解决方案, 高可用的原理:使用Zo ...

  2. Azure上搭建ActiveMQ集群-基于ZooKeeper配置ActiveMQ高可用性集群

    ActiveMQ从5.9.0版本开始,集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper+LevelDB的实现方式. 本文主要介绍了在Windows环境下配置基于Zoo ...

  3. Centos7上搭建activemq集群和zookeeper集群

    Zookeeper集群的搭建 1.环境准备 Zookeeper版本:3.4.10. 三台服务器: IP 端口 通信端口 10.233.17.6 2181 2888,3888 10.233.17.7 2 ...

  4. ActiveMQ的集群方案对比及部署

    转载:http://blog.csdn.net/lifetragedy/article/details/51869032 ActiveMQ的集群 内嵌代理所引发的问题: 消息过载 管理混乱 如何解决这 ...

  5. ActiveMQ伪集群部署

    本文借鉴http://www.cnblogs.com/guozhen/p/5984915.html,在此基础上进行了完善,使之成为一个完整版的伪分布式部署说明,在此记录一下! 一.本文目的 介绍如何在 ...

  6. ActiveMQ实战-集群

    原文:http://blog.csdn.net/lifetragedy/article/details/51869032 ActiveMQ的集群 内嵌代理所引发的问题: 消息过载 管理混乱 如何解决这 ...

  7. activemq 搭建--集群

      linux activmemq 集群安装,配置和高可用测试       从 ActiveMQ 5.9 开始,ActiveMQ 的集群实现方式取消了传统的Master-Slave 方式,增加了基于Z ...

  8. zookeeper集群+kafka集群 部署

    zookeeper集群 +kafka 集群部署 1.Zookeeper 概述: Zookeeper 定义 zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目 Zooke ...

  9. zookeeper集群的搭建以及hadoop ha的相关配置

    1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...

随机推荐

  1. Spark记录-Scala集合

    Scala列表 Scala列表与数组非常相似,列表的所有元素都具有相同的类型,但有两个重要的区别. 首先,列表是不可变的,列表的元素不能通过赋值来更改. 其次,列表表示一个链表,而数组是平的. 具有类 ...

  2. Java面试题系列(一)描述一下JVM加载class文件的原理机制

    JVM系列第4讲:从源代码到机器码,发生了什么? https://www.cnblogs.com/chanshuyi/p/jvm_serial_04_from_source_code_to_machi ...

  3. 高并发数据库之MySql性能优化实战总结

    向MySQL发送一个请求时MySQL具体的操作过程 慢查询 1.慢查询 SHOW VARIABLES LIKE '%quer%' 索引优化技巧 1.对于创建的多列索引(复合)索引,只要查询条件使用了最 ...

  4. Oracle 查看锁表进程_杀掉锁表进程 [转]

    查看锁表进程SQL语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo ...

  5. MFC里ON_COMMAND_RANGE消息映射的ID问题

    今天在工作中遇到一个问题,一个动态菜单,每个菜单的菜单项ID是我自己定义的,定义如下: #define IDM_SEARCHRECORD0 222240 #define IDM_SEARCHRECOR ...

  6. Ettercap之ARP+DNS欺骗

    1.网络攻击拓扑环境 网关:192.168.133.2 攻击者:192.168.133.128 受害者:192.168.133.137 2.原理讲解 ARP欺骗 简介:ARP(Address Reso ...

  7. Nginx报错:upstream timed out (110: Connection timed out)和client intended to send too large body【转】

    nginx日志报错 2018/01/26 16:36:49 [error] 23327#0: *54953 upstream timed out (110: Connection timed out) ...

  8. 使用eclipse为Servlet在Tomcat中的部署方法

    一:下载安装jdk,tomcat,eclipse: 使用eclipse建立动态web项目lcj,更改编译文件目录,方法如下: 右键点击→工程名称→属性(Properties)或(Building Pa ...

  9. 08 Go 1.8 Release Notes

    Go 1.8 Release Notes Introduction to Go 1.8 Changes to the language Ports Known Issues Tools Assembl ...

  10. python3 str.format()的使用

    基本格式 {字段名!转换字段:格式说明符} 字段名:省略:数字:变量名 'name is {}, age is {}'.format('peter',25) 'name is {1}, age is ...