Zookeeper的监听机制+文件系统(K,V结构)
Zookeeper 通过心跳检测NameNode的健康状况,一旦NameNode挂掉,会在slaves中选择另一个DataNode作为NameNode
NameNode的状态:active,standby
状态转换:NN挂掉自动转换状态,手动转换
Zookeeper特点:
Zookeeper:一个leader,多个follower
leader:负责进行投票的发起和决议,更新系统状态
follower:用于接收客户请求并向客户端返回结果,在选举leader过程中参与投票
集群只能是**奇数服务器,**只要有半数以上节点存活,Zookeeper就能正常提供服务
更新请求顺序进行,原子性更新数据
客户端连接的端口号2181
ZooKeeper集群部署
下载:https://archive.apache.org/dist/zookeeper/
1.解压zookeeper
cd /opt/module/
tar -xzvf zookeeper-3.4.10.tar.gz
2.在ZK家目录下创建datadir目录,myid文件
mkdir /opt/module/zookeeper-3.4.10/zkData
#bigdata执行
echo 1 > myid
#bigdata02执行
echo 2 > myid
#bigdata03执行
echo 3 > myid
3.修改zoo.cfg
cd /opt/module/zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
##########修改#################
dataDir=/opt/module/zookeeper-3.4.10/zkData
###########添加cluster##################
server.1=bigdata:2888:3888
server.2=bigdata02:2888:3888
server.3=bigdata03:2888:3888
4.添加环境变量(不是必须的)
vi /etc/profile
ZK_HOME=/opt/module/zookeeper-3.4.10
PATH=$PATH:$ZK_HOME/bin
export PATH
使环境变量立即生效
source /etc/profile
5.启动
cd /opt/module/zookeeper-3.4.10/bin
./zkServer.sh start
6.关联集群
./zkCli.sh -server bigdata:2181,bigdata02:2181,bigdata03:2181
7.zk使用
[root@bigdata bin]# ./zkCli.sh -server bigdata:2181,bigdata02:2181,bigdata03:2181 #关联zk节点
Connecting to bigdata:2181,bigdata02:2181,bigdata03:2181
2019-09-12 00:41:57,872 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
2019-09-12 00:41:57,876 [myid:] - INFO [main:Environment@100] - Client environment:host.name=bigdata
2019-09-12 00:41:57,876 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_221
2019-09-12 00:41:57,878 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2019-09-12 00:41:57,878 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/opt/module/jdk1.8.0_221/jre
2019-09-12 00:41:57,878 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/opt/module/zookeeper-3.4.10/bin/../build/classes:/opt/module/zookeeper-3.4.10/bin/../build/lib/*.jar:/opt/module/zookeeper-3.4.10/bin/../lib/slf4j-log4j12-1.6.1.jar:/opt/module/zookeeper-3.4.10/bin/../lib/slf4j-api-1.6.1.jar:/opt/module/zookeeper-3.4.10/bin/../lib/netty-3.10.5.Final.jar:/opt/module/zookeeper-3.4.10/bin/../lib/log4j-1.2.16.jar:/opt/module/zookeeper-3.4.10/bin/../lib/jline-0.9.94.jar:/opt/module/zookeeper-3.4.10/bin/../zookeeper-3.4.10.jar:/opt/module/zookeeper-3.4.10/bin/../src/java/lib/*.jar:/opt/module/zookeeper-3.4.10/bin/../conf:
2019-09-12 00:41:57,878 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2019-09-12 00:41:57,878 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2019-09-12 00:41:57,878 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2019-09-12 00:41:57,878 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2019-09-12 00:41:57,878 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2019-09-12 00:41:57,878 [myid:] - INFO [main:Environment@100] - Client environment:os.version=3.10.0-957.el7.x86_64
2019-09-12 00:41:57,878 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2019-09-12 00:41:57,878 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2019-09-12 00:41:57,878 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/opt/module/zookeeper-3.4.10/bin
2019-09-12 00:41:57,879 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=bigdata:2181,bigdata02:2181,bigdata03:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@306a30c7
Welcome to ZooKeeper!
2019-09-12 00:41:58,122 [myid:] - INFO [main-SendThread(bigdata:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server bigdata/192.168.228.128:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2019-09-12 00:41:58,635 [myid:] - INFO [main-SendThread(bigdata:2181):ClientCnxn$SendThread@876] - Socket connection established to bigdata/192.168.228.128:2181, initiating session
2019-09-12 00:41:58,971 [myid:] - INFO [main-SendThread(bigdata:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server bigdata/192.168.228.128:2181, sessionid = 0x16d23c6e7d90000, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: bigdata:2181,bigdata02:2181,bigdata03:2181(CONNECTED) 0]
[zk: bigdata:2181,bigdata02:2181,bigdata03:2181(CONNECTED) 0] #表示已经进入zk命令模式
#查看帮助
[zk: bigdata:2181,bigdata02:2181,bigdata03: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
#查看ls
[zk: bigdata:2181,bigdata02:2181,bigdata03:2181(CONNECTED) 2] ls /
[zookeeper]
#创建zk存储文件,内容为‘mydata’
[zk: bigdata:2181,bigdata02:2181,bigdata03:2181(CONNECTED) 3] create /zk mydata
Created /zk
[zk: bigdata:2181,bigdata02:2181,bigdata03:2181(CONNECTED) 4] ls /
[zk, zookeeper]
#查看/zk 存储内容
[zk: bigdata:2181,bigdata02:2181,bigdata03:2181(CONNECTED) 5] get /zk
mydata
cZxid = 0x100000002
ctime = Thu Sep 12 00:46:45 EDT 2019
mZxid = 0x100000002
mtime = Thu Sep 12 00:46:45 EDT 2019
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
#修改/zk存储内容为 ’ i love you’
[zk: bigdata:2181,bigdata02:2181,bigdata03:2181(CONNECTED) 6] set /zk 'i love you '
cZxid = 0x100000002
ctime = Thu Sep 12 00:46:45 EDT 2019
mZxid = 0x100000003
mtime = Thu Sep 12 00:48:32 EDT 2019
pZxid = 0x100000002
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
[zk: bigdata:2181,bigdata02:2181,bigdata03:2181(CONNECTED) 7] get /zk
i love you
cZxid = 0x100000002
ctime = Thu Sep 12 00:46:45 EDT 2019
mZxid = 0x100000003
mtime = Thu Sep 12 00:48:32 EDT 2019
pZxid = 0x100000002
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
```
#删除/zk
```
[zk: bigdata:2181,bigdata02:2181,bigdata03:2181(CONNECTED) 8] delete /zk
[zk: bigdata:2181,bigdata02:2181,bigdata03:2181(CONNECTED) 9] ls /
[zookeeper]
[zk: bigdata:2181,bigdata02:2181,bigdata03:2181(CONNECTED) 10] get /zookeeper
cZxid = 0x0
ctime = Wed Dec 31 19:00:00 EST 1969
mZxid = 0x0
mtime = Wed Dec 31 19:00:00 EST 1969
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
```
8.四字母命令的使用
常用的由四个字母组成的命令,配合telnet或nc命令使用:
命令 描述
conf zk服务配置的详细信息
stat 客户端与zk连接的简要信息
srvr zk服务的详细信息
cons 客户端与zk连接的详细信息
mntr zk服务目前的性能状况
wchs watch的简要信息
wchc watch的详细信息,客户端 -> watch的映射,线上环境要小心使用
wchp watch的详细信息, znode -> 客户端的映射,线上环境要小心使用
--------------------nc举例-------------------------------------
[root@bigdata02 yum.repos.d]# echo conf|nc bigdata 2181
clientPort=2181
dataDir=/opt/module/zookeeper-3.4.10/zkData/version-2
dataLogDir=/opt/module/zookeeper-3.4.10/zkData/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=1
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0
-------------------telnet举例-----------------------------------
[root@bigdata03 yum.repos.d]# telnet bigdata02 2181
Trying 192.168.228.129...
Connected to bigdata02.
Escape character is '^]'.
conf
clientPort=2181
dataDir=/opt/module/zookeeper-3.4.10/zkData/version-2
dataLogDir=/opt/module/zookeeper-3.4.10/zkData/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=2
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0
Connection closed by foreign host.