zookeeper学习总结

一直是搞不清楚zookeeper的原理和运行机制,今天呢就好好的总结一番。
zookeeper作为一个开源的分布式应用协调系统,已经用到了许多分布式项目中,用来完成统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等工作。
#分布式# 分布式概念呢 是多个物理机通过网络连接作为项目的服务器,将之前单个物理机的压力由多个物理机来分担,之前的线程锁就因为不共享一个内存块而无法在加上锁,这就需要引入一些分布式锁,zookeeper就是其中的一个解决。
先建一个目录存放zookeeper文件这里写图片描述
接下来下载zookeeper安装包,刚开始照着着别人吵了了半天,这里写图片描述一直显示404,原来是版本过期了,只得自立更生了,找到apache官网里面的zookeeper下载版本,现在已经是3.4.11了,以后下载不了可以直接试下把版本号改成更高版本说不定就可以了。这里写图片描述https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.11/放一下地址)
解压到当前文件夹 这里写图片描述
tar -xf zookeeper-3.4.11.tar.gz
解压完 进入conf 复制 zoo_sample.cfg 文件的并重命名命名为为 zoo.cfg:
cp zoo_sample.cfg zoo.cfg
修改zoo.cfg内容 vim zoo.cfg 增加了datafile 和 Logfile共四行
这里写图片描述

# The number of milliseconds of each tick

    # zookeeper 定义的基准时间间隔,单位:毫秒
    tickTime=2000

    # The number of ticks that the initial 
    # synchronization phase can take
    initLimit=10
    # The number of ticks that can pass between 
    # sending a request and getting an acknowledgement
    syncLimit=5
    # the directory where the snapshot is stored.
    # do not use /tmp for storage, /tmp here is just 
    # example sakes.
    # dataDir=/tmp/zookeeper

    # datafile
    dataDir=/usr/local/services/zookeeper/zookeeper-3.4.9/data

    # Logfile
    dataLogDir=/usr/local/services/zookeeper/zookeeper-3.4.9/logs

    # the port at which the clients will connect
    # 客户端访问 zookeeper 的端口号
    clientPort=2181

    # the maximum number of client connections.
    # increase this if you need to handle more clients
    #maxClientCnxns=60
    #
    # Be sure to read the maintenance section of the 
    # administrator guide before turning on autopurge.
    #
    # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
    #
    # The number of snapshots to retain in dataDir
    #autopurge.snapRetainCount=3
    # Purge task interval in hours
    # Set to "0" to disable auto purge feature
    #autopurge.purgeInterval=1
    server.1=172.16.96.129:2888:3888

同时在dataDir下建立一个myid文本 内容为1 与sever.1对应
打开 /etc/ 目录下的配置文件 profile:
vim /etc/profile
并在其尾部追加如下内容:

# idea - zookeeper-3.4.11 config start - 2017-11-11

export ZOOKEEPER_HOME=/usr/local/services/zookeeper/zookeeper-3.4.11/
export PATH=$ZOOKEEPER_HOME/bin:$PATH
export PATH

# idea - zookeeper-3.4.9 config start - 2017-11-11

使 /etc/ 目录下的 profile 文件生效:
source /etc/profile
psssss —– Linux系统变量设置 source重启就需要重新配置变量 ——-
设置永久环境变量

1.环境变量配置中,要先删除.bash_profile中的三行关于.bashrc的 定义,然后把环境变量配置在.bashrc中
2.选择要使用的java环境:update-alternatives –config java
3.要使得刚修改的环境变量生效:source .bashrc
4.查看环境变量:env

可以放到/etc/bash/bashrc,这样就是系统级的

最后!启动 zookeeper 服务:
zkServer.sh start
如打印如下信息则表明启动成功:
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
Starting zookeeper … STARTED

查询 zookeeper 状态:
zkServer.sh status

关闭 zookeeper 服务:

    zkServer.sh stop
如打印如下信息则表明成功关闭:
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

重启 zookeeper 服务:

    zkServer.sh restart
如打印如下信息则表明重启成功:
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

这里写图片描述
莫名其妙就启动了 。。 据说需要先安装jdk ,原来我之前无聊把java给装了
apt install java 这种安装方式似乎把环境变量也配置了呢
接下来看下 java的环境变量和安装地址:

 whereis javawhich java (显示java执行路径)echo $JAVA_HOME
  echo $PATH
```![查看环境变量和安装地址](https://img-blog.csdn.net/20171111142131068?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXpqMTMwODE5MDIxNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
OK 服务器部署似乎成功了哦

接下来来访问下这个服务器吧
本地 直接python模块的 kazoo可以提供客户端连接与访问 写法如下





<div class="se-preview-section-delimiter"></div>

from kazoo.client import ZookeeperClient,ZookeeperState
yyy = ZookeeperClient(“172.16.96.129:2181”,read_only=True)
yyy.start()
yyy.create(“/test”)
yyy.create(“/test/hei”,”HelloWorld”)
yyy.get(“/test/hei”)

访问很成功 可以直接写入节点并访问

接下来就是在其他机器上访问了!
出现了一个很大的问题 不知道为什么一直连接不上!!!!

解决中。。。。。。。。。。。。。。。。。
这里使用的是window7下的pycharm来访问,却一直报错




<div class="se-preview-section-delimiter"></div>

WARNING:kazoo.client:Connection dropped: socket connection error: None
WARNING:kazoo.client:Connection dropped: socket connection error: None

百度一下
发现有的人说需要把防火墙关了
看了两个centenos系统指令 
  指令1 service iptables stop      失败了
  指令2 /etc/init.d/iptables stop 也失败了
  似乎不行啊

  再找下ubuntu的指令 (本次搭建在ubuntu系统上)
指令三  ufw disable  成功关闭防火墙了哦*****
再试下能不能连上 重启服务
呃呃呃、还是没连上



重新开了一台虚拟机,




<div class="se-preview-section-delimiter"></div>

from kazoo.client import ZookeeperClient,ZookeeperState
yyy = ZookeeperClient(“172.16.96.129:2181”,read_only=True)
yyy.start()
yyy.get(“/test/hei”)
“`
正常连接正常获取值 哎!看来问题是搞不定了 先放着等大神来帮我解答吧

