Linux安装Zookeeper-3.6.2集群

Zookeeper介绍:

ZooKeeper是一个开源分布式协调服务、分布式数据一致性解决方案。可基于ZooKeeper实现命名服务、集群管理、Master选举、分布式锁等功能。

高可用:
为了保证ZooKeeper的可用性,在生产环境中我们使用ZooKeeper集群模式对外提供服务,并且集群规模至少由3个ZooKeeper节点组成。集群至少由3个节点组成,ZooKeeper其实2个节点也可以组成集群并对外提供服务,但我们使用集群主要目的是为了高可用。如果2个节点组成集群,其中1个节点挂了,另外ZooKeeper节点不能正常对外提供服务。因此也失去了集群的意义。如果3个节点组成集群,其中1个节点挂掉后,根据ZooKeeper的Leader选举机制是可以从另外2个节点选出一个作为Leader的,集群可以继续对外提供服务,而且集群规模最好为奇数。
并非节点越多越好:
1.节点越多,使用的资源越多。
2.节点越多,ZooKeeper节点间花费的通讯成本越高,节点间互连的Socket也越多。影响ZooKeeper集群事务处理。
3.节点越多,造成脑裂的可能性越大。
集群角色:
ZooKeeper没有使用Master/Slave的概念,而是将集群中的节点分为了3类角色:
Leader:
在一个ZooKeeper集群中,只能存在一个Leader,这个Leader是集群中事务请求唯一的调度者和处理者,所谓事务请求是指会改变集群状态的请求;
Leader根据事务ID可以保证事务处理的顺序性。如果一个集群中存在多个Leader,这种现象称为「脑裂」。
Follower:
Follower角色的ZooKeeper服务只能处理非事务请求;如果接收到客户端事务请求会将请求转发给Leader服务器;参与Leader选举;参与Leader事务处理投票处理。
Follower发现集群中Leader不可用时会变更自身状态,并发起Leader选举投票,最终集群中的某个Follower会被选为Leader。
Observer:
Observer与Follower很像,可以处理非事务请求;将事务请求转发给Leader服务器。与Follower不同的是,Observer不会参与Leader选举;不会参与Leader事务处理投票。
Observer用于不影响集群事务处理能力的前提下提升集群的非事务处理能力。

Zooleeper集群安装:

主机规划:

10.0.3.32
10.0.3.33
10.0.3.34

1.下载软件包
#从目前的最新版本3.5.5开始,带有bin名称的包才是我们想要的下载可以直接使用的里面有编译后的二进制的包,而之前的普通的tar.gz的包里面是只是源码的包无法直接使用。
Linux安装Zookeeper-3.6.2集群_第1张图片https://downloads.apache.org/zookeeper/zookeeper-3.6.2/

2.安装JDK

yum install java -y

3.安装zookeeper

[yundiao@nmhs-pp-nms003032 ~]$ tar zxf /data/packages/apache-zookeeper-3.6.2-bin.tar.gz -C /data/middleware/
[yundiao@nmhs-pp-nms003032 ~]$ mkdir /data/middleware/zookeeper-3.6.2-bin/{data logs}
#修改配置文件只列出需要修改的参数
#三台都同样操作
#创建目录
[yundiao@nmhs-pp-nms003032 zookeeper]# mkdir {data,logs}
[yundiao@nmhs-pp-nms003032 ~]$ cd /data/middleware/apache-zookeeper-3.6.2-bin/conf/
[yundiao@nmhs-pp-nms003032 conf]# cp zoo_sample.cfg zoo.cfg
[yundiao@nmhs-pp-nms003032 conf]# cat zoo.cfg
#服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。tickTime以毫秒为单位。
tickTime=2000 
#对于从节点最初连接到主节点时的超时时间,单位为tick值的倍数
initLimit=10
#对于主节点与从节点进行同步操作时的超时时间,单位为tick值的倍数。
syncLimit=5
#用于配置内存数据库保存的模糊快照的目录,目录需要单独创建。
dataDir=/data/middleware/apache-zookeeper-3.6.2-bin/data
#用于存放日志信息,目录需要单独创建。
dataLogDir=/data/middleware/apache-zookeeper-3.6.2-bin/logs
#客户端所连接的服务器所监听的端口号
clientPort=2186
###定时清理zookeeper快照和日志配置
#清理频率单位是小时需要大于1的整数
autopurge.purgeInterval=24
##日志保留文件数目
autopurge.snapRetainCount=10
###集群信息
server.1=10.0.3.32:3188:3288
server.2=10.0.3.33:3188:3288
server.3=10.0.3.34:3188:3288
###注释
server.1         #1表示zookeeper节点的id这个需要与myid对应必须一样。
10.0.3.32    #zookeeper节点所在机器的ip地址。
3188             #zookeeper节点非选举通讯端口。
3288             #zookeeper节点间选举通讯端口 。

#集群模式下需要新增一个名叫myid的文件,这个文件放在上述dataDir指定的目录下,这个文件里面就只有一个数据,就是配置文件中server.x的这个x(1,2,3)值,zookeeper启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个server(节点)。
[yundiao@nmhs-pp-nms003032 zookeeper]# echo "1" > /data/middleware/apache-zookeeper-3.6.2-bin/data/myid

#启动zookeeper并查看状态
[yundiao@nmhs-pp-nms003032 ~]# /data/middleware/apache-zookeeper-3.6.2-bin/bin/zkServer.sh start
/bin/java
ZooKeeper JMX enabled by default
Using config: /data/middleware/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

[yundiao@nmhs-pp-nms003032 zookeeper]# /data/middleware/apache-zookeeper-3.6.2-bin/bin/zkServer.sh status
/bin/java
ZooKeeper JMX enabled by default
Using config:/data/middleware/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Client port found: 2186. Client address: localhost. Client SSL: false.
Mode: leader
#该台机器的角色是leader

#测试集群是否可用
[yundiao@nmhs-pp-nms003032 conf]$ /data/middleware/apache-zookeeper-3.6.2-bin/bin/zkCli.sh -server 10.0.3.32:2181

[zk: 10.0.3.32:2181(CONNECTED) 0] create /test test123
Created /test

[yundiao@nmhs-pp-nms003033 ~]$ /data/middleware/apache-zookeeper-3.6.2-bin/bin/zkCli.sh -server 10.0.3.33:2181
[zk: 10.0.3.33:2181(CONNECTED) 0] get /test
test123



###znode常用命令
create /parh data      创建一个名为/path的zNode节点,并包含数据data
delete /path          删除名为/path的zNode节点
exists /path           检查是否存在名为/path的zNode节点
setData /path data        设置名为/path的zNode的数据为data
getData  /path         返回名为/path的zNode节点的数据信息
getChildren /path      返回所有/path节点的所有子节点列表

zNode节点还有不同的类型,持久(persistent)节点和临时(ephemeral)节点。持久的zNode,如/path,只能通过调用delete来进行删除,而临时的zNode则与之相反,当创建该节点的客户端崩溃或者关闭了与ZooKeeper服务器的连接时候,这个临时zNode节点就会被删除了。其中临时节点可用于实现分布式锁。

你可能感兴趣的:(运维那些事,zookeeper)