同社のキャッシングソリューションの改善により、codisクラスターがメインのキャッシングソリューション(codis:国内のエンドウ豆ポッドによって開発されたredisクラスターソリューション、オープンソース、githubアドレス:https://github.com/CodisLabs/codis)、codisクラスターとして用意されています。 zookeeperクラスターに依存しますが、この記事ではzookeeperクラスターの実装を紹介します。
1.Zookeeperの原理の紹介
ZooKeeperは、オープンソースの分散アプリケーション調整サービスであり、分散アプリケーションが同期サービス、構成の保守、および命名サービスを実装できる単純なプリミティブのセットが含まれています。
動物園飼育員の設計目的
Zookeeperのしくみ
1、 動物園管理者クラスターでは、各ノードには次の3つの役割と4つの状態があります。
役割:リーダー、フォロワー、オブザーバー
ステータス:リード、フォロー、観察、見ている
Zookeeperの中核はアトミックブロードキャストです。このメカニズムにより、サーバー間の同期が保証されます。このメカニズムを実装するプロトコルは、Zabプロトコル(ZooKeeper Atomic Broadcastプロトコル)と呼ばれます。 Zabプロトコルには、リカバリモード(リカバリがマスターを選択)とブロードキャストモード(ブロードキャスト同期)の2つのモードがあります。サービスが開始されるか、リーダーがクラッシュした後、Zabはリカバリモードに入ります。リーダーが選出され、ほとんどのサーバーがリーダーの状態との同期を完了すると、リカバリモードは終了します。状態の同期により、リーダーとサーバーのシステム状態が同じになります。
トランザクションシーケンスの一貫性を確保するために、zookeeperは増加するトランザクションID番号(zxid)を使用してトランザクションを識別します。すべての提案は、作成時にzxidを追加します。実装では、zxidは64ビットの数値です。その上位32ビットは、リーダーの関係が変更されたかどうかを識別するためにエポックによって使用されます。リーダーが選択されるたびに、リーダーの治世の現在の期間を識別する新しいエポックがあります。下位32ビットはアップカウントに使用されます。
各サーバーには、作業中に4つの状態があります。
探している:現在のサーバーは、リーダーが誰で、検索しているのかを知りません。
リーダー:現在のサーバーが選ばれたリーダーです。
FOLLOWING:リーダーが選出され、現在のサーバーがリーダーと同期されます。
観察:ほとんどの場合、観察者の行動は信者の行動とまったく同じですが、彼らは選挙や投票に参加せず、選挙と投票の結果を受け入れる(観察する)だけです。
Zookeeperクラスターノード
ラボ環境
ホスト名 | システム | IPアドレス |
---|---|---|
linux-node1 | CentOS release 6.8 | 192.168.1.148 |
linux-node2 | CentOS release 6.8 | 192.168.1.149 |
linux-node2 | CentOS release 6.8 | 192.168.1.150 |
2、Zookeeperのインストール
Zookeeperを実行するにはjava環境が必要であり、jdkをインストールする必要があります。注:Zookeeperとjdkを各サーバーにインストールする必要があります。必要なインストールパッケージをローカルにダウンロードしてサーバーにアップロードすることをお勧めします。サーバーでのダウンロード速度が遅すぎます。
2.1、 JDKのインストール
JDKダウンロードアドレス:[http://www.oracle.com/technetwork/java/javase/downloads/index.html](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
rpm -ivh jdk-8u101-linux-x64.rpm
2.2、 Zookeeperのインストール
動物園飼育係のリンク:[http://zookeeper.apache.org/](http://zookeeper.apache.org/)
wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz -P /usr/local/src/
tar zxvf zookeeper-3.4.8.tar.gz -C /opt
cd /opt && mv zookeeper-3.4.8 zookeeper
cd zookeeper
cp conf/zoo_sample.cfg conf/zoo.cfg
echo -e "# append zk_env\nexport PATH=$PATH:/opt/zookeeper/bin">>/etc/profile
3、Zookeeperクラスター構成
注:ズーキーパークラスターを構築するときは、開始されたズーキーパーノードを必ず停止してください。
3.1、 Zookeeper構成ファイルの変更
egrep -v "^#|^$" zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataLogDir=/opt/zookeeper/logs
dataDir=/opt/zookeeper/data
clientPort=2181
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
server.1=192.168.1.148:2888:3888
server.2=192.168.1.149:2888:3888
server.3=192.168.1.150:2888:3888
mkdir -p /opt/zookeeper/{logs,data}
3.2、 構成パラメーターの説明
tickTimeは、ハートビートを維持するためのzookeeperサーバー間、またはクライアントとサーバー間の時間間隔です。つまり、tickTimeごとにハートビートが送信されます。
initLimit構成アイテムは、クライアントを受け入れるようにzookeeperを構成するために使用されます(ここで説明するクライアントは、ユーザーをzookeeperサーバーに接続するクライアントではなく、zookeeperサーバークラスターのリーダーに接続されるフォロワーサーバーです)。ハートビート間隔の数。
10ハートビートの時間(つまり、tickTime)を超えた場合、zookeeperサーバーはクライアントからの戻りメッセージを受信しておらず、クライアント接続が失敗したことを示しています。合計時間は10 * 2000 = 20秒です。
構成アイテムsyncLimitは、リーダーとフォロワーの間で送信されるメッセージの長さ、要求時間と応答時間を識別し、最長時間はtickTimeの長さを超えることはできません。合計時間長は5 * 2000 = 10秒です。
dataDirは、その名前が示すように、zookeeperがデータを保存するディレクトリです。デフォルトでは、zookeeperはこのディレクトリにデータを書き込むためのログファイルも保存します。
clientPortポートは、クライアントがZookeeperサーバーに接続するためのポートであり、Zookeeperはこのポートをリッスンして、クライアントのアクセス要求を受け入れます。
Aのserver.A = B:C:Dは、どのサーバーがこの番号であるかを示す番号、BはこのサーバーのIPアドレス、Cの最初のポートはクラスターメンバー間の情報交換に使用され、このサーバーとクラスターを示します。リーダーサーバーが情報を交換するために使用するポート。Dは、リーダーがハングしたときにリーダーの選出に使用されるポートです。
3.3、 ServerIDIDを作成する
zoo.cfg構成ファイルの変更に加えて、myidファイルをzookeeperクラスターモードで構成する必要があります。これは、dataDirディレクトリに配置する必要があります。
このファイルにはAの値であるデータがあり(Aはzoo.cfgファイルのserver.A = B:C:DのAです)、myidファイルはzoo.cfgファイルで構成されたdataDirパスに作成されます。
echo "1">/opt/zookeeper/data/myid
echo "2">/opt/zookeeper/data/myid
echo "3">/opt/zookeeper/data/myid
この時点で、関連する構成は完了しています。
4、Zookeeperクラスタービュー
1、 各サーバーでzookeeperノードを起動します。
/opt/zookeeper/bin/zkServer.sh start
注:トラブルシューティング
Zookeeperノードを開始できません。考えられる理由:zoo.cfg構成ファイルが正しくなく、iptablesが閉じられていません。
2、 起動後、各ノードの状態を確認してください
5、Zookeeperクラスター接続
Zookeeperクラスターをセットアップすると、クライアントスクリプトを介してZookeeperクラスターに接続できます。クライアントにとって、Zookeeperクラスターは全体であり、Zookeeperクラスターへの接続は、実際にはクラスター全体の排他的なサービスのように感じられます。
上の図から、zookeeperクラスター全体が構築およびテストされていることがわかります。
http://blog.csdn.net/wuliu_forever/article/details/52053557
http://www.cnblogs.com/luxiaoxun/p/4887452.html
Recommended Posts