感谢大神帮忙解答,原来是虚拟机和本机网络没ping通,只需要将虚拟机和本机连接上就可以了ping通方式看这里

OK 搭一个单机单服务的zookeeper就先这样了 ,有空再搭个集群。

from kazoo.client import ZookeeperClient,ZookeeperState
yyy = ZookeeperClient("172.16.96.129:2181",read_only=True)
yyy.start()
yyy.get("/test/hei")

正常连接正常获取值 哎!看来问题是搞不定了 先放着等大神来帮我解答吧

感谢大神帮忙解答,原来是虚拟机和本机网络没ping通,只需要将虚拟机和本机连接上就可以了ping通方式看这里。直接在net连接方式下同一个网段可以连接上。 编辑–虚拟网络编辑器,对nat模式下的地址进行修改,改成同一个网段。

—总结—刚才操作的时候ping通也废了大半个早上,主要是网段不一致的问题 这里贴上在了解同一个网段时某个大神的回答

问题为 192.168.0.6 掩码为255.255.255.0 ping 192.168.1.3 掩码为255.255.0.0 无法成功连接
《一点该说的基础知识》

   首先,对于一个使用标准的ABCDE分类编址方案的IP地址,其实可以看成: IP地址 = 网络号 + 主机号。其中网络号由本机IP地址与本机网络掩码做与运算获得,主机号由本机IP地址与本机网络掩码的反码做与运算获得。比如说你举的例子中,对于PCA,网络号为 Net_IdA=192.168.0.0,主机号为 Host_IdA=0.0.0.6;对于PCB,网络号为 Net_IdB=192.168.0.0,主机号为 Host_IdB=0.0.1.3。看到这,你肯定要大呼,这俩丫的网络号不是一样的么,那就是在同一个子网啊,为什么不通呢?别急着下结论,请耐心往下看~

   其次,ping操作的实际内涵是什么?看下面的步骤:

(1)由本机构造一个ICMP请求包,发送给目的主机;
(2)目的主机处理后构造一个ICMP响应包,返回给本机;
(3)本机根据是否收到响应包,以及响应包的内容得到本次ping的结果,并交由显示器呈现给用户。
也就是说,一次成功的ping操作其实是一次完整的双向通信过程,并非只要本机能将请求发送出去就算好了的。数据包要能出得去,更要回得来。

   最后还要说明的是一台主机要给另一台主机发送数据时的工作流程,以A向B发送数据为例,如下图:

这里写图片描述

《下面我们再来分析你的实验过程》

PCA ping PCB
当PCA构造好ICMP请求包打算发送给PCB时,参照上面的流程图,其处理过程应当如下:
(1)PCA首先将PCB的IP地址192.168.1.3与自己的掩码255.255.255.0做与运算,得到它所认为的PCB的网络号:Net_IdB’=192.168.1.0【注意到Net_IdB’与Net_IdB并不一致】;
(2)然后用这个 Net_IdB’ 与自己的网络号 Net_IdA=192.168.0.0 作比较,发现不一样;
(3)PCA把构造好的ICMP请求包交付给网关,但网关不存在,于是请求发送失败。
呈现给你的直观现象就是 PCA ping PCB 不通【我猜系统给出的响应应该是:目标主机不可达(中文系统)/Destination Host Unreachable(英文系统)】,原因在于数据包出不去。

PCB ping PCA
当PCB构造好ICMP请求包打算发送给PCB时,参照上面的流程图,其处理过程应当如下:
(1)PCB首先将PCA的IP地址192.168.0.6与自己的掩码255.255.0.0做与运算,得到它所认为的PCA的网络号:Net_IdA’=192.168.0.0【注意到Net_IdA’与Net_IdA是一致的】;
(2)然后用这个 Net_IdA’ 与自己的网络号 Net_IdB=192.168.0.0 作比较,发现一样;
(3)PCB把构造好的ICMP请求包直接交付给PCA 。
PCA处理后构造完成ICMP响应包,打算回给PCB,其处理过程和前文PCA向PCB发送请求包一致,结果是PCA发送响应包失败。
呈现给你的直观现象就是 PCB ping PCA 不通【我猜系统给出的响应应该是:请求超时(中文系统)/Request timed out(英文系统)】,原因在于数据包回不来。

《配置的时候应该注意什么》

   如果你不是有什么特殊需求的话,那么你应该为你同一子网内的所有主机配置相同的掩码。

OK 搭一个单机单服务的zookeeper就先这样了 ,有空再搭个集群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值