一、zookeeper介绍?
一、zookeeper 简单介绍? 1.什么是集群? // 很多台服务器保持连接通讯状态,并且所有的服务器做同一件事就称之为集群 2.什么是zookeeper? 注册中心就是zookeeper(eureka,consul)的别名 zookeeper是apache开源基金会下的一个顶级项目 zookeeper是一个致力于开发和维护的开源服务器,作用于项目中的协调和控制功能 场景: 空调坏了,学生就去找班主任说空调坏了,班主任也不会修空调,班主任觉得孟老师会修空调,结果孟老师也不会,孟老师最终给售后打电话,售后假设把空调修好了,最终学生达到了预期效果 学生就是需求者,售后是服务者,孟老师和班主任就是协调者 zookeeper从logo来看是动物园管理员,这个动物园中所有的动物都由zookeeper进行管理,管理了动物的衣食住行,zookeeper在最早的时候只适用于Hadoop的生态圈,在Hadoop的生态圈中所有的框架都是动物,zookeeper对他们进行管理,管理框架的健康(心跳),服务器的调用方和服务器的生产方,也就是说最终服务的客户端不再直接向服务的服务器发送数据,首先客户端先找到zookeeper,根据zookeeper的反馈再找服务器端 hadoop是大象 hbase是鲸鱼 pig是猪 .... 在zookeeper中存放了大量的数据(非常有用),但是这些数据开发人员看不到,并且zookeeper会按照规定的时间对已经向自己注册服务索要心跳, 根据观察者模式,一旦检测到状态发生变化,最终向zookeeper注册过的观察者(服务器)要应对处理措施! /* 被观察对象是------------->zookeeper 观察对象是---------------->服务器 */ 3.zookeeper的应用场景: 在之前只适用于大数据,但是随着web项目越来越大,发展越来越快,zookeeper已经完全适用于整个web项目,在web项目中仍然起着协调和控制的作用 zookeeper是以集群的形式存在,也就是说三台zookeeper做同一件事, /* 在官方文档中说明,zookeeper以奇数台为稳定,并且以中间这一台为leader,也就是说zookeeper至少需要三台(不是一台,一台称之为单节点) */ 为什么说以奇数台为稳定?? zookeeper是以一个leader带领很多个follower完成的集群,并且奇数和选举机制有关
二、Linux配置 zookeeper?
二、配置zookeeper? 1. 新建三台虚拟机 五步走 vim /etc/sysconfig/network vim /etc/hosts service iptables stop chkconfig iptables off reboot 2.配置jdk 2.1导入jdkjar包。 2.2配置java环境变量。 3.配置免秘钥登录 生成自己的公钥 四次回车(都不能输入密码) /* ssh-keygen -t rsa ssh-keygen -t rsa ssh-keygen -t rsa ssh-keygen -t rsa ssh-keygen -t rsa */ 把自己的公钥copy其他服务器上 另外两台都需要copy!!! /* ssh-copy-id ip地址/hostname ssh-copy-id ip ssh-copy-id 192.168.11.116 ssh-copy-id haha */ 配置成功后,ssh 连接访问。 /** ssh +另一条虚拟机的ip地址/名字 ssh haha ssh zookeeper ssh zookeeper */ 4解压zookeeper tar -zxvf xxxxx 5.把conf目录下的 [zoo-sample.cfg文件改名为zoo.cfg] 修改文件的命令: mv +需要修改的文件名 空格 修改后的文件名。 /* mv zoo-sample.cfg zoo.cfg mv zoo-sample.cfg zoo.cfg mv zoo-sample.cfg zoo.cfg mv zoo-sample.cfg zoo.cfg mv zoo-sample.cfg zoo.cfg mv zoo-sample.cfg zoo.cfg */ 6.修改dataDir参数(不是必须所要修改的,但是要求修改) 指向的文件就是zookeeper每一台节点的唯一标识(id),而且这个唯一标识不能重复!!!! 1.在zookeeper目录下中创建文件夹data 获取data的 pwd路径。(pwd ) /* mkdir data cd data pwd 获取路径 */ 2.退出 ,在conf下修改 dataDir 修改为刚才所创建的data目录的绝对路径把dataDir修改为刚才所创建的data目录的绝对路径 /* vim dataDir 把dataDir修改为刚才所创建的data目录的绝对路径 dataDir=/home/apps/zookeeper-3.4.6/data */ 7.在zoo.cfg文件的末尾添加 /** server.1=zookeeper01:2888:3888 server.2=zookeeper02:2888:3888 server.3=zookeeper03:2888:3888 7.1 server.的数据就是每一台zookeeper的唯一标识 7.2 zookeeper01:HOSTNAME或者可以配置IP地址 7.3 2888:zookeeper集群之间通讯所用的端口号 7.4 3888:zookeeper集群的选举leader端口号 */ 8.在之前创建data文件夹下创建myid文件 touch myid 9.写入myid文件 vim myid 另外两台分别写入 2 和 3 它们是zookeeper的标识。 1 10.通过scp发送到另外两台服务器上 语法 scp -r /home/apps/(需要发送的路径) 空格 zookeeper02(目标的ip/hostname):/home/ (需要发送到的目标位置) 把zookeeper01 虚拟机上的 /home/apps/ 发送到 zookeeper02 的 :home/ 目录下。 /* scp -r /home/apps/ zookeeper02:/home/ scp -r /home/apps/ zookeeper03:/home/ scp -r /home/apps/ zookeeper02:/home/ */ 将配java的配置环境也copy过去。 scp -r /etc/profile zookeeper01:/etc/ scp -r /etc/profile zookeeper01:/etc/ scp -r /etc/proflie 需要的虚拟机的ip:/etc/ (本机需要copy的地址) (需要copy到的虚拟机的地址) /* scp -r /etc/proflie zookeeper02:/etc/ scp -r /etc/proflie zookeeper03:/etc/ scp -r /etc/proflie haha:/etc/ */ 立即生效命令 source /etc/profile 尝试了一下 不用也可以。不敢保证。。。 4.10.根据server.的数字分别修改myid文件 把zookeeper02修改为2 把zookeeper03修改为3 4.11.启动zookeeper 在bin目录中启动 /* ./zkServer.sh start ./zkServer.sh start ./zkServer.sh start ./zkServer.sh start */ 看到以下信息说明启动成功: JMX enabled by default Using config: /home/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg Starting zookeeper ... STARTED 4.12.分别检测三台zookeeper服务器的状态 在bin目录中 /* ./zkServer.sh status ./zkServer.sh status */ 关闭 /* ./zkServer.sh stop ./zkServer.sh stop ./zkServer.sh stop */ leader 和 follower 老大 小弟 5.zookeeper的选举机制 5.1 zookeeper采用的是Paxos算法实现的选举机制 换句话说半数选举机制 谁的server id大 谁就是大哥!!! 半数选举 leader产生 该节点高32位会发生改变。 5.2zid 事物的id一共有64位, 分别高32 位 和 低32 位。 当leader宕机。所有服务器的zid 会自增。 自增的低32位 根据某个规则进行增加 高32位不变。 zid 的低32为越小,被选举的可能性就越大,被操作的可能性就越大 /* zxid (低32 +高32位 合并) 越大被操作的可能就越大。 */