安装zookeeper集群

zookeeper集群的安装

 

  顾名思义zookeeper就是动物园管理员,他是用来管hadoop(大象)、Hive(蜜蜂)、pig(小猪)的管理员, Apache Hbase和 Apache Solr 的分布式集群都用到了zookeeper;Zookeeper:是一个分布式的、开源的程序协调服务,是hadoop项目下的一个子项目。

  一、zookeeper主要功能如下:

  1、配置管理

  在我们的应用中除了代码外,还有一些就是各种配置。比如数据库连接等。一般我们都是使用配置文件的方式,在代码中引入这些配置文件。但是当我们只有一种配置,只有一台服务器,并且不经常修改的时候,使用配置文件是一个很好的做法,但是如果我们配置非常多,有很多服务器都需要这个配置,而且还可能是动态的话使用配置文件就不是个好主意了。这个时候往往需要寻找一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更。比如我们可以把配置放在数据库里,然后所有需要配置的服务都去这个数据库读取配置。但是,因为很多服务的正常运行都非常依赖这个配置,所以需要这个集中提供配置服务的服务具备很高的可靠性。一般我们可以用一个集群来提供这个配置服务,但是用集群提升可靠性,那如何保证配置在集群中的一致性呢? 这个时候就需要使用一种实现了一致性协议的服务了。Zookeeper就是这种服务,它使用Zab这种一致性协议来提供一致性。现在有很多开源项目使用Zookeeper来维护配置,比如在HBase中,客户端就是连接一个Zookeeper,获得必要的HBase集群的配置信息,然后才可以进一步操作。还有在开源的消息队列Kafka中,也使用Zookeeper来维护broker的信息。在Alibaba开源的SOA框架Dubbo中也广泛的使用Zookeeper管理一些配置来实现服务治理。

  2、名字服务

  名字服务这个就很好理解了。比如为了通过网络访问一个系统,我们得知道对方的IP地址,但是IP地址对人非常不友好,这个时候我们就需要使用域名来访问。但是计算机是不能是别域名的。怎么办呢?如果我们每台机器里都备有一份域名到IP地址的映射,这个倒是能解决一部分问题,但是如果域名对应的IP发生变化了又该怎么办呢?于是我们有了DNS这个东西。我们只需要访问一个大家熟知的(known)的点,它就会告诉你这个域名对应的IP是什么。在我们的应用中也会存在很多这类问题,特别是在我们的服务特别多的时候,如果我们在本地保存服务的地址的时候将非常不方便,但是如果我们只需要访问一个大家都熟知的访问点,这里提供统一的入口,那么维护起来将方便得多了。

  3、分布式锁

  其实在第一篇文章中已经介绍了Zookeeper是一个分布式协调服务。这样我们就可以利用Zookeeper来协调多个分布式进程之间的活动。比如在一个分布式环境中,为了提高可靠性,我们的集群的每台服务器上都部署着同样的服务。但是,一件事情如果集群中的每个服务器都进行的话,那相互之间就要协调,编程起来将非常复杂。而如果我们只让一个服务进行操作,那又存在单点。通常还有一种做法就是使用分布式锁,在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,立即fail over到另外的服务。这在很多分布式系统中都是这么做,这种设计有一个更好听的名字叫Leader Election(leader选举)。比如HBase的Master就是采用这种机制。但要注意的是分布式锁跟同一个进程的锁还是有区别的,所以使用的时候要比同一个进程里的锁更谨慎的使用。

  4、集群管理

  在分布式的集群中,经常会由于各种原因,比如硬件故障,软件故障,网络问题,有些节点会进进出出。有新的节点加入进来,也有老的节点退出集群。这个时候,集群中其他机器需要感知到这种变化,然后根据这种变化做出对应的决策。比如我们是一个分布式存储系统,有一个*控制节点负责存储的分配,当有新的存储进来的时候我们要根据现在集群目前的状态来分配存储节点。这个时候我们就需要动态感知到集群目前的状态。还有,比如一个分布式的SOA架构中,服务是一个集群提供的,当消费者访问某个服务时,就需要采用某种机制发现现在有哪些节点可以提供该服务(这也称之为服务发现,比如Alibaba开源的SOA框架Dubbo就采用了Zookeeper作为服务发现的底层机制)。还有开源的Kafka队列就采用了Zookeeper作为Cosnumer的上下线管理。

  二、zookeeper集群安装

  1.下载安装包

  http://apache.fayea.com/zookeeper/zookeeper-3.4.6/

  2.解压压缩包

  安装zookeeper集群

  3.创建solrclude文件夹,将解压的zookeeper包拷贝到solrclude文件夹中

  安装zookeeper集群

  4.将zookeeper-3.4.6拷贝到/usr/local/solrcloud下,复制三份分别并将目录名改为zookeeper1、zookeeper2、zookeeper3

  安装zookeeper集群

  5.进入zookeeper1文件夹,创建data目录。并在data目录中创建一个myid文件内容为“1”(echo 1 >> data/myid)。

  安装zookeeper集群

  6.进入conf文件夹,把zoo_sample.cfg改名为zoo.cfg

  安装zookeeper集群

  7.修改zoo.cfg

  dataDir=/usr/local/solrcloud/zookeeper1/data

  clientPort=2181(zookeeper2中为2182、zookeeper3中为2183)

  添加:

  server.1=192.168.198.130:2881:3881

  server.2=192.168.198.130:2882:3882

  server.3=192.168.198.130:2883:3883

  安装zookeeper集群

  8.对zookeeper2、3中的设置做第二步至第四步修改。

  zookeeper2:

    myid内容为2

    dataDir=/usr/local/solrcloud/zookeeper2/data

    clientPort=2182

  Zookeeper3:

    myid内容为3

    dataDir=/usr/local/solrcloud/zookeeper3/data

    clientPort=2183

  9.启动三个zookeeper,查看状态

