ActiveMQ+ZooKeeperクラスタ高可用性構成


一.準備条件: 
  (1)3台のサーバがあることが望ましい【2台でもよいが、(replicas/2)+1式によって少なくとも2つのActiveMQサービスが存在しなければ運行を保証できないので、自分でテストするときは面倒な点を消して、そのうちの1つを消して、再開して、別のActiveMQサービスを選ぶかどうかを見て、何度も試して効果を見ることができる】
  (2)  ActiveMQインストールリファレンス: ActiveMQ
  (3)  ZooKeeperインストールリファレンス:ZooKeeper 
二.配置: 
ActiveMQルートの下にあるconf/activemq.xmlのデフォルトは次のとおりです.
<persistenceAdapter>
            <kahaDB directory="${activemq.data}/kahadb"/>
        </persistenceAdapter>

変更後(hostnameはサーバによって変更され、他の構成は同じです):
  <persistenceAdapter>

    <replicatedLevelDB

      directory="${activemq.data}/leveldb"

      replicas="3"

      bind="tcp://0.0.0.0:0"

      zkAddress="172.17.110.1:2181"

      zkPassword="password"

      hostname="172.17.110.1"

      sync="local_disk"

      zkPath="/activemq/leveldb-stores"

      />
  </persistenceAdapter>
directory:データを格納するパス
replicas:クラスタ内のノード数[(replicas/2)+1式はクラスタ内で少なくとも正常に動作するサービス数を表す],3つのクラスタでは1台のダウンタイムが許可され,他の2台は正常に動作する
Bind:このノードがMasterになると、構成されたアドレスとポートをバインドしてプライマリ・スレーブ・レプリケーション・プロトコルを実行します.
zkAddress:ZooKeeperのipとportは、クラスタの場合はカンマで区切られます(ここでは簡単な例としてZooKeeperが単点に構成されており、ほとんどの環境に適用され、クラスタも複数の構成になります).
zkPassword:ZooKeeperサーバに接続するときに使用するパスワード
hostname:ネイティブip
sync :  メッセージが消費される前に、同期情報が格納されているポリシーは、複数のポリシーがカンマで区切られている場合、ActiveMQはより強いポリシーを選択します(local_mem、local_diskはローカルハードディスクに格納することを選択します).
zkPath:ZooKeeper選挙情報交換の格納経路
三.テスト
Step1 : 
ZooKeeperのポリシーに従って、3台のActiveMQサーバから1台の実行を選択し、他の2台は実行を待機し、データ上の主従同期を行うだけです.
そこで、ZooKeeperサーバとActiveMQサーバを起動してから、http://172.17.110.1:8161/admin/、 http://172.17.110.2:8161/admin/、 http://172.17.110.3:8161/admin/成功は一つしかない.
Step2 : 
アクセスをオフにするhttp://ip:8161/admin/のActiveMQサービスは、他の2つにアクセスできます.そのうちの1つは、ActiveMQ+ZooKeeperクラスタの高可用性構成が成功したことを示しています.
四.参考文書
- ActiveMQ公式サイト
- ZooKeeper公式サイト