linux搭建zookeeper集群

搭建zookeeper集群(一主两从)

zk启动依赖java的JDK,所以要先安装JDK

不会安装JDK的可以看这https://www.jianshu.com/p/ea5c72b273d7教程,安装完成JDK后

下载zk的tar包并使用winSCP上传到3台linux服务器

https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

开始搭建zookeeper集群(一主两从)

我启动了3台linux服务器,IP分别是

192.168.79.135、192.168.79.136、192.168.79.135

操作192.168.79.135服务器

执行linux命令解压zk

tar -zxvf zookeeper-3.4.14.tar.gz

解压后多了zookeeper-3.4.14文件夹,进行到zk的conf目录

cd zookeeper-3.4.14/conf/

image

可以查看到zoo_sample.cfg配置文件,把这个配置文件copy一份并重命名为zoo.cfg

cp zoo_sample.cfg zoo.cfg

修改zoo.cfg配置文件的日志目录datadir(后面创建myid要在这个目录下)

vi zoo.cfg

image

启动看是否安装正常,在zookeeper-3.4.14目录执行

启动

bin/zkServer.sh start

查看是否启动成功

ps -ef|grep zookeeper或者netstat -nltp | grep 2181查看是否启动成功

image

检查启动成功

先关闭zk

bin/zkServer.sh stop

另外两台服务器也执行以上同样的操作↑

以上操作安装好单机的zk,现在开始搭建zk集群 一leader两follower

三台****服务器都修改配置文件

1.打开配置文件,

vi zoo.cfg

****2.在最后加上****

server.1=192.168.79.135:2888:3888

server.2=192.168.79.136:2888:3888

server.3=192.168.79.137:2888:3888

image

三台机器都修改完配置后

操作192.168.79.135服务器

在之前配置的dataDir目录(我配置在这个目录下/data/zookeeper-3.4.14/data),第一次zk就会创建这个目录(也可以手动创建),在这个目录下新建myid文本

vi myid

文本里面写上 **** 1

image

保存

wq!

操作192.168.79.136服务器

也是在dataDir(日志目录)下创建myid文本****

vi myid

文本里面写上 **** 2

image

操作192.168.79.137服务器

也是在dataDir(日志目录)下创建myid文本****

vi myid

文本里面写上 **** 3

image

配置完成后,关闭防火墙systemctl stop firewalld

启动3台服务器的zk,启动后

./zkServer.sh status查询zk节点

192.168.79.135节点信息Mode: leader

image

192.168.79.136节点信息Mode: follower

image

192.168.79.137节点信息Mode: follower

image

第一次启动,myid最小的选举为leader
下面操作看创建节点之后,其他zk就否会同步

bin/zkCli.sh ****启动zk客户端

