Zookeeper分布式集群部署

Zookeeper官方架构图解析

Zookeeper分布式集群部署_第1张图片
zookeeper.png
  1. zookeeper最少为三台且必须为奇数(3、5、7···)。
  2. 多个zookeeper服务器工作前会选举出一个节点作为leader(为了保持数据的一致性),其余的节点作为follower,如果这个leader节点宕掉,剩下的zookeeper服务器会知道这个leader宕掉,从而在剩余的节点中再选举出一个leader。
  3. zookeeper正常工作的前提是所有节点时间必须同步。

Zookeeper数据结构解析

Zookeeper分布式集群部署_第2张图片
shujujiegou.png
  1. zookeeper维护一个和文件系统类似的数据结构;zookeeper集群中的每个节点都被路径唯一标识。
  2. 为了较快的读取速度,zookeeper中的数据都会v存放在JVM内存中。

搭建Zookeeper集群前的准备

  1. 配置SSH无秘钥登录。
    先在一台机器上生成公钥和秘钥。

[wulei@bigdata-00 ~]$ ssh-keygen -t rsa

分发公钥到另外两太机器。

[wulei@bigdata-00 ~]$ ssh-copy-id bigdata-01
[wulei@bigdata-00 ~]$ ssh-copy-id bigdata-02

为了方便三台机器的互相登录,在其余两台做同样的操作。

  1. 集群时间的同步。(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.png

date2.png

date3.png

修改BIOS时间与操作系统时间同步

[wulei@bigdata-00 ~]$ sudo vim /etc/sysconfig/ntpd
#添加如下内容
SYNC_HWCLOCK=yes

正式搭建Zookeeper集群

  1. 解压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

  1. 将Zookeeper分发到其他两台机器上后分别在各自的数据存储目录下创建myid文件,标记所在机器的编号。

[wulei@bigdata-00 zkDate]$ cat myid
1
[wulei@bigdata-01 zkDate]$ cat myid
2
[wulei@bigdata-02 zkDate]$ cat myid
3

  1. 启动三个节点的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

  1. 查看三个节点的模式状态。看那一台是leader,那两台是follower


    f1.png

    f2.png

    f3.png
  2. 用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]

  1. 在一个节点上创建一个文件,然后查看三个zookeeper节点数据是否同步


    t1.png

    t2.png

    t3.png

刚开始学写博客,希望能被指出博客中的不足。
欢迎和我交流技术

你可能感兴趣的:(Zookeeper分布式集群部署)