安装zookeeper集群
启动三个zookeeper
/usr/local/solrcloud/zookeeper1/bin/zkServer.sh start
/usr/local/solrcloud/zookeeper2/bin/zkServer.sh start
/usr/local/solrcloud/zookeeper3/bin/zkServer.sh start
查看集群状态:
/usr/local/solrcloud/zookeeper1/bin/zkServer.sh status
/usr/local/solrcloud/zookeeper2/bin/zkServer.sh status
/usr/local/solrcloud/zookeeper3/bin/zkServer.sh status
安装zookeeper集群

安装zookeeper集群

java笔记

摘要: 一、solr单机版的搭建 1.运行环境 solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(ja),本教va写的Servlet容器程使用Tocmat作为Servlet容器,环境如下: Solr:Solr4.10.3 Jdk:jdk1阅读全文
posted @ 2016-03-22 16:41 耗子搞IT 阅读(24) | 评论 (0) 编辑
 
摘要: 上一章讲了solr单机版的搭建,本章将讲解sole集群的搭建。solr集群的搭建需要使用到zookeeper,搭建参见zookeeper集群的安装 一、solr实例的搭建 1. tomcat安装 这里我们需要4个tomcat,分别是tomcat1,2,3,4 同时修改tomcat1,2,3,4的端口阅读全文
posted @ 2016-03-22 10:12 耗子搞IT 阅读(159) | 评论 (0) 编辑
 
摘要: zookeeper集群的安装阅读全文
posted @ 2016-03-21 13:12 耗子搞IT 阅读(171) | 评论 (0) 编辑
 
摘要: 一、单机版redeis 1.安装包下载 http://download.redis.io/releases/ 下载redis的压缩包,并放在/usr/soft文件夹下 2.解压压缩包: 3.安装 这里安装redis在/usr/local/redis文件夹中 进入安装包:cd /usr/soft/re阅读全文
posted @ 2016-03-17 17:14 耗子搞IT 阅读(740) | 评论 (3) 编辑
 
摘要: 一、nexus的安装1.下载nexus(点解这里)2.下载后解压文件,将解压后的nexus文件放在你自己想要的地方3.配置环境变量(和配置java的环境变量一样)4.安装和启动nexus由于我已经安装和启动过nexus,所以有错误信息提示5.启动成功后,在浏览器输入http://localhost:...阅读全文
posted @ 2015-12-10 14:25 耗子搞IT 阅读(201) | 评论 (0) 编辑
 
摘要: java 自定义注解 获得注解的值阅读全文
posted @ 2015-12-09 18:24 耗子搞IT 阅读(35) | 评论 (0) 编辑
 
摘要: StringEscapeUtils的使用阅读全文
posted @ 2015-11-02 11:47 耗子搞IT 阅读(34) | 评论 (0) 编辑
 
摘要: taglib的使用阅读全文
posted @ 2015-10-30 20:54 耗子搞IT 阅读(8) | 评论 (0) 编辑
 
摘要: jquery操作checkbox阅读全文
posted @ 2015-10-19 11:57 耗子搞IT 阅读(4) | 评论 (0) 编辑
 
摘要: spring 静态方法使用bean阅读全文
posted @ 2015-10-10 14:22 耗子搞IT 阅读(6) | 评论 (0) 编辑
 
摘要: c标签的使用方法阅读全文
posted @ 2015-09-20 11:18 耗子搞IT| 编辑
 
摘要: 使用idea将本地项目上传至github clone阅读全文
posted @ 2015-09-15 14:16 耗子搞IT 阅读(22) | 评论 (0) 编辑
 
摘要: ajax传递json数据,springmvc后台就收json数据阅读全文
posted @ 2015-09-09 10:17 耗子搞IT 阅读(28) | 评论 (0) 编辑
 
