zookeeper架构部署

分布式开源协调服务之zookeeper(单节点和集群)

简介:
ZooKeeper是源代码开放的分布式协调服务,由雅虎创建,是Google的开源实现。ZooKeeper是Apache的子项目,之前是Hadoop项目的一部分,使用Java实现。
在这里插入图片描述

Zookeeper作用:

假设我们的程序是分布式部署在多台机器上,如果我们要改变程序的配置文件,需要逐一的去修改,非常麻烦。如果把这些配置全部放到zookeeper当中,保存在某个目录节点,然后所有相应的程序对这个目录节点进行监听,一旦信息发生变化,每个程序就会收到zookeeper的通知,然后通过zookeeper获取新的配置信息应用到系统当中

分布式系统中zookeeper实现配置管理+集群管理:
https://www.cnblogs.com/iforever/p/9095095.html

优点:
1、客户端发起事务请求,请求的结果在整个Zookeeper集群中所有的机器上的应用情况是一致的

2、同时能够保证客户端请求的顺序,,每个请求都会分配全局且唯一的递增编号。此编号的作用反映了事务操作的先后顺序。

3、全部数据保存在内存中,直接服务于所有的非实物请求。其中读的操作场景性能非常优秀

应用场景
主要用于Hadoop、Storm、消息中间件、RPC服务框架、分布式同步系统,不适合存储大量的数据。

**

Zookeeper工作原理

1、ZooKeeper的核心是广播,这个机制保证了各个Server之间的同步。

2、实现这个机制的协议叫做Zab协议。

3、Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。

4、当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader(单机)的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

