Les conseils de la famille principale sont ici. Je comprends qu'il est facile de mettre en œuvre un traitement distribué des lots, ce qui est difficile lorsqu'il est assemblé correctement.
$ brew install zookeeper
$ ls /usr/local/etc/zookeeper
defaults log4j.properties zoo.cfg zoo_sample.cfg
Même si vous comparez le fichier de configuration placé par défaut avec Tutorial, c'est presque le même, alors démarrez-le tel quel Essayer.
$ 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
Le journal est sorti ci-dessous
$ 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
Quelque chose est sorti. quorum fait référence au serveur de destination, un avertissement indiquant qu'il n'existe pas. C'est un essai autonome ici, donc peu importe qu'il soit sorti.
Vous pouvez vous connecter au port spécifié comme clientPort dans le fichier de paramètres.
$ cat /usr/local/etc/zookeeper/zoo.cfg | grep clientPort
clientPort=2181
Puisque le port 2181 est spécifié, connectez-vous à celui-ci.
$ 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
Suivez le Tutoriel. znode fait référence à chaque nœud de l'arborescence ZooKeeper.
#Vérification du répertoire
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]
#nœud(znode)Créer
[zk: 127.0.0.1:2181(CONNECTED) 1] create /test_node my_test_data
Created /test_node
#Confirmation de création
[zk: 127.0.0.1:2181(CONNECTED) 2] ls /
[test_node, zookeeper]
#Assurez-vous que les données que vous avez créées sont associées au nœud
[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
#Essayez de modifier les données associées
[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
#Vérification
[zk: 127.0.0.1:2181(CONNECTED) 5] get /test_node
replaced_my_test_data # <-modifié
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
#Effacer
[zk: 127.0.0.1:2181(CONNECTED) 6] delete /test_node
#Vérification
[zk: 127.0.0.1:2181(CONNECTED) 7] ls /
[zookeeper]
python x zookeeper utilise une bibliothèque appelée kazoo. J'écrirai diverses choses selon les documents suivants. kazoo
installation de kazoo
$ pip install kazoo
Essayez grossièrement
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()
#racine znode
root = '/root'
#client gardien de zoo
zk = KazooClient(hosts='127.0.0.1:2181', read_only=True, handler=SequentialGeventHandler())
#Démarrer en mode asynchrone
event = zk.start_async()
event.wait(timeout=3)
#Suspendre le traitement si impossible de se connecter au serveur zookeeper
if not zk.connected:
zk.stop()
raise Exception("Unable to connect.")
def listener(state):
'''
Auditeur lors du changement d'état
'''
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):
'''
Obtenir l'état du nœud
'''
print('#####[DEBUG]#####')
#Vérifier la version et les données d'enregistrement
data, stat = zk.get(znode)
print('Version: %s, data: %s' % (stat.version, data.decode('utf-8')))
#Obtenir une liste des nœuds enfants racine
children = zk.get_children(root)
print("There are %s children with names %s" % (len(children), children))
def doAsync(async_obj):
'''
Fonction de rappel de traitement asynchrone(Il n'y a pas de signification particulière dans le contenu du traitement)
'''
znodes = async_obj.get()
try:
children = async_obj.get()
#Afficher les noms de tous les nœuds enfants
print('#####[print child znodes]#####')
for child in children:
print(child)
except (ConnectionLossException, NoAuthException):
print("ERROR!!!")
sys.exit(1)
if __name__ == '__main__':
#Commencer la transaction
tx = zk.transaction()
##Vérifiez l'utilisation de base
#Génération de chemin
zk.ensure_path(root)
#Créer si znode n'a pas été créé
znode = root + '/sample_znode'
if zk.exists(znode) is None:
zk.create(znode, b'sample_data')
print_status(znode)
#Mise à jour des données
zk.set(znode, b'updated_data')
print_status(znode)
#Ajouter un nœud enfant
znode2 = root + '/sample_znode2'
if zk.exists(znode2) is None:
zk.create(znode2, b'sample_data2')
print_status(znode2)
##Le traitement asynchrone est utilisé comme ceci
async_obj = zk.get_children_async(root)
async_obj.rawlink(doAsync)
#Supprimer le nœud
zk.delete(root, recursive=True)
#commettre
results = tx.commit()
print('#####[Result]#####')
print(results)
Résultat d'exécution
$ 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
Vous pouvez vérifier divers mouvements en vous connectant au serveur ZooKeeper avec et en écrivant le code petit à petit tout en vérifiant.
Recommended Posts