• Activemq+Zookeeper集群


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

    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--  1 root root 22724574 Jun 20 07:31 zookeeper-3.4.9.tar.gz
    [root@node1 src]# tar -zxvf zookeeper-3.4.9.tar.gz -C /usr/local/

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

    [root@node1 ~]# vim /etc/profile
    #zookeeper
    ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.9
    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.9/conf/
    [root@node1 conf]# cp zoo_sample.cfg zoo.cfg
    [root@node1 conf]# vim zoo.cfg
    # Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔
    tickTime=2000
    # The number of ticks that the initial 
    # synchronization phase can take
    # Zookeeper接受客户端初始化连接时最长能忍受多少个心跳时间间隔数
    initLimit=10
    # The number of ticks that can pass between 
    # sending a request and getting an acknowledgement
    # 标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度
    syncLimit=5
    # 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.9/data
    # Zookeeper保存日志的目录
    dataLogDir=/usr/local/zookeeper-3.4.9/log
    
    # the port at which the clients will connect
    #客户端访问 zookeeper 的端口号
    clientPort=2181
    # the maximum number of client connections.
    # increase this if you need to handle more clients
    # maxClientCnxns=60
    #
    # 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=3
    # Purge task interval in hours
    # Set to "0" to disable auto purge feature
    # autopurge.purgeInterval=1
    # server.A=B:C:D
    # A位数字与myid文件值对应,B服务器地址,C集群成员信息交换端口,D是Leader挂掉后用来选举Leader的端口
    server.1=10.0.0.20:2888:3888
    server.2=10.0.0.21:2888:3888
    server.3=10.0.0.22:2888:3888

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

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

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

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

    查看zookeeper所有节点的状态

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

    activemq安装

    [root@node1 ~]# cd /usr/local/
    [root@node1 src]# rz [root@node1 src]# ll
    -rw-r--r-- 1 root root 58082293 Oct 18 2017 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> 82 <!-- 83 < kahaDB directory="${activemq.data}/kahadb"/> 84 --> 85 <replicatedLevelDB 86 directory="${activemq.data}/leveldb" 87 replicas="3" 88 bind="tcp://0.0.0.0:0" 89 zkAddress="10.0.0.20:2181,10.0.0.21:2181,10.0.0.22:2181" 90 hostname="10.0.0.20" 91 sync="local_disk" 92 zkPath="/activemq/leveldb-stores" 93 /> 94 </persistenceAdapter> 95
    directory : 存储数据的路径
    
    replicas : 集群中的节点数【(replicas/2)+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:8161
    10.0.0.21:8161
    10.0.0.22:8161
        因为使用zookeeper做负载均衡,三台只有一台是master,其他两台处于等待状态,所以只有其中一台提供服务,但一旦这台服务器宕机以后,会有另外一台顶替上来,所以其他几个ip地址是打不开的,只有一台能打开
    将当前可以访问的activemq进程干掉,其余两个中的其中一个成为master,即可以访问


    总结

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

  • 相关阅读:
    Zookeeper ZAB 协议分析
    Docker技术快速精通指南
    Oracle闪回技术详解
    怎样打造一个分布式数据库
    使用js冒泡实现点击空白处关闭弹窗
    也谈谈我对Docker的简单理解
    Docker技术快速精通指南
    Oracle优化网上常见的5个错误观点
    使用Spring AOP实现MySQL读写分离
    RESTEASY ,从学会使用到了解原理。
  • 原文地址:https://www.cnblogs.com/wanglan/p/7699513.html
Copyright © 2020-2023  润新知