ZooKeeper学习笔记——基本使用

单机模式

单机部署ZK服务很简单。ZK服务包含在一个jar包文件中,需要创建一个配置文件。在conf目录下创建zoo.cfg,例如:

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
  • tickTime(ms) ZK使用的基本时间单位,用于心跳机制,session超时时间是该配置值的两倍。
  • dataDir 存储内存数据库快照的目录,除非另有说明,否则记录数据库更新的事务日志。
  • clientPort 监听客户端连接的端口,默认2181

配置完成即可通过如下命令启动ZK

bin/zkServer.sh start

ZK的日志使用log4j,可通过log4j的配置管理ZK的日志记录。

管理ZK存储

对于长时间运行的生产系统,ZK的存储必须在外部进行管理。

连接到ZK

$ bin/zkCli.sh -server 127.0.0.1:2181

就像文件操作一样简单,如果连接成功,将看到类似如下信息:

Connecting to localhost:2181
log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
Welcome to ZooKeeper!
JLine support is enabled
[zkshell: 0]

help命令可以获取命令列表,例如:

[zkshell: 0] help
ZooKeeper host:port cmd args
        get path [watch]
        ls path [watch]
        set path data [version]
        delquota [-n|-b] path
        quit
        printwatches on|off
        createpath data acl
        stat path [watch]
        listquota path
        history
        setAcl path acl
        getAcl path
        sync path
        redo cmdno
        addauth scheme auth
        delete path [version]
        setquota -n|-b val path

可尝试更多的操作,如:ls /

[zkshell: 8] ls /
[zookeeper]

创建一个znode节点,create /zk_test my_data,该节点存储了"my_data"

[zkshell: 9] create /zk_test my_data
Created /zk_test

通过get查看节点

[zkshell: 12] get /zk_test
my_data
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 5
mtime = Fri Jun 05 13:57:06 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0
dataLength = 7
numChildren = 0

通过set命令修改node数据

[zkshell: 14] set /zk_test junk
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 6
mtime = Fri Jun 05 14:01:52 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0
dataLength = 4
numChildren = 0
[zkshell: 15] get /zk_test
junk
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 6
mtime = Fri Jun 05 14:01:52 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0
dataLength = 4
numChildren = 0

delete删除node节点

[zkshell: 16] delete /zk_test
[zkshell: 17] ls /
[zookeeper]
[zkshell: 18]

集群模式

集群模式下,所有的服务器都有同样的配置文件集群模式,最少需要3台服务器。 配置文件和单机模式类似,只有稍许差异,如下:

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
  • initLimit ZK集群成员必须连接上leader的超时限制,该数字是指tickTime的多少倍,该例中5表示的是10s。
  • syncLimit ZK集群成员能够落后于leader多长时间,同样是tickTime的多少倍。

每台服务器上,只需要一个server.X,后面的两个端口2888:3888,第一个用于集群节点之间通信(update操作同步),后者用于leader选举。

每台服务器在dataDir目录下创建一个myid文件,内部填写server.X中的X值。

查看当前ZooKeeper状态

单机模式
[root@wuxiaowu-server bin]# ./zkServer.sh status
JMX enabled by default
Using config: /opt/zktest/zk1/bin/../conf/zoo.cfg
Mode: standalone
集群的follower
[root@wuxiaowu-server bin]# ./zkServer.sh status
JMX enabled by default
Using config: /opt/zktest/zk3/bin/../conf/zoo.cfg
Mode: follower
集群的leader
[root@wuxiaowu-server bin]# ./zkServer.sh status
JMX enabled by default
Using config: /opt/zktest/zk1/bin/../conf/zoo.cfg
Mode: leader

日志配置

conf目录下的log4j.properties配置文件配置

另外需要在bin目录下修改zkEnv.sh配置

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
    ZOO_LOG4J_PROP="INFO,CONSOLE"
fi

改为(打开log文件记录配置)

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="."
fi

改为(默认在bin目录下)

if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="/opt/zktest/zk2/logs"
fi

你可能感兴趣的:(分布式)