Zookeeper

云计算 waitig 394℃ 百度已收录 0评论

Linux下下载Zookeeper

wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

Zookeeper配置文件

dataDir=’/XX/XX’(数据的存放目录)

server.1=192.168.xx.xx(或者主机名):2888(leader与follower通信端口) :3888(投票端口)
server.2=192.168.xx.xx(或者主机名):2888(leader与follower通信端口) :3888(投票端口)
server.3=192.168.xx.xx(或者主机名):2888(leader与follower通信端口) :3888(投票端口)

需要把myid记录到数据文件中

文件名字就是myid,内容是1;

scp -r apps/ root@mini2: /root

启动zookeeper

bin/zkServer.sh start
bin/zkServer.sh status:查看状态

zookeeper客户端工具

bin/zkcli.sh
connect mini2:2181 连接到mini2主机上

Zookeeper数据结构

类似于文件系统的树;

/下面默认有1个zookeeper
//创建节点
create /app1 “this is app1 servers parent“
节点除了数据之外,还有cZxid,ctime等

//-s 创建带序号
create -s /test/aa 999
created /test/aa00000000

create -s /test/bb 999
created /test/aa00000001

get /app1 watch:打出app1的数据,然后提供观测功能(获取数据的时候设置监听)
比如在另一个客户端上更改了app1的数据,那么此处显示:
WATCHER::
watchedEvent state:SyncConnected type:NodeDataChanged path:/app1

get 就是监听这个节点的数据,如果子节点发生变化,是不会检测到响应
如果监听字节点,那么 ls /app1 watch , 那么字节点发生变化会响应

集群启动zookeeper

某个脚本执行的时候在bash进程中,可能看不到当前定义的变量。
如果export a=1

//s1.sh
#!/bin/bash
b=2
echo "in s1,b="$b
echo "in s1,a="$a
./s2.sh
//s2.sh
#!/bin/bash
b=2
echo "in s2,a="$a
echo "in s2,b="$b

./s1.sh
in s1,b=2
in s1,a=1
in s2,b=
in s1,a=1

如果在s1.sh中export b=2,那么s2可以正常打印

如果是export,那么当前进程及其子进程中会有。

#!/bin/bash
echo "start zkServer..."
for i in 1 2 3
do
ssh hdp-node-0$i "source /etc/profile;/home/hadoop/apps/zookeeper/bin/zkServer.sh start"
done

在mini1里source一下,那么在ssh mini2启动发现成功

用户登录 的时候,会执行一个脚本 .bash_profile

#.bash_profile
if  [-f ~/.bashrc ]; then
    .  ~/.bashrc   //.代表source
fi
#.bashrc
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

if  [-f /etc/bashrc ]; then
    .  /etc/bashrc   //.代表source
fi

/etc/profile中也会有

在script.sh中定义的变量,在当前登录的shell进程中,source script.sh时候,脚本中定义的变量也会进入到当前登录进程中。

scp-copy-id mini1
scp-copy-id mini2
scp-copy-id mini3
那么mini1免密登录到mini2和mini3

./zkCli.sh:使用客户端命令行连接到zookeeper,默认连接到本机。如果连接到其他机器,那么继续使用connect centos:2181(客户端连接默认端口)

动态增加机器的时候

zookeeper集群
需求:客户端能够实时洞察到服务器上下线的变化。

启动时候去zookeeper注册,比如写到 /server/server-01 mini1
第二台来的时候 server-02 mini2
第三台来的时候 server-03 mini3
注册的数据节点必须是临时节点(序列化的临时节点),
客户端启动的时候去getchildren,获取当前在线服务器列表,并且注册监听,
如果有服务器下线,那么zookeeper就会通知到客户端


本文由【waitig】发表在等英博客
本文固定链接:Zookeeper
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)