Die Anleitung der Hauptfamilie ist hier. Ich verstehe, dass es einfach ist, die verteilte Verarbeitung von Chargen zu implementieren, was bei ordnungsgemäßer Montage schwierig ist.
$ brew install zookeeper
$ ls /usr/local/etc/zookeeper
defaults log4j.properties zoo.cfg zoo_sample.cfg
Selbst wenn Sie die standardmäßig platzierte Einstellungsdatei mit Tutorial vergleichen, ist sie fast dieselbe. Starten Sie sie also so, wie sie ist Versuchen.
$ cat /usr/local/etc/zookeeper/zoo.cfg | egrep -v "#"
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/var/run/zookeeper/data
clientPort=2181
$ which zkServer
/usr/local/bin/zkServer
$ sudo zkServer start
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED
Das Protokoll wird unten ausgegeben
$ tail -f /usr/local/var/log/zookeeper/zookeeper.log
2017-01-09 06:40:05 QuorumPeerMain [WARN] Either no config or no quorum defined in config, running in standalone mode
Etwas ist raus. Quorum bezieht sich auf den Zielserver, eine Warnung, dass er nicht vorhanden ist. Es ist eine eigenständige Testversion, daher spielt es keine Rolle, ob sie ausfällt.
Sie können eine Verbindung zu dem in der Einstellungsdatei als clientPort angegebenen Port herstellen.
$ cat /usr/local/etc/zookeeper/zoo.cfg | grep clientPort
clientPort=2181
Da Port 2181 angegeben ist, stellen Sie eine Verbindung dazu her.
$ which zkCli
/usr/local/bin/zkCli
$ sudo zkCli -server 127.0.0.1:2181
Connecting to 127.0.0.1:2181
Welcome to ZooKeeper!
JLine support is enabled
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0]
[zk: 127.0.0.1:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port
Folgen Sie dem Tutorial. znode bezieht sich auf jeden Knoten im ZooKeeper-Baum.
#Verzeichnisprüfung
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]
#Knoten(znode)Erstellen
[zk: 127.0.0.1:2181(CONNECTED) 1] create /test_node my_test_data
Created /test_node
#Erstellungsbestätigung
[zk: 127.0.0.1:2181(CONNECTED) 2] ls /
[test_node, zookeeper]
#Stellen Sie sicher, dass die von Ihnen erstellten Daten dem Knoten zugeordnet sind
[zk: 127.0.0.1:2181(CONNECTED) 3] get /test_node
my_test_data
cZxid = 0x8
ctime = Mon Jan 09 07:00:17 JST 2017
mZxid = 0x8
mtime = Mon Jan 09 07:00:17 JST 2017
pZxid = 0x8
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 0
#Versuchen Sie, die zugehörigen Daten zu ändern
[zk: 127.0.0.1:2181(CONNECTED) 4] set /test_node replaced_my_test_data
cZxid = 0x8
ctime = Mon Jan 09 07:00:17 JST 2017
mZxid = 0x9
mtime = Mon Jan 09 07:03:21 JST 2017
pZxid = 0x8
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 21
numChildren = 0
#Bestätigung
[zk: 127.0.0.1:2181(CONNECTED) 5] get /test_node
replaced_my_test_data # <-geändert
cZxid = 0x8
ctime = Mon Jan 09 07:00:17 JST 2017
mZxid = 0x9
mtime = Mon Jan 09 07:03:21 JST 2017
pZxid = 0x8
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 21
numChildren = 0
#Löschen
[zk: 127.0.0.1:2181(CONNECTED) 6] delete /test_node
#Bestätigung
[zk: 127.0.0.1:2181(CONNECTED) 7] ls /
[zookeeper]
python x zookeeper verwendet eine Bibliothek namens kazoo. Ich werde verschiedene Dinge gemäß den folgenden Dokumenten schreiben. kazoo
Installation von Kazoo
$ pip install kazoo
Versuchen Sie es grob
hello_kazoo.py
# coding:utf-8
from kazoo.client import KazooClient
from kazoo.client import KazooState
from kazoo.client import KeeperState
from kazoo.handlers.gevent import SequentialGeventHandler
import logging
logging.basicConfig()
#znode root
root = '/root'
#Tierpfleger Client
zk = KazooClient(hosts='127.0.0.1:2181', read_only=True, handler=SequentialGeventHandler())
#Starten Sie im asynchronen Modus
event = zk.start_async()
event.wait(timeout=3)
#Unterbrechen Sie die Verarbeitung, wenn keine Verbindung zum Zookeeper-Server hergestellt werden kann
if not zk.connected:
zk.stop()
raise Exception("Unable to connect.")
def listener(state):
'''
Listener beim Ändern des Status
'''
print('current state is ' + state)
zk.add_listener(listener)
@zk.add_listener
def watch_for_ro(state):
if state == KazooState.CONNECTED:
if zk.client_state == KeeperState.CONNECTED_RO:
print('state is read_only')
else:
print('state is writable')
def print_status(znode):
'''
Knotenstatus abrufen
'''
print('#####[DEBUG]#####')
#Überprüfen Sie die Versions- und Registrierungsdaten
data, stat = zk.get(znode)
print('Version: %s, data: %s' % (stat.version, data.decode('utf-8')))
#Rufen Sie eine Liste der untergeordneten Stammknoten ab
children = zk.get_children(root)
print("There are %s children with names %s" % (len(children), children))
def doAsync(async_obj):
'''
Rückruffunktion für die asynchrone Verarbeitung(Der Verarbeitungsinhalt hat keine besondere Bedeutung)
'''
znodes = async_obj.get()
try:
children = async_obj.get()
#Geben Sie die Namen aller untergeordneten Knoten aus
print('#####[print child znodes]#####')
for child in children:
print(child)
except (ConnectionLossException, NoAuthException):
print("ERROR!!!")
sys.exit(1)
if __name__ == '__main__':
#Transaktion starten
tx = zk.transaction()
##Überprüfen Sie die Grundverwendung
#Pfadgenerierung
zk.ensure_path(root)
#Erstellen, wenn kein Knoten erstellt wurde
znode = root + '/sample_znode'
if zk.exists(znode) is None:
zk.create(znode, b'sample_data')
print_status(znode)
#Datenaktualisierung
zk.set(znode, b'updated_data')
print_status(znode)
#Fügen Sie einen untergeordneten Knoten hinzu
znode2 = root + '/sample_znode2'
if zk.exists(znode2) is None:
zk.create(znode2, b'sample_data2')
print_status(znode2)
##So wird die asynchrone Verarbeitung verwendet
async_obj = zk.get_children_async(root)
async_obj.rawlink(doAsync)
#Knoten löschen
zk.delete(root, recursive=True)
#verpflichten
results = tx.commit()
print('#####[Result]#####')
print(results)
Ausführungsergebnis
$ python hello_kazoo.py
#####[DEBUG]#####
Version: 0, data: sample_data
There are 1 children with names ['sample_znode']
#####[DEBUG]#####
Version: 1, data: updated_data
There are 1 children with names ['sample_znode']
#####[DEBUG]#####
Version: 0, data: sample_data2
There are 2 children with names ['sample_znode', 'sample_znode2']
#####[print child znodes]#####
sample_znode
sample_znode2
#####[Result]#####
[]
$ sudo zkCli -server 127.0.0.1:2181
Sie können verschiedene Bewegungen überprüfen, indem Sie eine Verbindung zum ZooKeeper-Server herstellen und den Code während der Überprüfung nach und nach schreiben.
Recommended Posts