实用为目的,不深究原理
1、简介
关键词:分布式
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
2、Zookeeper能做什么事情呢,简单的例子:
关键词:自动感知、自动启用备用总服务器
假设我们有20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请求)。搜索引擎的服务器中的15个服务器提供搜索服务,5个服务器正在生成索引。这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以提供搜索服务了。使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,当总服务器宕机时自动启用备用的总服务器。
3、ZooKeeper的基本运转流程:
A)选举Leader。
B)同步数据。
C)选举Leader过程中算法有很多,但要达到的选举标准是一致的。
D)Leader要具有最高的执行ID,类似root权限。
E)集群中大多数的机器得到响应并接受选出的Leader。
1、Demo需求
一台虚拟机模拟3个zkServer集群安装
2、下载
net-tools、lrzsz插件
3、工具
VMware、Xshell 5
1. 新建虚拟机
创建新的虚拟机--》典型,下一步--》找到映射文件(我用的是CentOS-7-x86_64-Minimal-1511.iso),下一步--》设置虚拟机名称和保存位置,下一步
--》设置磁盘大小(我一般设置20G)。选择存储为单个文件。下一步--》自定义硬件,虚拟机内存设为2048M --》完成
启动之后,选择语言、设置密码什么的,这里就不赘述了
2. 创建文件目录
如图示,先在根目录下创建绿色的目录结构。分别修改文件data的myid为1、2、3
3. 更改虚拟机联网配置,目的是允许虚拟机联网下载等下要用的插件net-tools和lrzsz
cd /etc/sysconfig/network-scripts
vi ifcfg-eno*****(一堆数字),改ONBOOT=yes
修改完后shutdown -r now 立即重启应用配置
4. 下载和安装插件
1) 下载net-tools
目的:因为使用Xshell连接虚拟机比VMware本身要好用,但是连接条件是虚拟机的ip地址。所以使用它的ifconfig命令查虚拟机的ip
命令:yum install -y net-tools.x86_64
下载完成,查询ip:
2) 下载并安装lrzsz
目的:方便向虚拟机导入宿主机的文件
命令:yum -y install lrzsz
5. 使用Xshell 5连接虚拟机
参数:虚拟机ip
步骤:文件--》新建--》填入名称、主机ip(虚拟机的)--》确定--》使用虚拟机的用户、密码登录
6. 导入jdk并解压,配置环境变量
命令:
① 导入。rz
② 解压。tar -xzvf jdk的压缩包名称
③ 压缩包已完成使命,删除它。rm
④ 将jdk1.8.0_102名字改简单点。mv
⑤ 配置jdk环境变量
命令:vi /etc/profile
在最后加上JAVA_HOME和PATH
source /etc/profile 使配置立即生效
⑥ Java -version测一下
7. 导入zk,复制3分,创建并配置zoo.cfg
① 进入/root/zk
② rz导入zookeeper-3.4.6.tar.gz
③ 解压。tar -xzvf zookeeper-3.4.6.tar.gz
④ 删除压缩包。rm-xzvf zookeeper-3.4.6.tar.gz
⑤ 重命名。mv zookeeper-3.4.6/ zk1
⑥ 再复制2个。
⑦ root/zk/zk1/conf复制zoo_sample.cfg,并重命名为zoo.cfg。zk2\zk3同样处理
⑧ 分别修改每个zk/conf下的zoo.cfg
如下图所示
dataDir=/tmp/zk1(zk2或者zk3)
Clientport=2181(2182或者2183)
⑨ 至此配置已完成,启动zkServer使用jps查看进程,如果存在QuorumPeerMain就成功了。
a 启动zkServer前,jps查看进程
b 启动zk1/2/3的bin目录下的zkServer
c jps再次查看进程,可见zk已配置成功
三、Zookeeper总结
本文主要是zookeeper在linux环境下的部署,技术能力要求不算高,能熟练使用linux命令就能部署出来。