ls /****查询zk根目录下的节点

image

192.168.79.135创建一个node1节点,看其他zk节点是否能同步

create /node1 1

image

查询192.168.79.136的zk节点服务

image

查询192.168.79.137的zk节点服务

image

192.168.79.136的zk创建node2节点,发现followerzk也能创建节点,并且其他zk也都能同步数据。

**kill 192.168.79.135的zk后,192.168.79.137的zk选举成了leader

我们在192.168.79.137创建一个node3节点再重新启动192.168.79.135的zk

image

重启后变成了follower节点

image

******在zk重启之前创建的node3节点也能同步过来******

******3台zk如果挂掉一台还能正常使用,如果挂掉2台,正常的那台zk也不能使用了,要等其中至少1台zk启动后才能恢复正常(必须要一半或以上的zk服务正常才能运行)。******

测试:

将两台follower关闭

./zkServer.sh stop

查询没有关闭的zk(leader)的status状态,发现not running,不能正常使用

image

现在恢复启动一台刚刚关闭的zk

再查询没有关闭的zk(leader)的status状态


image

发现从leader变成了follower

**测试完成。结论:集群必须要一半或以上的zk服务正常才能运行集群,并且最后一台没有挂掉的如果是leader,集群恢复正常后,可能就不是leader了

测试集群搭建成功

下面说说集合的配置作用:

server.1=192.168.79.135:2888:3888的意思

****server.id=host:port1:port2****

id 是一个数字,表示这个是第几号服务器(与myid的值相同)。

****host ****是这个服务器的 ip 地址。**

****port1 ******表示这个服务器与集群中的Leader服务器交换信息的端口。**

****port2******表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。**

****myid文件******该文件创建在zoo.cfg里dataDir指定的目录下,只有一行内容,对应每台机器的Server ID 数字;比如server.1 的myid 文件内容就是1【必须确保每个服务器的myid 文件中的数字不同,并且****和自己所在机器的zoo.cfg 中server.id 的id 值一致,id 的范围是1~255】

集群角色

**Leader 角色 **
Leader 服务器是整个 zookeeper 集群的核心,主要的工作 任务有两项 1. 事物请求的唯一调度和处理者,保证集群事物处理的顺 序性
2. 集群内部各服务器的调度者

**Follower 角色 **
Follower 角色的主要职责是
1. 处理客户端非事物请求、转发事物请求给 leader 服务器
2. 参与事物请求 Proposal 的投票(需要半数以上服务器 通过才能通知 leader commit 数据; Leader 发起的提案, 要求 Follower 投票)
3. 参与 Leader 选举的投票

**Observer 角色 **
Observer 是 zookeeper3.3 开始引入的一个全新的服务器 角色,从字面来理解,该角色充当了观察者的角色。 观察 zookeeper 集群中的最新状态变化并将这些状态变化 同步到 observer 服务器上。Observer 的工作原理与 follower 角色基本一致,而它和 follower 角色唯一的不同 在于 observer 不参与任何形式的投票,包括事物请求 Proposal的投票和leader选举的投票。简单来说,observer 服务器只提供非事物请求服务,通常在于不影响集群事物 处理能力的前提下提升集群非事物处理的能力 。

*集群组成 **
通常 zookeeper是由2n+1台server组成,每个server都知道彼此的存在。对于2n+1台server,只要有n+1台(大多数server可用,整个系统保持可用。我们已经了解到,一个 zookeeper 集群如果要对外提供可用的服务,那么集 群中必须要有过半的机器正常工作并且彼此之间能够正常 通信,基于这个特性,如果搭建一个能够允许F台机器down掉的集群,那么就要部署2
F+1台服务器构成的 zookeeper 集群。因此3台机器构成的 zookeeper 集群,能够在挂掉一台机器后依然正常工作。一个5 台机器集群 的服务,能够对2台机器挂掉的情况下进行容灾。如果一台由6台服务构成的集群,同样只能挂掉2台机器。因此,5台和6台在容灾能力上并没有明显优势,反而增加了网络通信负担。系统启动时,集群中的server 会选举出一台server为Leader,其它的就作为follower(这里先不考虑 observer角色)。
之所以要满足这样一个等式,是因为一个节点要成为集群中的leader,需要有超过及群众过半数的节点支持,这个涉及到leader选举算法。同时也涉及到事务请求的提交投票

zookeeper的集群工作
在zookeeper中,客户端会随机连接到zookeeper集群中的一个节点,****如果是读请求,就直接从当前节点中读取数据,如果是写请求,那么请求会被转发给 leader 提交事务,然后 leader 会广播事务,只要有超过半数节点写入成功,那么写请求就会被提交(类 2PC 事务)所有事务请求必须由一个全局唯一的服务器来协调处理****,这个服务器就是Leader服务器,其他的服务器就是follower。

leader服务器把客户端的失去请求转化成一个事务Proposal(提议),并把这个Proposal分发给集群中的所有 Follower 服务器。之后Leader服务器需要等待所有Follower 服务器的反馈,****一旦超过半数的 Follower 服务器 进行了正确的反馈,那么 Leader 就会再次向所有的 Follower 服务器发送 Commit 消息****,要求各个 follower 节点对前面的一个 Proposal 进行提交;**

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容