摘要: public static Map sortMapByKey(Map map) { if (map == null || map.isEmpty()) { return null; } //Comparator接口进行排序 Ma...阅读全文
posted @ 2015-08-25 21:05 耗子搞IT 阅读(11) | 评论 (0) 编辑
 
摘要: spring 定时任务阅读全文
posted @ 2015-08-25 18:17 耗子搞IT| 编辑
 
摘要: 1.spring 转发 request.setAttribute("id", id); request.setAttribute("name",name); request.getReques...阅读全文
posted @ 2015-08-25 14:36 耗子搞IT 阅读(10) | 评论 (0) 编辑
 
摘要: INSERT INTO rechargeRecord(loginId,loginName,name) values(#{loginId},#{loginName},#{name}) 这里的keyProperty="id"中的id要与数据库中的主...阅读全文
posted @ 2015-08-23 18:07 耗子搞IT 阅读(11) | 评论 (0) 编辑
 
摘要: public class SysConfig { private static final Properties properties = new Properties(); static{ Resource rs1 = new ClassPathResource("sys-...阅读全文
posted @ 2015-08-19 18:24 耗子搞IT 阅读(17) | 评论 (0) 编辑
 
摘要: idea导入项目出错解决办法阅读全文
posted @ 2015-06-18 10:15 耗子搞IT 阅读(15) | 评论 (0) 编辑
 
摘要: 在实际开发工作中,我们又是会将一些路径文件配置放在properties文件中,这样我们需要修改路径的时候就只需要写该一下配置文件就行了,不需要在代码中挨个挨个的去改。但是我们怎样获得配置文件中的值呢?其实这个很简单,我们只需要封装如下一个工具类就行了:public class UrlUtil { ...阅读全文
posted @ 2014-12-30 16:38 耗子搞IT 阅读(419) | 评论 (2) 编辑
 
摘要: 前两节讲了socket服务端,客户端的建立以及报文的封装。今天就来讲一下java对象和xml格式文件的相互转换。上一节中我们列举了一个报文格式,其实我们可以理解为其实就是一个字符串。但是我们不可能每次都去写字符串啊,这样的话肯定要疯。既然是面向对象的编程,肯定会有好的办法来解决这个问题。我们使用JA...阅读全文
posted @ 2014-12-28 15:39 耗子搞IT 阅读(468) | 评论 (0) 编辑
 
摘要: 昨天我们谈了怎么建立socket通信的服务端和客户端,今天我们就来谈一谈怎么封装报文。什么是报文这里我就不在阐述了,不清楚的朋友可以自己去查资料。我们今天要谈的报文主要友以下几个部分组成:3位同步校验位+8位报文长度+报文头+报文体+32位MD5校验位基本格式如下:0X110X120X1300...阅读全文
posted @ 2014-12-27 23:17 耗子搞IT 阅读(1082) | 评论 (1) 编辑
 
摘要: java socket报文通信(一) socket的建立今天来和大家分享一下java中如何使用socket进行通信。先来啰嗦两句,看看Tcp/ip和udp:TCP是Transfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无...阅读全文
posted @ 2014-12-26 15:45 耗子搞IT 阅读(738) | 评论 (0) 编辑
 
摘要: 有时候我们需要将数字转化为字符串,并且转化后的长度要一定。比如00012这种类型。这时候我们就可以使用NumberForMate这个方法:NumberFormat numberFormat = NumberFormat.getNumberInstance(); numberFormat.set...阅读全文
posted @ 2014-12-25 16:46 耗子搞IT 阅读(124) | 评论 (0) 编辑
 
摘要: spring框架为我们代码的编写带来了极大的便利,特别是注解的使用。但是有个问题,当我们在静态文件中使用注解的时候,这个时候就会报错了。如以下代码:@Autowired private UserService userService;public static int test(User user)...阅读全文
posted @ 2014-12-24 16:40 耗子搞IT 阅读(335) | 评论 (0) 编辑
 
摘要: 最近做了一个项目,用户上传图片后通过img控件显示出来。大家都知道img通过src属性就可以显示图片。如。这样做没有任何问题,相信很多朋友也是这么做的。但是这样做有个问题,图片必须是放在应用下面的。而且如果做了集群的话,那么图片就分散在富多个应用下面,很不好管理。这是我们自然会想到要是将图片放在一个...阅读全文
posted @ 2014-12-23 19:43 耗子搞IT 阅读(210) | 评论 (0) 编辑
 
摘要: java 随机数 random()阅读全文
posted @ 2014-12-15 10:35 耗子搞IT 阅读(72) | 评论 (0) 编辑
 
摘要: 今天搞了下java文件的读写,自己也总结了一下,但是不全,只有两种方式,先直接看代码:public static void main(String[] args) throws IOException { io(); buffer();}/** * 以流的形式读写 可以使用任何文件 特别...阅读全文
posted @ 2014-12-12 18:54 耗子搞IT 阅读(44) | 评论 (0) 编辑
 
摘要: java BigDecimal的操作阅读全文
posted @ 2014-12-12 11:11 耗子搞IT 阅读(92) | 评论 (0) 编辑
上一篇:判断浏览器是否支持html5和css3属性


下一篇:PhotoShop—剪贴蒙版