ZooKeeper Ensemble을 Vagrant로 구축했습니다.
다음은 ZooKeeper도 중복 구성을 허용하도록 ZooKeeper Ensemble을 구축합니다.
ZooKeeper의 버전은 3.4.14입니다.
Vagrant 사용법은 Vagrant 입문을 참조하십시오.
ZooKeeper Ensemble
ZooKeeper의 가용성을 높이기 위해 여러 대의 Ensemble 구성을 사용합니다.
ZooKeeper에서는 Ensemble의 과반수가 동작하고 있는 것이 서비스의 계속 조건이기 때문에, 홀수대로 구축하는 것이 베스트인 것 같습니다.
예
4대의 머신으로 ZooKeeper Ensemble을 구축한 경우, 1대의 머신이 다운해도 나머지 3대에서 과반수가 되므로 서비스를 계속할 수 있습니다만,
2대의 머신이 다운하면 나머지 2대에서 과반수가 되지 않기 때문에 서비스를 계속할 수 없게 되어 버립니다.
즉 1/4, 25%의 다운을 허용합니다.
5대의 머신으로 ZooKeeper Ensemble을 구축한 경우, 2대의 머신이 다운해도 나머지 3대에서 과반수가 되므로 서비스를 계속할 수 있습니다만,
3대의 머신이 다운되면 나머지 2대에서 과반수가 되지 않기 때문에 서비스를 계속할 수 없게 되어 버립니다.
즉 2/5, 40%의 다운을 허용합니다.
6대의 머신으로 ZooKeeper Ensemble을 구축한 경우, 2대의 머신이 다운해도 나머지 4대에서 과반수가 되므로 서비스를 계속할 수 있습니다만,
3대의 머신이 다운되면 나머지 3대에서 과반수가 되지 않기 때문에 서비스를 계속할 수 없게 되어 버립니다.
즉 2/6, 33%의 다운을 허용합니다.
이것으로부터 홀수대로 구축하는 편이 머신을 유효 활용할 수 있다고 말할 수 있을 것 같습니다.
구성
여전히 쉘에서 어떻게 해야 합니다.
D:\vagrant\zkcluster
┣Vagrantfile
┗create_zkcluster.sh
Vagrantfile
# ZooKeeper数
zk_cnt = 3
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
#--- Proxy設定 ---#
no_proxy_address = "localhost,127.0.0.1"
(1..zk_cnt).each do |i|
no_proxy_address += ",zk#{i},192.168.33.1#{i}"
end
config.proxy.enabled = true
config.proxy.http = "http://user_id:password@proxy_address:proxy_port"
config.proxy.https = "http://user_id:password@proxy_address:proxy_port"
config.proxy.no_proxy = no_proxy_address
#--- /Proxy設定 ---#
#--- ZooKeeper Ensemble 構築 ---#
(1..zk_cnt).each do |i|
config.vm.define "zk#{i}" do | zk |
zk.vm.hostname = "zk#{i}"
zk.vm.network "private_network", ip: "192.168.33.4#{i}", virtualbox__intnet: "solrcloud"
zk.vm.provision :hosts, :sync_hosts => true
zk.vm.provision :shell, path: "./create_zkensemble.sh", args: "#{i} #{zk_cnt}"
end
end
#--- /ZooKeeper Ensemble 構築 ---#
end
c레테 _↑엔세 mbぇ. sh
ZooKeeper에서 Ensemble을 구성하려면 다음 설정이 필요합니다.
# Java をインストールする
yum install -y java-1.8.0-openjdk
# ZooKeeper を構築する
cd /var/tmp
yum install -y wget
wget http://ftp.jaist.ac.jp/pub/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar xvf zookeeper-3.4.14.tar.gz
cp -ar zookeeper-3.4.14 /opt/
ln -s /opt/zookeeper-3.4.14 /opt/zookeeper
# ZooKeeper 用のユーザを作成する
groupadd zookeeper
useradd -g zookeeper -d /opt/zookeeper -s /sbin/nologin zookeeper
chown -R zookeeper.zookeeper /opt/zookeeper/*
# ZooKeeperの設定ファイルを用意する
cd /opt/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
# dataDir を tmp から var に変更する
mkdir /var/lib/zookeeper
chown zookeeper.zookeeper /var/lib/zookeeper
cd /opt/zookeeper/conf
sed -i -e 's#dataDir=.*$#dataDir=/var/lib/zookeeper#' zoo.cfg
# ZooKeeper アンサンブルの設定を追記する
# $1 : ZooKeeper のノードID
# $2 : ZooKeeper アンサンブルの構成ノード数
echo "#ZooKeeper Ensemble" >> /opt/zookeeper/conf/zoo.cfg
for i in `seq 1 $2`
do
if [ $i = $1 ] ; then
# ノードIDが自分のものと一致する場合は 0.0.0.0 とする.
echo "server.${i}=0.0.0.0:2888:3888" >> /opt/zookeeper/conf/zoo.cfg
else
echo "server.${i}=192.168.33.1${i}:2888:3888" >> /opt/zookeeper/conf/zoo.cfg
fi
done
# dataDir にノードIDが記載された myid ファイルを用意する必要がある
echo $1 | sudo tee /var/lib/zookeeper/myid
# ZooKeeper を起動する
cd /opt/zookeeper
bin/zkServer.sh start
# Port を開放する
systemctl enable firewalld.service
systemctl start firewalld.service
firewall-cmd --zone=public --add-port=2181/tcp --add-port=2888/tcp --add-port=3888/tcp --permanent
firewall-cmd --reload
# 終了ステータスが 0 でない場合に Vagrant が異常終了とみなし VM が連続生成されないことがあるので明示する
exit 0
ZooKeeper Ensemble 구축
> pwd
D:\vagrant\zkensemble
> vagrant up
동작 확인
ZooKeeper의 상태를 살펴 보겠습니다.
> vagrant ssh zk1 -c "sudo /opt/zookeeper/bin/zkServer.sh status"
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
> vagrant ssh zk2 -c "sudo /opt/zookeeper/bin/zkServer.sh status"
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader
> vagrant ssh zk3 -c "sudo /opt/zookeeper/bin/zkServer.sh status"
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
leader와 follower가 자동으로 선출되었습니다.
가용성
이제 리더를 중지합니다.
> vagrant zk2 halt
다시 ZooKeeper의 상태를 확인하십시오.
> vagrant ssh zk1 -c "sudo /opt/zookeeper/bin/zkServer.sh status"
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
> vagrant ssh zk3 -c "sudo /opt/zookeeper/bin/zkServer.sh status"
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader
무사 leader가 선출되었습니다.
이러한 방식으로 Ensemble 구성을 사용하면 ZooKeeper 자체의 가용성이 향상됩니다.
Reference
이 문제에 관하여(ZooKeeper Ensemble을 Vagrant로 구축했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/maitake9116/items/933cba14cc76235b3c4f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)