記事のディレクトリ
1. ZooKeeperのは何ですか
ZooKeeperの直訳は、パイプのHadoop(象)に使用されている飼育係、ハイブ(ビー)、ブタ(豚)などの管理者である(これらはビッグデータフレームワークの技術的な側面では、Apache Software Foundationの)、アパッチHBaseのとApache Solrのは、クラスタ用途のZooKeeperを分散されています。
(1)Baiduの百科事典は説明しました:
ZooKeeperのは、高可用性で、分散プログラム・コーディネーションサービス、Googleのチャビーのオープンソース実装で、HadoopのとHBaseのの重要な要素です。
それは、分散アプリケーションのための一貫したサービスを提供することで機能が含ま提供:コンフィギュレーション・メンテナンス、ドメイン・ネーム・サービス、分散型の同期、グループ・サービスを。
ZooKeeperの目標は、より良いカプセル化、複雑なエラーが発生しやすい重要なサービス、ユーザーにシステムのインタフェースで効率的なパフォーマンス、機能性と安定性を使用して簡単にです。
(2)ZooKeeperの基本的な動作処理:
①選挙のリーダー、
②同期データ、
そこに多くのためのアルゴリズムの③選挙のリーダーがありますが、選挙の基準は一貫している達成するために、
④最高の実行IDを持っているリーダー、同様のルート権限、
⑤クラスタ内のほとんどの機械や応答を取得受諾リーダーが選出されました。
2.ZooKeeper機能
2.1構成管理
ほとんどのプロジェクトは、この情報は一般的に、特定のファイル、あなたのコード内の関連するコンフィギュレーション・ファイルの導入に設定されているなど、そのようなJDBC接続情報として、設定情報の様々な開発を伴います。
-これは、シングルサーバアプリケーション、大規模なアプリケーションは、コンフィギュレーションが分散したプロジェクトでは、特に、多くのファイルを一般的な方法であるには、configure複数のサーバーでは、一貫している必要があります。
構成情報が頻繁に変更されている場合は、この時間をまた、設定ファイルは良いアイデアではありません使用します。- あなたは一つ一つが繰り返しあまりにも多くの仕事、およびエラーの大きな可能性、メンテナンスコストも過言ではないだけでそれを手動で変更することはできません?。
すべての依存サービスが変更に利用できる装備、この中央の場所で設定を変更する - この場合は、多くの場合、中央構成を管理する方法を見つける必要があります。
確実にアプリケーションを実行するためには、この構成に依存しているため、複数のサーバ上の項目にあることを、考慮するためには、非常に高い信頼性で、この集中管理構成サービス・アプリケーションを提供する必要があります。
上記の分析に基づいて、我々は、システムの信頼性を確保するために、クラスタ構成を通じてサービスを提供することができます。このレガシー問題でそれを設定するには、クラスタ内で一貫性を確保する方法ですか?
ザブその一貫性を確保するために、このコヒーレンシ・プロトコルを使用して - この一貫性を提供するために、コヒーレンス・プロトコルの前任者は、ZooKeeperのが持っているこのサービス契約を達成するために前方に置きます。
シナリオ:
○HBaseのは、クライアントがのZooKeeperに接続され、それがさらに操作することができる前に必要な設定情報のHBaseクラスタを求める。
○オープンソースメッセージキューカフカ、ZooKeeperの情報ブローカの。維持する
ダボ○アリババオープンソース広範囲にSOAフレームワークサービスのガバナンスを実現するための管理情報を使用してZooKeeperの構成。
2.2ネーミングサービス
シーンは、ネットワークを介してシステムにアクセスするために、我々はお互いのIPアドレスを知っている必要がありますが、IPアドレスは、人々がアクセスするドメイン名指定したIPアドレスを介して出てくる時にユーザーフレンドリー、覚えるのが困難ではない一連の数字です。
しかし、コンピュータのドメイン名を認識しません。この問題を解決するために、設計者は各コンピュータに提案したがプログラム「IPアドレスマッピングにドメイン名」に格納されています。質問は再び、IPアドレスに対応するドメイン名が発生した場合変更は、どのようにそれをマップする必要がありますか?
前任者は、DNS(ドメインネームシステム、ドメインネームシステム)を設計しました。また、ある私たちは、現在の訪問のIPアドレスを対応するノードを介して第1のすべてのマシンは(知られている)のノードを認識している、DNSが私たちに伝えるためにどのようなドメイン名にアクセスする必要がありますDNSは、統一されたアクセス・インターフェースを提供することです。
このような問題は、サービスがローカルに格納されている場合は特に、サービスアプリケーションの多数の存在下で、我々は対処する、アプリケーション開発に存在する他のユーザーがこれらのアドレスとアクセスを取得されていません。しかし、我々は統一されたユーザに提供することである場合に入口、ローカル応じプロセスをマッピングするためのユーザ要求の様々な、このような問題を解決することができます。
2.3分散ロック
ZooKeeperのは、分散コーディネーションサービスで、我々は複数の分散プロセス間の活動を調整するためのZooKeeperを使用することができます。
例えば、分散環境で、システムの信頼性を向上させるために、クラスタは、各サーバが同じサービスを展開しました。
これらの同じサービスが同じタスクを実行する必要が、データの整合性を確保するために、クラスタは、互いに協調し、協調問題に対する従来のプログラミングソリューションは非常に複雑で厄介です。
通常の実施は、次のとおりです。分散ロックを使用することは、仕事で一度に一つだけのサービスでは、このロックの問題はすぐに解放されたサービス、そしてリーダー選挙(リーダーと呼ばれると呼ばれているこの設計の別のサービスにフェイルオーバー。このようHBaseのマスターなどの選挙)、このメカニズムの使用に関する。
注:ロックとロック処理が異なる分散は、より慎重に使用します。
2.4クラスタ管理
そのようなハードウェアおよびソフトウェアの障害、停電、ネットワークおよびその他の問題の存在などの分散クラスタの用途では、ノードの現象は、クラスタから古いノードは、新しいノードがクラスタに参加していることがある。これらの場合、クラスタ内の他のノードは、これを認識することができるようにその後、変更の種類、その変化に基づいて、対応する決定を下します。
シナリオ:
○分散ストレージシステムでは、中央制御ノード、ストレージ、あなたは動的クラスター対応のリアルタイムステータスを必要とするクラスタ・ノードのステータスに基づいてストレージを割り当てる必要が参加する新しいストレージノードを割り当てるための責任があるがある。
○SOA分散消費者がサービスにアクセスするときにアーキテクチャ、サービスがクラスターによって提供されている、我々はまた、このようなオープンソースのSOAフレームワークダボアリババなどのサービスの発見、として知られているサービスを(提供することができ、クラスタ内のどのノードを見つけるためにいくつかのメカニズムが必要ですサービス発見のための基本的なメカニズムとして使用上のZooKeeper)。
○経営の消費者のZooKeeperダウンによってカフカオープンメッセージキュー。
3のZooKeeperクラスタの展開
3.1をダウンロードし、インストールパッケージの解凍
ZooKeeperのダウンロード:http://hadoop.apache.org/zookeeper/releases.html。
#下载后, 上传至特定目录, 这里上传至/data/zookeeper下:
mkdir -p /data/zookeeper && cd /data/zookeeper
#解压ZooKeeper安装包:
tar -zxf zookeeper-3.4.10.tar.gz
3.2作成データとデータログディレクトリ
#进入ZooKeeper安装目录
cd zookeeper-3.4.10
#data为ZooKeeper数据存放目录, datalog为ZooKeeper日志存放目录
#若不指定datalog, 默认与数据存放目录一致
mkdir data datalog
#赋予当前用户写权限
chmod 644 data datalog
3.3ファイルMYIDを作成します
MYIDがディレクトリにデータファイルを作成し、ファイルが単一の行を含む:コンテンツserver.1はMYIDノードをSERVER.IDとしてノードIDに対応する番号がファイルです。
#将编号写入到myid文件中
echo 1 > /data/zookeeper/data/myid
#查看写入是否成功
cat /data/zookeeper/data/myid
3.4コンフィギュレーションファイルzoo.cfgを変更
次のように(1)変性:
cd /data/zookeeper/zookeeper-3.4.10/conf
#拷贝文件, 重命名为zoo.cfg
cp zoo_sample.cfg zoo.cfg
#修改zoo.cfg文件:
vim zoo.cfg
#添加如下内容:
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/datalog
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
(2)次の書類をzoo.cfgの設定:
# 基本事件单元(毫秒), 用来控制心跳和超时.
tickTime=2000
# 集群中有多台Server, 其中一台为Leader, 其余Server为Follower. initLimit参数指定Follower连接并同步到Leader的初始化心跳时间(即最长通信时间), 以tickTime的倍数表示, 超过该时间则连接失败.
initLimit=5
# Leader与Follower之间发送消息时, 请求和应答的最大时间, 是tickTime的倍数. 如果Follower在设置的时间内不能与Leader建立通信, 此Follower将被丢弃.
syncLimit=2
# 存放ZooKeeper运行时数据的目录, 需要提前建立.
dataDir=/data/zookeeper/data
# log目录, 如果没有设置该参数, 默认使用dataDir的目录, 需要提前建立.
# 应当谨慎选择日志目录, 使用专用的日志存储设备能很大程度提高系统的性能.
dataLogDir=/data/zookeeper/datalog
# 监听client连接的端口号.
clientPort=2181
# 设置连接到ZooKeeper的客户端的最大数量(限制并发连接的数量, 它通过IP来区分不同的客户端). 此配置选项可以用来阻止某些类别的Dos攻击, 将它设置为0或不设置将会取消对并发连接的限制.
maxClientCnxns=0
# 最小的会话超时时间, 默认为 2 * tickTme 时间
minSessionTimeout=4000
# 最大的会话超时时间默认情况下为 20 倍的会话超时时间
maxSessionTimeout=10000
# 集群中各个节点的信息(server.id=ip:port1:port2)
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
ポート1:ポート2の説明:server.id =ホストについて(3)
IDは、各ZooKeeperのノードの数であり、DATADIRディレクトリの下MYIDにファイルを保存します。
zoo1〜zoo3はでシステムファイル/ etc / hostsに設けられている各ノードZooKeeperのマッピング関係のホスト名またはIPアドレスを表します。
リーダーポート1は、クラスタで使用するサーバーと通信するポートを指定します。
クラスタ選挙リーダーを使用しながら、ポート2ポートを指定します。
(4)一般的なエラーの説明:
○CLIENTPORTは、そうでない場合、クラスタが起動しません。同じPORT2、PORT1ことができない
(すなわち、アナログクラスタのサーバ上の設定)、PORT1○擬似分散構成を使用すると、各サーバが同じにすることはできませんPORT2。
○擬似分布は、If設定を入力し、DATADIR dataLogDirも異なる構成を作成する必要があります。
他のノードで3.5展開サービス
#拷贝ZooKeeper文件夹到其他服务器(zoo2和zoo3) --- 需要确保相应的路径/data/zookeeper存在:
scp -r /data/zookeeper zoo2:/data/
scp -r /data/zookeeper zoo2:/data/
#分别在zoo2和zoo3服务器上修改ZooKeeper的myid:
echo 2 > /data/zookeeper/zookeeper-3.4.10/data/myid
echo 3 > /data/zookeeper/zookeeper-3.4.10/data/myid
4スタートのZooKeeperクラスタ
ファイアウォールオフ4.1ターン
ZooKeeperのクライアントは、外部の通常の飼育係、オープンポート番号2181への必要性を使用するか、ファイアウォールをオフにすることができるようにするためには、ポート番号2181を使用しています。
(1)コマンドの前に7 CentOSのシステム。
#查看防火墙状态:
service iptable status
#临时关闭防火墙:
service iptables stop
#永久关闭防火墙(禁止开机启动):
chkconfig iptables off
(2)CentOSの7は、サービスとchkconfigを含めたサービスやプログラムを、管理するためにsystemctlを使って起動します。
#查看防火墙状态:
systemctl status firewalld.service
#临时关闭防火墙:
systemctl stop firewalld.service
#永久关闭防火墙(禁止开机启动):
systemctl disable firewalld.service
4.2のZooKeeperクラスタを開始
(1)起動手順:
#依次进入三台服务器, 执行下述命令:
cd /usr/local/zookeeper-3.4.10/bin
./zkServer.sh start
#查看ZooKeeper运行状态:
./zkServer.sh status
(2)よくある間違い:あなたはZooKeeperのステータスを表示するとき、あなたはコンソールを見つけることは、エラーがスローされます。
[root@localhost bin]# ./zkServer.sh status
JMX enabled by default
Using config: /data/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Error contacting service. It is probably not running
原因:ここでは、クラスタの展開があり、別のサーバーが開始されていない、サービスのリストの選挙リーダーを開始するための要求に応じて現在のノードがそのエラーをスローし、クラスタ内の他のノードと通信できない、設定さzoo.cfg。
エラー解決方法:第二段階のZooKeeperサービスを開始した後、リーダーが選択されます、エラーが表示されなくなりますので、ZooKeeperのクラスタ、サービスステーションを可能にするn個のサービスに影響を与えずにハングアップ2N + 1のサーバーは、存在する場合。
4.3 ZooKeeperの一般的なコマンド
#启动服务:
sh zkServer.sh start
#查看服务状态:
sh zkServer.sh status
#停止服务:
sh zkServer.sh stop
#重启服务:
sh zkServer.sh restart