5、为了保证事务的顺序一致性,ZooKeeper采用了递增的事务id号 (zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。


ZooKeeper官网地址

http://zookeeper.apache.org/doc/current/zookeeperOver.html
在这里插入图片描述



ZooKeeper安装

& ZooKeeper的安装包括单机模式安装,以及集群模式安装。

& 单机模式较简单,是指只部署一个zk进程,客户端直接与该zk进程进行通信。

& 在开发测试环境下,通过来说没有较多的物理资源,因此我们常使用单机模式。当然在单台物理机上也可以部署集群模式,但这会增加单台物理机的资源消耗。故在开发环境中,我们一般使用单机模式。

& 但是要注意,生产环境下不可用单机模式,这是由于无论从系统可靠性还是读写性能,单机模式都不能满足生产的需求。

所需软件:
1.下载地址:apache-zookeeper-3.5.5-bin.tar.gz

https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/apache-zookeeper-3.5.5-bin.tar.gz

2.jdk-8u171-linux-x64.tar.gz 网盘:两个版本随意拿取

链接:https://pan.baidu.com/s/190wXWHGEpKONlPnOYe6ZZw 
提取码:732q
[root@cong11 ~]# ls
apache-zookeeper-3.5.5-bin.tar.gz   jdk-8u171-linux-x64.tar.gz

1、配置hosts

[root@cong11 ~]# vim /etc/hosts

地址 和 名称 #对应

2、部署jdk

由于zookeeper依赖java环境,所以我们需要安装jdk,官网建议最低安装jdk 1.8版本

1、解压jdk

[root@cong11 ~]# tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/

2、配置jdk环境变量

[root@cong11 ~]# vim /etc/profile  #在文件最后加入一下行
JAVA_HOME=/usr/local/jdk1.8.0_171 
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar 
export PATH JAVA_HOME CLASSPATH

3、刷新变量

[root@cong11 ~]# source /etc/profile   #使环境变量生效

4、查看java环境

[root@cong11 ~]# java -version

3、部署ZooKeePer

1、解压安装包

[root@cong11 ~]# tar -zxf apache-zookeeper-3.5.5-bin.tar.gz -C /usr/local/

2、创建快照日志存放目录

[root@cong11 ~]# mkdir -p /data/zk/data

3、创建事务日志存放目录

[root@cong11 ~]# mkdir -p /data/zk/datalog

【注意】:如果不配置datalog,那么事务日志也会写在data目录中。这样会严重影响zk的性能。因为在zk吞吐量很高的时候,产生的事务日志和快照日志太多。

4、生成配置文件

[root@cong11 ~]# cd /usr/local/apache-zookeeper-3.5.5-bin/conf/
[root@cong11 conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[root@cong11 conf]# cp zoo_sample.cfg zoo.cfg

#复制一份zoo_sample.cfg文件并命名为zoo.cfg

5、修改主配置文件zoo.cfg

[root@cong11 conf]# vim zoo.cfg  
dataDir=/data/zk/data        #修改这一行为我们创建的目录
dataLogDir=/data/zk/datalog   #添加这一行

6、添加path环境变量

这里必须是修改配置文件添加path环境变量,不然启动报错

[root@cong11 ~]# vim /etc/profile         #将以下变量添加至最后一行
export ZOOKEEPER_HOME=/usr/local/apache-zookeeper-3.5.5-bin
export PATH=$ZOOKEEPER_HOME/bin:$PATH
[root@cong11 ~]# source /etc/profile

7、启动Zookeeper

[root@cong11 ~]# zkServer.sh start     #以下是输出结果
ZooKeeper JMX enabled by default
Using config: /usr/local/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Starting zookeeper ... already running as process 2058.

8、验证

[root@cong11 ~]# zkServer.sh status    
ZooKeeper JMX enabled by default
Using config: /usr/local/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone

可以看到端口,我们是单节点部署(standalone)

9、启动客户端:

[root@cong11 ~]# zkCli.sh

在这里插入图片描述




常用的命令

1、使用 ls 命令来查看当前 ZooKeeper 中所包含的内容

[zk: localhost:2181(CONNECTED) 1] ls /
 [zookeeper]

2、创建一个新的 znode ,使用 create /zkPro myData

[zk: localhost:2181(CONNECTED) 2] create /zkPro myData
Created /zkPro
[zk: localhost:2181(CONNECTED) 3] ls /   #再次查看内容
[zkPro, zookeeper]

3、使用 get 命令获取的znode中的字符串

[zk: localhost:2181(CONNECTED) 4] get /zkPro
myData

4、使用set命令修改字符串

[zk: localhost:2181(CONNECTED) 5] set /zkPro myData2
[zk: localhost:2181(CONNECTED) 6] get /zkPro
myData2

5、删除创建的znode

[zk: localhost:2181(CONNECTED) 7] delete /zkPro
[zk: localhost:2181(CONNECTED) 8] ls /
[zookeeper]            #可以看见我们创建的/zkPro被删除

了解编程人员使用zookeeper
网址:https://blog.csdn.net/dongdong9223/article/details/81349965


ZooKeePer集群搭建

Zookeeper节点部署越多,服务的可靠性越高,建议部署奇数个节点,因为zookeeper集群是以宕机个数过半才会让整个集群宕机的。
搭建集群可以选择在一台真实机上搭建多台zookeeper服务这种伪集群模式,我们这里选择在3台虚拟机上搭建zookeeper集群,测试环境可以使用伪集群模式,(生产环境不能使用)。

在这里插入图片描述
1、三台环境同时部署

[root@centos1 ~]# ls
apache-zookeeper-3.5.5-bin.tar.gz  jdk-8u181-linux-x64.tar.gz

2、配置hosts文件(依次更改hosts主机名)

[root@localhost ~]# hostnamectl set-hostname centos1、23
[root@centos1 ~]# vi /etc/hosts  #添加主机和名称对应
192.168.1.10 centos1
192.168.1.20 centos2
192.168.1.30 centos3

3、解压jdk,配置环境变量

[root@centos1 ~]# tar xf jdk-8u181-linux-x64.tar.gz 
[root@centos1 ~]# vim /etc/profile   在最后一行添加
JAVA_HOME=/root/jdk1.8.0_181
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
[root@centos1 ~]# source /etc/profile
[root@centos1 ~]#  java -version   ##查看java环境

4、解压ZooKeePer

[root@centos1 ~]# tar -zxf apache-zookeeper-3.5.5-bin.tar.gz -C /usr/local/
[root@centos1 ~]# mkdir -p /data/zk/data    #创建快照存放目录
[root@centos1 ~]# mkdir -p /data/zk/datalog    #创建事务存日志放目录

5、生成配置文件

[root@centos1 ~]# cd /usr/local/apache-zookeeper-3.5.5-bin/conf/
[root@centos1 conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg    #模板文件需要更改
[root@centos1 conf]# cp zoo_sample.cfg zoo.cfg    这样的话配置文件就生效了

6、修改zoo.cfg主配置文件

[root@centos1 conf]# vi zoo.cfg 
dataDir=/data/zk/data        #修改这一行为我们创建的目录
dataLogDir=/data/zk/datalog   #添加这一行

##在最后一行添加以下参数,和主机名要一致
server.1=contos1:2888:3888
server.2=contos2:2888:3888
server.3=contos3:2888:3888
#server.服务编号=服务地址、LF(集群之间)通信端口、leader选举端口

启动集群


Centos1上操作:(一会这台centos1服务器会成为主,可以这么理解)
[root@localhost ~]# echo 1 > /data/zk/data/myid    //设置id号为1
[root@localhost ~]# zkServer.sh start      //启动
[root@centos3 ~]# netstat -anput|grep 2181
Cetos2上操作:
[root@centos2 ~]# echo 2 > /data/zk/data/myid //id为2
[root@centos2 ~]# zkServer.sh start
[root@centos3 ~]# netstat -anput|grep 2181
Centos3上操作:
[root@centos3 ~]# echo 3 > /data/zk/data/myid   //id为3
[root@centos3 ~]# zkServer.sh start
[root@centos3 ~]# netstat -anput|grep 2181

centos1为主(可以理解为谁先启动,谁是主)
那么如果主坏了,其他的服务器会对比id号进行选主(id号谁大,谁是主)
#如果不会像以上说法一致,只有一种情况(有缓存)
如果主从切换跟原理不一致的时候,删除缓存 Rm -rf /data/zk/datalog/* # Rm -rf /date/zk/date/version-2 你在主从任何节点,删除或者写三台都会同步。他们是协调kafka集群的

查看状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

**设置开机启动**
[root@centos1 etc]# echo "zkServer.sh start" >> /etc/rc.local 
[root@centos1 etc]# chmod +x /etc/rc.local    加执行权限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值