Zookeeper官方架构图解析
zookeeper.png- zookeeper最少为三台且必须为奇数(3、5、7···)。
- 多个zookeeper服务器工作前会选举出一个节点作为leader(为了保持数据的一致性),其余的节点作为follower,如果这个leader节点宕掉,剩下的zookeeper服务器会知道这个leader宕掉,从而在剩余的节点中再选举出一个leader。
- zookeeper正常工作的前提是所有节点时间必须同步。
Zookeeper数据结构解析
shujujiegou.png- zookeeper维护一个和文件系统类似的数据结构;zookeeper集群中的每个节点都被路径唯一标识。
- 为了较快的读取速度,zookeeper中的数据都会v存放在JVM内存中。
搭建Zookeeper集群前的准备
- 配置SSH无秘钥登录。
先在一台机器上生成公钥和秘钥。
[wulei@bigdata-00 ~]$ ssh-keygen -t rsa
分发公钥到另外两太机器。
[wulei@bigdata-00 ~]$ ssh-copy-id bigdata-01
[wulei@bigdata-00 ~]$ ssh-copy-id bigdata-02
为了方便三台机器的互相登录,在其余两台做同样的操作。
- 集群时间的同步。(Zookeeper正常工作的前提)
在集群中找一台服务器作为时间服务器,开启服务并进行相应的配置
[wulei@bigdata-01 ~]$ sudo /etc/init.d/ntpd status
ntpd (pid 1724) is running...
[wulei@bigdata-01 ~]$ sudo vim /etc/ntp.conf
#修改如下
#Hosts on local network are less restricted.
restrict 192.168.200.0 mask 255.255.255.0 nomodify notrap
#修改如下
#Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#添加如下
server 127.127.1.0 #local clock
fudge 127.127.1.0 stratum 10
在三太服务器上为同步时间设置定时任务(crontab -e)
#time server
*/5 * * * * /usr/sbin/ntpdate bigdata-01 >/dev/null 2>&1
检验三台服务器时间是否同步
date1.pngdate2.png
date3.png
修改BIOS时间与操作系统时间同步
[wulei@bigdata-00 ~]$ sudo vim /etc/sysconfig/ntpd
#添加如下内容
SYNC_HWCLOCK=yes
正式搭建Zookeeper集群
- 解压Zookeeper包后并配置
- 创建zookeeper存放数据的目录
[wulei@bigdata-00 app]$ mkdir -p zookeeper-3.4.6/data/zkDate
[wulei@bigdata-00 zkDate]$ pwd
/opt/app/zookeeper-3.4.6/data/zkDate
- 修改配置文件中数据存储的目录。首先拷贝一份 conf/zoo_sample.cfg 并重命名为 zoo.cfg
[wulei@bigdata-00 zookeeper-3.4.6]$ mv conf/zoo_sample.cfg conf/zoo.cfg
[wulei@bigdata-00 zookeeper-3.4.6]$ vim conf/zoo.cfg
#修改如下
dataDir=/opt/app/zookeeper-3.4.6/data/zkDate
- 在配置文件中增加分布式节点。其中2888为监听端口,3888为选举的通信端口。
server.1=bigdata-00:2888:3888
server.2=bigdata-01:2888:3888
server.3=bigdata-02:2888:3888
- 将Zookeeper分发到其他两台机器上后分别在各自的数据存储目录下创建myid文件,标记所在机器的编号。
[wulei@bigdata-00 zkDate]$ cat myid
1
[wulei@bigdata-01 zkDate]$ cat myid
2
[wulei@bigdata-02 zkDate]$ cat myid
3
- 启动三个节点的Zookeeper进程
[wulei@bigdata-00 zookeeper-3.4.6]$ bin/zkServer.sh start
JMX enabled by default
Using config: /opt/app/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
-
查看三个节点的模式状态。看那一台是leader,那两台是follower
f1.png
f2.png
f3.png - 用Zookeeper客户端连接服务端以及基本命令的使用
[wulei@bigdata-00 zookeeper-3.4.6]$ bin/zkCli.sh
[zk: localhost:2181(CONNECTED) 2] create /test "wulei"
Created /test
[zk: localhost:2181(CONNECTED) 3] ls /
[zookeeper, test]
[zk: localhost:2181(CONNECTED) 4] get /test
"wulei"
[zk: localhost:2181(CONNECTED) 5] rmr /test
[zk: localhost:2181(CONNECTED) 8] ls /
[zookeeper]
-
在一个节点上创建一个文件,然后查看三个zookeeper节点数据是否同步
t1.png
t2.png
t3.png
刚开始学写博客,希望能被指出博客中的不足。
欢迎和我交流技术
网友评论