【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
1. 前言
19年过的还蛮快,这篇博客作为20年的第一篇,我想在这里为前一年做一个简单的总结:说真的,19年过的蛮凄惨的。😄没错,总结就是这一句话,毕竟仪式感必须还是要有的。
好了,不说这些了,希望20年过的好吧,多存点钱,少点烦恼。
2. 简单说一下zookeeper是什么,可以解决什么问题
ZooKeeper 是Hadoop下的一个子项目,它是一个针对大型分布式系统的可靠协调系统;它提供的功能包括:配置维护、名字服务、分布式同步、组服务等; 它的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
- 统一命名
在分布式环境中统一命名服务就像域名与ip一样,IP不容易记住,域名比较容易记住,统一命名服务,可以直接来通过服务名称获取服务的地址等关键信息。 - 配置管理 这个比较好理解,在分布式项目中,每个项目的配置提取出来,统一管理。目前市面上用的多的是apollo,nacos,spring cloud conifg等
- 集群管理 担任服务生产者和服务消费者的注册中心,服务生产者将自己提供的服务注册到Zookeeper中心,服务的消费者在进行服务调用的时候先到Zookeeper中查找服务,获取到服务生产者的详细信息之后,再去调用服务生产者的内容与数据。
- 分布式通知与协调 心跳机制,消息推送等
- 分布式锁 听说这个倒是市面上用的比较多,不过我所在的公司在分布式锁是redis实现的,这块并不是很了解。
- 分布式队列
3. zookeeper中的角色
zk中存在三种角色:leader,follower,observer;
leader:主要是数据恢复,维持心跳,是zk集群中的主节点
follower:参与leader的选举,处理leader的建议
observer:与follower类似,但不参与leader的选举,如果集群中读的负载比较高的情况下,增加observer比增加follower所带来的负面影响要好得多(因为不参与选举,leader就可以减少leader发送选举的请求)
画一张简图。
4. zookeeper单机部署
下载地址 https://zookeeper.apache.org/
我这里下载的是3.4.14版本
解压文件
进入zookeeper-3.4.14/conf目录,拷贝zoo_sample.cfg文件为zoo.cfg
进入bin目录,执行
./zkServer.sh start
停止服务直接键入:./zkServer.sh stop
查看服务状态:./zkServer.sh status
客户端链接:
./zkCli.sh
单机还是蛮简单的,直接找到运行文件执行相应命令即可。
5. zookeeper集群部署
我这里部署4个zk实例,其中一台observer,进入conf目录
配置文件解释
拷贝zoo.cfg文件
cp zoo.cfg zoo1.cfg
编辑zoo1.cfg文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/data_1 #新建对应目录
clientPort=2181
dataLogDir=/zookeeper/logs_1 #新建对应目录
# server.x中的x需要和myid一致,第一个客户端用户Leader和Learner之间同步,第二个端口用于选举过程中的投票通信
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
server.4=localhost:2890:3890:observer
另外拷贝三份zoo1.cfg文件
cp zoo1.cfg zoo2.cfg
cp zoo1.cfg zoo3.cfg
cp zoo1.cfg zoo4.cfg
修改文件中的端口号:clientPort,dataDir,dataLogDir,并新建对应的目录 下面贴上其他三个实例的配置文件内容
zoo2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/data_2 #新建对应目录
clientPort=2182
dataLogDir=/zookeeper/logs_2 #新建对应目录
# server.x中的x需要和myid一致,第一个客户端用户Leader和Learner之间同步,第二个端口用于选举过程中的投票通信
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
server.4=localhost:2890:3890:observer
zoo3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/data_3 #新建对应目录
clientPort=2183
dataLogDir=/zookeeper/logs_3 #新建对应目录
# server.x中的x需要和myid一致,第一个客户端用户Leader和Learner之间同步,第二个端口用于选举过程中的投票通信
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
server.4=localhost:2890:3890:observer
zoo4.cfg 这个实例是observer,要加上peerType=observer配置
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/data_4 #新建对应目录
clientPort=2184
dataLogDir=/zookeeper/logs_4 #新建对应目录
peerType=observer
# server.x中的x需要和myid一致,第一个客户端用户Leader和Learner之间同步,第二个端口用于选举过程中的投票通信
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
server.4=localhost:2890:3890:observer
在4个data文件夹下新建myid文件
echo "1" > /zookeeper/data_1/myid
echo "2" > /zookeeper/data_2/myid
echo "3" > /zookeeper/data_3/myid
echo "4" > /zookeeper/data_4/myid
启动实例
zkServer.sh start zookeeper-3.4.14/conf/zoo1.cfg
zkServer.sh start zookeeper-3.4.14/conf/zoo2.cfg
zkServer.sh start zookeeper-3.4.14/conf/zoo3.cfg
zkServer.sh start zookeeper-3.4.14/conf/zoo4.cfg
查看实例状态
zkServer.sh status zookeeper-3.4.14/conf/zoo1.cfg
zkServer.sh status zookeeper-3.4.14/conf/zoo2.cfg
zkServer.sh status zookeeper-3.4.14/conf/zoo3.cfg
zkServer.sh status zookeeper-3.4.14/conf/zoo4.cfg
可以看到 各个实例的角色 1和3是follower,2为leader,4为observer
输入./zkCli.sh -server localhost:2181连接
创建一个节点
create /test 'test1'
然后连接其他实例,也能看到同步到的数据节点
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper, test]
[zk: localhost:2182(CONNECTED) 0] ls /
[zookeeper, test]
[zk: localhost:2183(CONNECTED) 0] ls /
[zookeeper, test]
[zk: localhost:2184(CONNECTED) 0] ls /
[zookeeper, test]
来源:oschina
链接:https://my.oschina.net/u/3553496/blog/3154477