From b021e7e0b73a559b98741babe38fdbe5633c46fb Mon Sep 17 00:00:00 2001 From: luoxiang <2806718453@qq.com> Date: Wed, 29 May 2019 22:26:20 +0800 Subject: [PATCH] modify --- ...keeper单机环境和集群环境搭建.md | 88 +++++------------- pictures/zookeeper-hadoop001.png | Bin 0 -> 4942 bytes pictures/zookeeper-hadoop002.png | Bin 0 -> 4813 bytes pictures/zookeeper-hadoop003.png | Bin 0 -> 4952 bytes 4 files changed, 23 insertions(+), 65 deletions(-) create mode 100644 pictures/zookeeper-hadoop001.png create mode 100644 pictures/zookeeper-hadoop002.png create mode 100644 pictures/zookeeper-hadoop003.png diff --git a/notes/installation/Zookeeper单机环境和集群环境搭建.md b/notes/installation/Zookeeper单机环境和集群环境搭建.md index 0e97a6f..345694d 100644 --- a/notes/installation/Zookeeper单机环境和集群环境搭建.md +++ b/notes/installation/Zookeeper单机环境和集群环境搭建.md @@ -125,105 +125,63 @@ zkServer.sh start ## 二、集群环境搭建 -为保证集群高可用,Zookeeper集群的节点数最好是奇数,最少有三个节点,所以这里演示搭建一个三个节点的集群。 +为保证集群高可用,Zookeeper集群的节点数最好是奇数,最少有三个节点,所以这里演示搭建一个三个节点的集群。这里我使用三台主机进行搭建,主机名分别为hadoop001,hadoop002,hadoop003。 ### 2.1 修改配置 -拷贝三份zookeeper安装包,分别修改其配置文件`zoo.cfg`,主要是修改`dataDir`、`dataLogDir`以及配置集群信息。修改后三份配置文件的内容分别如下: - -zookeeper01配置: +解压一份zookeeper安装包,修改其配置文件`zoo.cfg`,内容如下。之后使用scp命令将安装包分发到三台服务器上: ```shell tickTime=2000 initLimit=10 syncLimit=5 -dataDir=/usr/local/zookeeper-cluster/data/01 -dataLogDir=/usr/local/zookeeper-cluster/log/01 +dataDir=/usr/local/zookeeper-cluster/data/ +dataLogDir=/usr/local/zookeeper-cluster/log/ clientPort=2181 # server.1 这个1是服务器的标识,可以是任意有效数字,标识这是第几个服务器节点,这个标识要写到dataDir目录下面myid文件里 # 指名集群间通讯端口和选举端口 -server.1=127.0.0.1:2287:3387 -server.2=127.0.0.1:2288:3388 -server.3=127.0.0.1:2289:3389 +server.1=hadoop001:2287:3387 +server.2=hadoop002:2287:3387 +server.3=hadoop003:2287:3387 ``` -> 如果是多台服务器,则集群中每个节点通讯端口和选举端口可相同,IP地址修改为每个节点所在主机IP即可。 - -zookeeper02配置,与zookeeper01相比,只有`dataLogDir`和`dataLogDir`不同: - -```shell -tickTime=2000 -initLimit=10 -syncLimit=5 -dataDir=/usr/local/zookeeper-cluster/data/02 -dataLogDir=/usr/local/zookeeper-cluster/log/02 -clientPort=2182 - -server.1=127.0.0.1:2287:3387 -server.2=127.0.0.1:2288:3388 -server.3=127.0.0.1:2289:3389 -``` - -zookeeper03配置,与zookeeper01,02相比,也只有`dataLogDir`和`dataLogDir`不同: - -```shell -tickTime=2000 -initLimit=10 -syncLimit=5 -dataDir=/usr/local/zookeeper-cluster/data/03 -dataLogDir=/usr/local/zookeeper-cluster/log/03 -clientPort=2183 - -server.1=127.0.0.1:2287:3387 -server.2=127.0.0.1:2288:3388 -server.3=127.0.0.1:2289:3389 -``` - -> 为节省篇幅,以上配置文件均略去英文注释 - ### 2.2 标识节点 -分别在三个节点的数据存储目录下新建`myid`文件,并写入对应的节点标识。Zookeeper集群通过`myid`文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出leader节点。 +分别在三台主机的`dataDir`目录下新建`myid`文件,并写入对应的节点标识。Zookeeper集群通过`myid`文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出leader节点。 创建存储目录: ```shell -# dataDir -mkdir -vp /usr/local/zookeeper-cluster/data/01 -# dataDir -mkdir -vp /usr/local/zookeeper-cluster/data/02 -# dataDir -mkdir -vp /usr/local/zookeeper-cluster/data/03 +# 三台主机均执行该命令 +mkdir -vp /usr/local/zookeeper-cluster/data/ ``` 创建并写入节点标识到`myid`文件: ```shell -#server1 -echo "1" > /usr/local/zookeeper-cluster/data/01/myid -#server2 -echo "2" > /usr/local/zookeeper-cluster/data/02/myid -#server3 -echo "3" > /usr/local/zookeeper-cluster/data/03/myid +# hadoop001主机 +echo "1" > /usr/local/zookeeper-cluster/data/myid +# hadoop002主机 +echo "2" > /usr/local/zookeeper-cluster/data/myid +# hadoop003主机 +echo "3" > /usr/local/zookeeper-cluster/data/myid ``` ### 2.3 启动集群 -分别启动三个节点: +分别在三台主机上,执行如下命令启动服务: ```shell -# 启动节点1 -/usr/app/zookeeper-cluster/zookeeper01/bin/zkServer.sh start -# 启动节点2 -/usr/app/zookeeper-cluster/zookeeper02/bin/zkServer.sh start -# 启动节点3 -/usr/app/zookeeper-cluster/zookeeper03/bin/zkServer.sh start +/usr/app/zookeeper-cluster/zookeeper/bin/zkServer.sh start ``` ### 2.4 集群验证 -使用jps查看进程,并且使用`zkServer.sh status`查看集群各个节点状态。如图三个节点进程均启动成功,并且两个节点为follower节点,一个节点为leader节点。 +启动后使用`zkServer.sh status`查看集群各个节点状态。如图所示:三个节点进程均启动成功,并且hadoop002为leader节点,hadoop001和hadoop003为follower节点。 -
+
+
+ +
diff --git a/pictures/zookeeper-hadoop001.png b/pictures/zookeeper-hadoop001.png new file mode 100644 index 0000000000000000000000000000000000000000..7e3e0c6cc6c198c0f6c5b811fda62328cac264d2 GIT binary patch literal 4942 zcmYjV2Q(Y**G5sZ)W5YAEj4OW6tzcaYXn_ZwY6%*o{1DyrA8=KRZ@HW?GaQZt-bxM z+EP-KG=fM-B=PC*eCIpgJ?9s)!we0*0LDUc)IOD~|J)iv6D5sse<~bQ@QHoA%!?F@lHLS>3L#3Kb z%G1((xtagyLP=%w9(O4xyFFUHbGLxq>SCy<J8@f}_5=<^jkm1>28mWJ#S9lT(3sz;wETmXHn(>A4MUd*<*h6Nqgw zcm#A<&pU5|vDaE{R!@_%76z>{Y0N`SF!`T#NNheju@^%QPb5D+)77%Ao1+x%8(5$s zVxLCFk`Fp}YjpJmjEG(;yIg&im9`ynrQY;#K44VlRyj;+*(ZgA@e;2C;GKYZ%Fj>+ z7Qp4GI*y(9D^wTTqPspx!1BS%mwB61qFg^%8JN1bx*#36JIy3Jw=bLoU#mst5t~We z6%jl4b{vq(w|^a#mDXqYiO4pQ#v6ud_?;Q3g^1KS6 zlKYRg$!e(LjYFQd1-W5S#S+ps{=6!5uWg>~mgl_}x~ zlRbF|d!Z27193pa(F$hXBpMi^{0++P;@92icAmpJ4n(#qaOD2VoEzuP5z(elz#J&) z91=2oEM9_MIzo~+hQwRQtn&li!4^%U1!pLfgtp{mUvcH_y+Tq_HCY7yp0wdB4_cnn zSIhT-+R}`7+@dd8ScbK@uEJke*d)L#o`W`Ad=5#;7>g+IanR`Jt~tc4YB7`JsaxT# zjEK66eCD`J)4C^8Of5EXj+ri59}68u3w>FX`R4O7&46N0ZMe?!Lic2$LDvZoO6k0fO?LHRaw3}YPE zBaWCkxdxv509&i8wV$%Sq+5pIc&gFuRO3H!!%p+L`u};vhiQTP_GYfUaf&F1{PU)5 zL!7y6`oSxyX1H`(%5O7U^Q&nki|^BO0IN?;80xzwf{_Zj^g#Ofi;WJ_jazudPw2>dmQYgPtErCck3T2+t zuF#Z?$;c#QF^sv?PC~4w(-SM$$PW|uPr6c8sT#oiD^nQy$s4?LaPRonw`)be+Bck_ zFW9Oi63sieb0^)-t8MF4B?IUBR*A;MqtOXI6T-+lgArJ<==3->x6UA;kxzK*AA3C5 zF58;FLbvT5!NNP*(Hyf{htvwyZJ6Qv36m<7FDR@&FX7qwbAqw z90zfP-G5-CQ)S;dOZ@s0lS5dwzBDx-q`rY{3kLXFJ`*im@hQwWZ&a;v9n=DC+bzC{ zNX=pi>+d+VMtqG4oddDc)<-An>)gDkh|S-ENnfuB&EN~*k_2CE18;3;B}73XLTU^; z-&Yn9_sCAZB7d^5SWBX=Z-2LxJTTNXmw09#VUJc`25v{TSQA8DdUh@5!H*uE+54>1 zpM@}=-c0ka2(iDM{bZEEoq|uk<=u%T^tREhpKOJ9rt*-#R2Da|)(*GJue&3&+u?B2YR>hE9b;_gWFES{JhT zV#E|FVtdJc&%fhSgt+?6>;jOEKSOdAE>`vLdtNP-OF&J`#j1Ow;xw3y9D2`H({ROA z=-A;w+uCwZO6z%3p(4cs@g0BR$h)e7S_#2~v8=4>T?HMR*HVx4VF@tS*TCL!mH4B# z6z*Q31vwLh!4FQjM7P|P&*q}OuxkGPl)ml8#iX+uA}Af5Uf@zh_q5%)3Ex?Xgk<}j z+jbpB^3n*hXeywHxN5#H3CKfWu49=k@0*h^0$-cOyl_ugIhtOS(@3eg zI{~Bt^>CZCKQ_9ekI55wCoOyhRgo5gJIC;6k6Q9YEB5Pi29-e1P{*hx{+8{6QVAkqYV%SkdC}(M$hd>owQTP;YTZa7gJxpt46gqp`CTYDa zQqfg-dzKJJKiXQ~8`ICY7vx>OL~W&4xHv(j|Gl6T{tSmLccPu4Ns7u~K7_s#`tPhv z98NbSxJm2k(yhzxwa_;CO_7d;Qr$Sa;UkB6V?(RMYE8Sg) z2pZP1f$W&obM<)tVFIuIpsleac|6b)Q0`l++Fxqhn%*Ra%DTRua#53p;y1C46ZyND zyjES~{Tj*ma3zn;Z<{gK?Tw<>3+s6F)Bkv8+@)Dr4JblAS<{vkGm(TD2$PEL^bXLAwZs? zOpK_U2_K7Q;6KOkTS!1RVBxx0JLUMfir}2_GlH~ihXtS6mbL!-FjKZ~WW@yKE_ShN z`kS`md|xOU-M}Vk$fZzZD8o$;w|WSYs&2?U^`!^D*!&PH=ydYr1UasDxzDNBb}*;A z;zG+2S{b}1Lnq@-_d?{d2#$kBP*n~vBRWMrm<2|h^k=fNn%*LyxaqT!(D!{ZbwohX5XJi2@2uz z#)IwG-*WZyDP$n^l^&rE#^#J}_Cwb?8q}nh*=kmxsAw|J`N`|=Z9`lMihbomMI~l) z+tC<7AM_#yGqq7~kJ=*!;Yje;9&=Dqcr2g>H+%Bm+*5B}81N?nXR5{FQ?44z&VFsu z^N_>v-rP3T)UO8On~`xR7Zpwew}+k7o%iB>qr{o&9s3KOZyc5f{TQe7MI8TNKxf5} zu|Pt&$A}9YeC5}ZP+pkp$wx#76D)E^+!K9=4^rJy27Kd&x@9M_hNH)7P zri~2YyPw)p?-k31!2coogT?ssPsjIzHi$uEWFc+MlO>tb*moplW$N<&g*}T@TGK5lZFNkm2HGPl zu;Tx#Vw7++!Rzt!w|=n7*Y1suzZzeidKP4;h z*SA|D*&$dhW8V8bk7iV@&p>st7UfKAbWlEv|vmCpQr8$h1VdSvB0-UANYI1is5b>}Wsz(&~S7;Wf zl)gGijpD&kmAon`t2eD+nL=wSX13zYG|h15^aM1r zXkRrVR!K$QtHk1TtR};Ed_uDM$B_7LV9x)Od8`ltfpT3Foh1LhTxcD=qy0WvN;0uu z%HXv$rL7HoC+~q`y7hpN+X-_E`U#DFIJ*VnHR|#<70xx}lq&l}VwSu)2fWblxY8yw z@L54><-zG^s{V68vHj}cJ&>pPEP&6YDI&3wpDAW?b@}q6jJZ2t&P6Zu&*S!e@-2(g z+M102j!!VwWS<_{dv@>lCZE3=r_fv)SzKz->5M*>U1B0Y2U%<3y_S92!#x`p9~*QU z-gAci1`KAE=4N!{W(5?{af&F7Vz^p8b#mH(PRA;vN=IwtL?#*}Jj&BAE;Y(NrrC`{I z25u+EDv;A^yy8b!mRZH<%Jl?3%_ED&O=quzZ3J<0yj7> z{VXaK*+m0c@!NVEJitxGHJqM9?1pWKG{~#1XZp6iXL#4z$ydvsf%>KQaa5(nX;%&tXwP{Fh8)<4&7nBZX=866cbeFL|-0@ zz){fAC-j}B@DrCW)K+W+o}?%_{o_bPWm)(SCto1?;5RW}5=Gh6X@i`J&-?H9vAX}K zHl39a>Q!N~W!G)>TjLSBm3`pte+6mk_nwP4VA=Cn@0p17+6;nBsrp}es>;f3^*vxl zj6Edc)!>l{dEktBQ{4p8w9s4&^oQbA99NwsuUtLjWfeh`sBk`rqxMLXgU@KVrKdwq zVs?9Xx-!7DR5OnlHUEH7coa19;nG?ahs%TacZS2Zu+2~<%3&^|!x)EPFQeg1Tke zpps@P!M3kV5fi_2tcR$bpm+S9gG=6t>$F0CK-jiH(Up-wQ`_|67_I_uOWxi5NkuN7P@p}sqJ~YQK%p?kT@-c%Qhn*O%entP^z~q@wgaY&JnQ?LBD9sEY z=nIYiX6w_8kE@3bB*{e+EEh$cWs+{X5b0y3{kM-;z7(I}_gmXIerE|i)v;6iJ-PS_7}!rX=ZI&XZ$4o Fe*i<>?v?-m literal 0 HcmV?d00001 diff --git a/pictures/zookeeper-hadoop002.png b/pictures/zookeeper-hadoop002.png new file mode 100644 index 0000000000000000000000000000000000000000..6b0e4be1beba74c205edc707ae0af61651bed202 GIT binary patch literal 4813 zcmXX~2{aVm_a94} zGPbdeY0ToUe*bsQd+(lm-h21Hd*Auo`)>`SH+;p;6+TZKCDKo<=&V7p)+vGdIPBG=K9(|BYeHw%I3T1!I)49$^_ij;Z zZ*U`pqx&8peU7FPbZ40x0F*VWzoDVB_Ba-xvVS?nurvq|a*c=Oe0*=a>B|h0FvkY(#9Pqa=!#ysE zT8O$1P>4;vX=IG{9=`MEF7xVXKP8c%jdru>h=D{2$Qv4O`5B0 z=t-w_Zra^v#vQOvL!(}$hFL$%Kh;m$j~g=;xvv^-x@K5w+3#>ny>?eWs!DZ}EU;NE ztkb(bt(Ry1WTvqcF~4i@>N%z1sI(`$QUlro8~$*6b?U^$_|(g}ij@T4z(g*jb{nkK z90ZA4RNPePuCO&Xv>c^|rsH78Wi~zThG79dl8$y*G;AOEDGEhC`mW?oZJ<`2kV7{I z`wrB;AV5BaLtcZwMeJ{D(p<`!p3-1+*N)l!iXett2f`&ChZVCQ(`YKCF56-1p4G`l zrn#z5>KwgM4vsKe>OyV2LhhU0^Ac3##Hg7x_MV;uba3{D2qT4qy&T3b#+6Im7CJY4o% zK@z8XiSd5V51^DBuTNRIX$_yWyvgh`7&M`WxH=@<0%F)0>H{er9(6raOUJ z-d2y)^*Ft!>C%m}^$k*9oxX8S_7qVW%my;(d##WyZPa;}W=<$8t_dfrI-M-ORo0XN z6Sz>n4Hj*B=XQ}lIQ@=r`MKDHu$alD4;i7kxCVjX+(i>ETn#ei(J+}w21AD;zk0!Y z1ilt1u%fYX_GDd>d$d-}*?S%IMQ%mX`&t3$TYJxOS@cc5Y^?d{i=#bi)k?UvDr+=gQ^`m5N`@t zpakOQoAO)D=+ai7=jiN=Om=)L_zih=nhcVgsP6FFDZkeV3xD_!36+vOGoycyp~l2lz^8V?sBYbOiSN z1g>)p=iT}pDkCG97`PvKYfP>DLBS^bOP999v$nc+Klt3QiM^@rZ~V)*j(U<{`QkH6@=a&e#atL2aX(W#H-o7;IumV%Sk$rp-Be@~;Y-#g%zqaa!P z2vS|-InT=n+gxY9z?$4j-1CxbRT7nx5WQ`526tB@;=Nz=4WcoB4$)sM2q#Z!(# zbC8QE3dD?6+kJJxj*+XUW#g^$uJ^6E>_`Yy;Af1?#Y~>O9sD$NA-g5HMgq=~R&U?W zR8+S9VR5~z=#cpE$#XL00&>-PzfmecNN!eGHLO6~`91Ke)6c zpab2Fm_0Mt#5XG%8NOJvnn{Iv*WqXCV#01^*XNDbdG1iLh1QT53qQmAa#cZjsxQ>% z95mi7x9f`(l_?QNkQP0(As%_SXWhS%L2tw;!3Dr|C1U8+?kH;R>5dEr+J*$@;p(yK zr*-5(i*B-wP&hG^nj7?d6Lq_76+xbxUDxFrJ5`{riGIJWyV6;Z(V}tS24sDm)1a(s z^AguX(Jyj#a%wQsZjXqK66*LWk9;v?A!SNQ#0n@`GHf)jw_Lj-s+{fyM?ahw-W*pb zBFjXNhG*s>pwZevk1{*Svv~_w!3TuEF(FD9R_H>7OF+QAsz2Ga6LoA$SfPG~QGQkC zk@;a^k#pji$tc#KJLa_!dt(a6HFVO_EC2c0e9HwzzKzmrgFx@AeDlv&yA^PmvD|EuA+QWZ(`VTV& z9j2{DZXQ^TBxw--&LPX64# z#)C=)=Kc~(scZ#jdlhlgZgdSUnKv2?CKGt4IujHd6P-GG;F+ak1#F9k>p$O=DV@@D z#I^+P(Glb~va3)+&O z2aIAC!2)+^>zL*%GdNwK{d@d~)49dE<%o|bJ^hnt@0jz#f24zyfq_k=@$a2|yGaU| znrJd1oU-s?-d6*Yv`IMI;9me_p;@sKE>BFbrhq^2i$dVGg9Y&oQg1CQUyNfo2@(YY$=}F;KA(|A`$nq`1x~)zW9o&F8gS zbm*`wh8#8OzI|F6y?bEsqy`H<9IN3I-pr#HhI@Fk@xB$?x89-B-!2Dk+0g5E+)fdauLy%9Z># z`RMeo3KB0k3rGn++W8s%JPhOTO*#Q*P|_@|IVH6+>WL(>cWGVcd4cZ3PgKh2% zc0kFdy{9MX3c;@PaiP*2&&d2YkIbj}Z@Ap))$=_*5%9sLB%!+y7}>lzHW5q9;DM!* zHt`ri!xDKz3!>$)!Ar6wL1ph zA=CGx#HNJ-7372|mew&w!(}%5rJTp*$-S|5k@z>8Gnc=71xGhQ!9yy1%c7|pkppPN z>bl_7PU)*W=E%D1n!&yp)U_5}Z(-G^j(5Az&-4Nb-g2$yx~DQW@f2EC(62|qQ$ zPMNT%Vc;fzi`P~~z4H6R?=`o!!Z#QFt5U8M!7@jYQt;IE5s8=sQBrS(v-9jAr?PaM`Xcp|PnMqr;I#6C|

FbH|K!u(X^X5mQHQ< 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 O3PU|p-DYjKxc>mCpukW7 literal 0 HcmV?d00001