ZooKeeper يوفر خدمة بيانات مشتركة (shared data service) عالية الأداء تستخدم لبناء distributed applications.
يتم استخدامه عن طريق الـ cluster للحفاظ على البيانات المشتركة مع تقنيات التزامن القوية.
يوفر واجهة بسيطة.
سنشرح هنا تثبيت Apache ZooKeeper على خادم Ubuntu 20.04.
المتطلبات الأساسية
خادم يعمل بنظام التشغيل Ubuntu 20.04.
إعداد كلمة مرور الـ root للخادم.
تثبيت Java
سنحتاج إلى تثبيت Java على النظام.
يمكنك تثبيتها بالأمر التالي:
apt-get install default-jdk -y
تحقق من إصدار Java المثبت بالأمر التالي:
java --version
يجب أن تحصل على النتيجة التالية:
openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)
تثبيت Zookeeper
قبل تثبيت Apache zookeeper ستحتاج إلى إنشاء مستخدم جديد لـ zookeeper.
يمكنك إنشائه بالأمر التالي:
useradd zookeeper -m
قم بتعيين كلمة مرور لهذا المستخدم وأضفها إلى مجموعة sudo باستخدام الأمر التالي:
usermod --shell /bin/bash zookeeper
passwd zookeeper
usermod -aG sudo zookeeper
بعد ذلك ، قم بإنشاء مجلد بيانات لـ zookeeper وقم بتغيير ملكية هذا المجلد:
mkdir /zookeeper
chown -R zookeeper:zookeeper /zookeeper
قم بتحميل أحدث إصدار من zookeeper إلى المجلد / opt.
يمكنك تحميله بالأمر التالي:
cd /opt
wget https://mirrors.estointernet.in/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
قم بفك ضغط الملف الذي تم تنزيله باستخدام الأمر التالي:
tar -xvzf apache-zookeeper-3.6.2-bin.tar.gz
أعد تسمية المجلد المستخرج إلى zookeeper باستخدام الأمر التالي:
mv apache-zookeeper-3.6.2-bin zookeeper
قم بتغيير ملكية المجلد zookeeper باستخدام الأمر التالي:
chown -R zookeeper:zookeeper /opt/zookeeper
إعداد ZooKeeper في وضع Standalone
سنحتاج إلى إنشاء ملف إعداد ZooKeeper.
لإعداد ZooKeeper في الوضع standalone يمكنك إنشائه بالأمر التالي:
nano /opt/zookeeper/conf/zoo.cfg
أضف الأسطر التالية:
tickTime=2500
dataDir=/zookeeper
clientPort=2181
maxClientCnxns=80
احفظ وأغلق الملف.
ابدأ خدمة ZooKeeper بالأمر التالي:
cd /opt/zookeeper
bin/zkServer.sh start
يجب أن تحصل على النتيجة التالية:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
بشكل افتراضي ، يستمع ZooKeeper على المنفذ 2181.
يمكنك التحقق من ذلك باستخدام الأمر التالي:
ss -ntpl | grep 2181
يجب أن تحصل على النتيجة التالية:
LISTEN 0 50 *:2181 *:* users:(("java",pid=12749,fd=53))
يمكنك الآن الاتصال بخادم ZooKeeper المحلي باستخدام الأمر التالي:
bin/zkCli.sh -server 127.0.0.1:2181
بمجرد الاتصال ، يجب أن تحصل على الإخراج التالي:
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0]
الآن ، اخرج بالأمر التالي:
quit
أوقف خدمة ZooKeeper بالأمر التالي:
bin/zkServer.sh stop
يجب أن ترى النتيجة التالية:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
إنشاء ملف خدمة Systemd لـ ZooKeeper
سنحتاج إلى إنشاء ملف خدمة systemd لإدارة خدمة ZooKeeper.
يمكنك إنشائه بالأمر التالي:
nano /etc/systemd/system/zookeeper.service
أضف الأسطر التالية:
[Unit]
Description=Zookeeper Daemon
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target
[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeper
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure
[Install]
WantedBy=default.target
احفظ وأغلق الملف.
أعد تحميل systemd daemon لتطبيق التغييرات:
systemctl daemon-reload
بعد ذلك ، قم بتغيير ملكية ZooKeeper ومجلد البيانات باستخدام الأمر التالي:
chown -R zookeeper:zookeeper /opt/zookeeper
chown -R zookeeper:zookeeper /zookeeper
ابدأ خدمة ZooKeeper وقم بتمكينها من البدء تلقائياً عند إعادة تشغيل النظام باستخدام الأمر التالي:
systemctl start zookeeper
systemctl enable zookeeper
يمكنك الآن التحقق من حالة خدمة ZooKeeper باستخدام الأمر التالي:
systemctl status zookeeper
يجب أن تحصل على النتيجة التالية:
? zookeeper.service - Zookeeper Daemon
Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2020-09-27 06:43:28 UTC; 8s ago
Docs: http://zookeeper.apache.org
Process: 13915 ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg (code=exited, status=0/SUCCESS)
Main PID: 13946 (java)
Tasks: 37 (limit: 4691)
Memory: 50.6M
CGroup: /system.slice/zookeeper.service
??13946 java -Dzookeeper.log.dir=/opt/zookeeper/bin/../logs -Dzookeeper.log.file=zookeeper-zookeeper-server-ubuntu2004.log -Dzook>
Sep 27 06:43:27 ubuntu2004 systemd[1]: Starting Zookeeper Daemon...
Sep 27 06:43:27 ubuntu2004 zkServer.sh[13915]: /usr/bin/java
Sep 27 06:43:27 ubuntu2004 zkServer.sh[13915]: ZooKeeper JMX enabled by default
Sep 27 06:43:27 ubuntu2004 zkServer.sh[13915]: Using config: /opt/zookeeper/conf/zoo.cfg
Sep 27 06:43:28 ubuntu2004 zkServer.sh[13915]: Starting zookeeper ... STARTED
Sep 27 06:43:28 ubuntu2004 systemd[1]: Started Zookeeper Daemon.