Zookeeperクラスターを構築する
1.1建設要件
実際のクラスターは異なるサーバーにデプロイする必要がありますが、テストすると、同時に多数の仮想マシンを起動します。メモリが圧倒されるため、通常は疑似クラスターを構築します。つまり、すべてのサービスが構築されます。 1つの仮想マシン。、ポートで区別します。
ここでは、3ノードのZookeeperクラスター(疑似クラスター)が必要です。
1.2準備
クラスターのテストサーバーとして仮想マシンを再デプロイします。
(1)JDKをインストールします[この手順は省略します]
(2)Zookeeper圧縮パッケージをサーバーにアップロードします
(3)Zookeeperを解凍し、/ usr / local / zookeeper-clusterディレクトリを作成して、解凍したZookeeperを次の3つのディレクトリにコピーします。
/ usr / local / zookeeper-cluster / zookeeper-1
/ usr / local / zookeeper-cluster / zookeeper-2
/ usr / local / zookeeper-cluster / zookeeper-3
[root@localhost ~]# mkdir /usr/local/zookeeper-cluster
[root@localhost ~]# cp -r apache-zookeeper-3.5.6-bin /usr/local/zookeeper-cluster/zookeeper-1
[root@localhost ~]# cp -r apache-zookeeper-3.5.6-bin /usr/local/zookeeper-cluster/zookeeper-2
[root@localhost ~]# cp -r apache-zookeeper-3.5.6-bin /usr/local/zookeeper-cluster/zookeeper-3
(4)データディレクトリを作成し、confの下のzoo_sample.cfgファイルの名前をzoo.cfgに変更します。
mkdir /usr/local/zookeeper-cluster/zookeeper-1/data
mkdir /usr/local/zookeeper-cluster/zookeeper-2/data
mkdir /usr/local/zookeeper-cluster/zookeeper-3/data
mv /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo_sample.cfg /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
mv /usr/local/zookeeper-cluster/zookeeper-2/conf/zoo_sample.cfg /usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
mv /usr/local/zookeeper-cluster/zookeeper-3/conf/zoo_sample.cfg /usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg
(5)各ZookeeperのdataDirとclientPortをそれぞれ2181 21822183として構成します
/usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfgを変更します
vim /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
clientPort=2181
dataDir=/usr/local/zookeeper-cluster/zookeeper-1/data
/usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfgを変更します
vim /usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
clientPort=2182
dataDir=/usr/local/zookeeper-cluster/zookeeper-2/data
/usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfgを変更します
vim /usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg
clientPort=2183
dataDir=/usr/local/zookeeper-cluster/zookeeper-3/data
1.3クラスターを構成する
(1)各zookeeperのデータディレクトリに、内容1、2、および3のmyidファイルを作成します。このファイルは、各サーバーのIDを記録するためのものです
echo 1 >/usr/local/zookeeper-cluster/zookeeper-1/data/myid
echo 2 >/usr/local/zookeeper-cluster/zookeeper-2/data/myid
echo 3 >/usr/local/zookeeper-cluster/zookeeper-3/data/myid
(2)各飼育係のzoo.cfgでクライアントアクセスポート(clientPort)とクラスターサーバーのIPリストを設定します
クラスタサーバーのIPリストは次のとおりです
vim /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
vim /usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
vim /usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg
server.1=192.168.149.135:2881:3881
server.2=192.168.149.135:2882:3882
server.3=192.168.149.135:2883:3883
説明:サーバー。サーバーID =サーバーIPアドレス:サーバー間の通信ポート:サーバー間の投票ポート
クライアントおよびサーバー通信のデフォルトポート:2181
サーバー間の通信用のデフォルトポート:2881
サーバー間の投票用のデフォルトポート:3881
ZooKeeperのAdminServiceサービスは、デフォルトでポート8080を占有します
選出は、ここではサーバーID番号のサイズに基づいています
1.4クラスターを開始します
クラスターを開始するには、各インスタンスを個別に開始します。
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh start
起動後、各インスタンスの実行状態を確認します
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh status
最初のクエリ最初のサービス、モードフォロア手段であるフォロワ(から)
次に、2番目のサービスにクエリを実行します。モードはリーダーです。つまり、リーダー(マスター)です。
**理由:**実行できるサーバーが2つあります。実行可能なサーバーの数が、クラスター内のサーバーの総数の半分を超えていること、および2番目のサーバーのIDがこの時点で最大であるため、満足しています。時間、1回目は2回目、2回目は自分で投票したので、2位がリーダーになります
3番目のクエリはフォロワー(から)です
理由:新しく追加されたサーバーは既存のリーダーに影響を与えません
1.5クラスター例外のシミュレーション
(1)まず、スレーブサーバーがハングアップした場合にどうなるかをテストしてみましょう。サーバー3を停止し、No.1とNo.2を観察して、ステータスが変化していないことを確認します。
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh stop
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status
3ノードのクラスター、スレーブサーバーがダウンしており、クラスターは正常であると結論付けられます。
(2)No.1サーバー(スレーブサーバー)を再度停止し、No.2(マスターサーバー)の状態を確認して、停止していることを確認します。
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh stop
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status
このことから、3ノードクラスターでは2台のスレーブサーバーがダウンしており、マスターサーバーは稼働できないと結論付けられます。実行可能なマシンの数がクラスターの総数の半分を超えないためです。
(3)No.1サーバーを再起動したところ、No.2サーバーが正常に動作し始めたことがわかりました。そして、それでもリーダー。
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status
(4)また、No。3サーバーを起動し、No。2サーバーを停止し、停止後のNo.1とNo.3の状態を監視します。
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh stop
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh status
サーバー3が新しいリーダーになったことを発見
このことから、クラスター内のメインサーバーがダウンすると、クラスター内の他のサーバーが自動的に選択状態を実行し、新しいリーダーを生成すると結論付けました。
(5)No.2サーバーを再起動した後、No.2サーバーは再び新しいリーダーになりますか?
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh status
サーバー2は、起動後もフォロワー(スレーブサーバー)であり、サーバー3はリーダー(マスターサーバー)であり、サーバー3のリーダーシップを揺るがしていないことがわかります。
このことから、リーダーが作成されると、新しいサーバーがクラスターに再度追加され、現在のリーダーは影響を受けないと結論付けました。