Zookeeper-肆分钟迅速控制分布式应用程序协调服

CDN(Content Delivery
Network,内容分发互连网)。其含义,在百度百科上是这么写的:CDN
是构建在数据互联网上的一种分布式的剧情分发网。CDN 的效率是利用流媒体服务器集群技术,制伏单机系统输出带宽及并发能力不足的通病,可大幅升高系统扶助的并发流数码,裁减或制止单点失效带来的不良影响。。。后边第一次全国代表大会堆。

一、Zookeeper 安装

关于它毕竟写的是怎么。作者也表达不晓得。其意义简单无情地精通便是:加快。举例表达:

1.zookeeper支持brew安装。

➜  ~ brew info zookeeper
zookeeper: stable 3.4.10 (bottled), HEAD
Centralized server for distributed coordination of services
https://zookeeper.apache.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/zookeeper.rb
==> Requirements
Optional: python ✔
==> Options
--with-perl
    Build Perl bindings
--with-python
    Build with python support
--HEAD
    Install HEAD version
==> Caveats
To have launchd start zookeeper now and restart at login:
  brew services start zookeeper
Or, if you don't want/need a background service you can just run:
  zkServer start

 

利用Chrome上一个网址(在这前面调出开发者工具(F1二)):http://www.codeproject.com/

通过brew install zookeeper 安装:

➜  ~ brew install zookeeper
Please wait for it to finish or terminate it to continue.
==> Downloading https://homebrew.bintray.com/bottles/zookeeper-3.4.10.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring zookeeper-3.4.10.sierra.bottle.tar.gz
==> Caveats
To have launchd start zookeeper now and restart at login:
  brew services start zookeeper
Or, if you don't want/need a background service you can just run:
  zkServer start
==> Summary
🍺  /usr/local/Cellar/zookeeper/3.4.10: 241 files, 31.4MB

 

再者在开发者工具中当选“Network”。

在/usr/local/etc/zookeeper/目录下,已经有了缺省的配置文件

➜  zookeeper ll
total 32
-rw-r--r--  1 huangweijie  admin    67B  9  4 22:13 defaults
-rw-r--r--  1 huangweijie  admin   339B  9  4 22:13 log4j.properties
-rw-r--r--  1 huangweijie  admin   941B  9  4 22:13 zoo.cfg
-rw-r--r--  1 huangweijie  admin   941B  9  4 22:13 zoo_sample.cfg

 

澳门美高梅手机网站 1  

zookeeper 默许配置文件内容:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/var/run/zookeeper/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

 

布局文件根本成效为以下多少个:

tickTime=2000
dataDir=/usr/local/zk/data
dataLogDir=/usr/local/zk/dataLog        
clientPort=2181

 

 

启航服务

下一场按下回车进入网址。等待网址加载实现。然后看到那些Network里面包车型客车始末。

zkServer

壹.zkServer –查看服务目录

➜  zookeeper zkServer
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

 

贰.zkServer start –运转服务

➜  zookeeper zkServer start
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED

 

三.zkServer status–查看服务意况

➜  zookeeper zkServer status
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Mode: standalone

 

肆.zkServer stop –关闭服务

➜  zookeeper zkServer stop
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Stopping zookeeper ... STOPPED

 

澳门美高梅手机网站 2

zkClient

➜  ~ zkCli
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]

 

 

此外操作系统的设置教程可参考:

http://www.cnblogs.com/wuxl360/p/5817489.html

http://blog.csdn.net/morning99/article/details/40426133

 

二、Zookeeper 集群

ZooKeeper分布式情势安装(ZooKeeper集群)也正如便于,那里说多美滋(Nutrilon)下主题要义。
首先要显明的是,ZooKeeper集群是1个单独的分布式协调服务集群,“独立”的含义正是,要是想选择ZooKeeper达成分布式应用的调和与治本,简化协调与管理,任何分布式应用都得以使用,那就要归功于Zookeeper的数据模型(DataModel)和层次命名空间(Hierarchical
Namespace)结构。

有一条极其难听的革命请求。请求的文件名叫:jquery.min.js,类型为Get,状态为(faild),还费用了十.九3S。最下边包车型客车音讯呈现总共消费了1二.八四秒,而以此jquery的请求就费用了10.93s,还退步了。

1、主机名称映射配置

本机安装将利用单机安装集群,由此在配备主机时大家将运用同一Ip,差异端口的操作,具体计划如下:

server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

澳门美高梅手机网站, 

在本次安装中,大家将应用三台zookeeper 服务器,分别采取的端口上述端口。

若果在付出中必要配备多台服务器,则能够将相应的ip修改为对象服务器地址:

server.1=10.192.1.120:2288:3388
server.2=10.192.1.121:2288:3388
server.3=10.192.1.122:2288:3388

 

除了使用Ip 直接访问外,也可以在本地设置host 域名解析,设置成相应的映射:

host 文件添加

10.192.1.120   slave-01  
10.192.1.121   slave-02  
10.192.1.122   slave-03 

 

zookeeper 配置文件:

server.1=slave-01:2888:3888  
server.2=slave-02:2888:3888  
server.3=slave-03:2888:3888

 

 

server.A=B:C:D

A:在那之中 A 是三个数字,表示那个是服务器的号码;

B:是以此服务器的 ip 地址;

C:Leader大选的端口;

D:Zookeeper服务器之间的通讯端口。

当今再单击那条浅米灰的请求,来查看详情。

二、创立布局文件

在设置完Zookeeper
后,我们能够在安装目录下找到zoo.cfg配置文件,个中重大的多少个布局项内容如下:

#f milliseconds of each tick
tickTime=2000

# The number of ticks that the initial
# synchronization phase can take
initLimit=10

# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5

# the directory where the snapshot is stored.
dataDir=/usr/local/var/run/zookeeper/zoo2/data

# the port at which the clients will connect
clientPort=2182

 

  • client:监听客户端连接端口
  • tickTime:基本事件单元,这一个小时是用作Zookeeper服务器之间或客户端与服务器之间维持心跳的日子距离,每隔tickTime时间就会发送多个心跳;最小的session过期时间为二倍tickTime
  • syncLimit:fowller与leader之间的心跳时间
  • dataDir:存款和储蓄内部存款和储蓄器中数据库快速照相的职分

在Zookeeper 的办事目录下开创zoo壹.cfg,配置内容如下:

#f milliseconds of each tick
tickTime=2000

# The number of ticks that the initial
# synchronization phase can take
initLimit=10

# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5

# the directory where the snapshot is stored.
dataDir=/usr/local/var/run/zookeeper/zoo1/data

# the port at which the clients will connect
clientPort=2181

#the location of the log file

server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

 

拷贝两份到zoo二.cfg, zoo3.cfg 首要区别为,端口,dataDir需求修改。

Zookeeper的办事目录如下:

➜  zookeeper ll
total 56
-rw-r--r--  1 huangweijie  admin    67B  9  4 22:13 defaults
-rw-r--r--  1 huangweijie  admin   339B  9  4 22:13 log4j.properties
-rw-r--r--  1 huangweijie  admin   941B  9  4 22:13 zoo.cfg
-rw-r--r--  1 huangweijie  admin   512B  9 11 21:01 zoo1.cfg
-rw-r--r--  1 huangweijie  admin   512B  9 11 21:01 zoo2.cfg
-rw-r--r--  1 huangweijie  admin   512B  9 11 21:13 zoo3.cfg
-rw-r--r--  1 huangweijie  admin   941B  9  4 22:13 zoo_sample.cfg

 

快速照相存放目录创制完后如下:

➜  zookeeper ll
total 0
drwxr-xr-x  3 huangweijie  admin   102B  9 11 20:47 data
drwxr-xr-x  4 huangweijie  admin   136B  9 11 20:33 zoo1
drwxr-xr-x  4 huangweijie  admin   136B  9 11 20:33 zoo2
drwxr-xr-x  4 huangweijie  admin   136B  9 11 20:55 zoo3

 

如下图:

3、设置myid

在大家安插的dataDir钦点的目录上边,创立二个myid文件,里面内容为多少个数字,用来标识当前主机,conf/zoo.cfg文件中铺排的server.X中X为何数字,则myid文件中就输入那一个数字,例如:

zookeeper echo "1" zoo1/data/myid
zookeeper echo "2" zoo2/data/myid
zookeeper echo "3" zoo3/data/myid

 

澳门美高梅手机网站 3

4、启动Zookeeper 集群

在Zookeeper 的劳作目录下,运行种种节点服务:

➜  zookeeper zkServer start zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo1.cfg
Starting zookeeper ... STARTED
➜  zookeeper zkServer start zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo2.cfg
Starting zookeeper ... STARTED
➜  zookeeper zkServer start zoo3.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo3.cfg
Starting zookeeper ... STARTED

 

起步成功后,能够由此 jps 或 zkServer status 查看服务是或不是运维:

➜  zookeeper jps
13024 QuorumPeerMain
13176 QuorumPeerMain
13007 QuorumPeerMain
13183 Jps

➜  zookeeper zkServer status zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo1.cfg
Mode: follower
➜  zookeeper zkServer status zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo2.cfg
Mode: leader

 

总的来看这些Request
U牧马人L,发现那条请求是发送到googleapis.com主机的。难题就在此间。谷歌在中华,基本上是被防火墙轰杀至渣的。那条请求根本不能够一气浑成正常的响应,导致了花了10.玖叁s还未有响应,最终还恳请退步了。

三、Zookeeper 命令

发生这类景况,壹般都以在我们走访国外的网址的时候发出的,国内开发者都通晓国情,所以依旧已经把脚本放在自个儿的网址下了,恐怕直接把请求发送到有个别CDN服务器上来加载。可是向Codeproject、Stackoverflow等外国网址都一直用googleapis,

一、Zookeeper的4字命令

Zookeeper协理少数特定的4字命令字母与其的交互。他们当先5/10是询问命令,用来赢得Zookeeper服务的方今场地及有关消息。用户在客户端能够经过telnet或nc向Zookeeper提交相应的吩咐。

Zookeeper 命令 功能描述
conf 列出相关配置的详细信息
cons 列出所有连接到客户端的回话详细信息
dump 列出未经处理的会话和临时会话
envi 输出关于服务环境的详细信息
reqs 列出未经处理的请求
ruok 测试服务是否处于正确状态
stat 列出关于性能和连接的客户端列表
wchs 列出服务器 watch 的详细信息
wchc 通过session 列出服务器watch 的详细信息
wchp 通过路径列出服务器wtch 的信息信息

调用样例:

  1. echo stat|nc 12七.0.0.一 2181来查看哪个节点被增选作为follower大概leader
  2. echo ruok|nc 1二7.0.0.一 21八一测试是或不是运营了该Server,若回复imok表示已经起步。
  3. echo dump| nc 1二七.0.0.1 21八一 ,列出未经处理的对话和一时半刻节点。
  4. echo kill | nc 127.0.0.1 2181 ,关掉server
  5. echo conf | nc 127.0.0.一 21八一 ,输出相关服务配置的详细音讯。
  6. echo cons | nc 127.0.0.一 2181,列出富有连接到服务器的客户端的一点1滴的连日 / 会话的详细音信。
  7. echo envi |nc 12柒.0.0.一 218① ,输出关于劳动环境的详细信息(区别于
    conf 命令)。
  8. echo reqs | nc 127.0.0.壹 218壹 ,列出未经处理的请求。
  9. echo wchs | nc 12七.0.0.壹 21八壹 ,列出服务器 watch 的详细音讯。
  10. echo wchc | nc 1二7.0.0.1 218一 ,通过 session 列出服务器 watch
    的详细消息,它的出口是三个与 watch 相关的对话的列表。
  11. echo wchp | nc 12七.0.0.一 21八壹 ,通过路径列出服务器 watch
    的详细新闻。它输出1个与 session 相关的路子。

之所以有那标题。

2、Zookeeper的 Shell 操作

bin目录下常用的脚本解释

  • zkCleanup  清理Zookeeper历史数据,包涵食物日志文件和快速照相数据文件
  • zkCli     Zookeeper的三个简短客户端
  • zkEnv    设置Zookeeper的环境变量
  • zkServer   Zookeeper服务器的开发银行、截止、和重启脚本

那么那几个题材该如何消除。那时候,CDN技术就足以派上用场了。小编这一个所谓的CDN,只是1个考试而已,摆不上台面包车型客车。自个儿玩玩就能够了。

2.1、ZkServer

zkServer 命令用于对服务器实行操作,主要命令为:

  • zkServer start 运维服务
  • zkServer stop 甘休服务
  • zkServer status 查看服务景况

那么什么样来操作。

2.2、ZkCli

zkCli 为进入劳动的客户端,与redis-cli 类似,当服务运转后,能够由此zkCli
进入劳动客户端。常用命令为:

  • zkCli 进入本机暗许服务,能够透过点名铺排文件进入该服务
  • zkCli -server ip:port 远程连接别的主机的劳务

上边分两大块来测试。壹、不写1行代码;二、用少量的代码控制(.net mvc四)

2.3、ZNodes

率先来说第贰种:不写一行代码如何来做。

2.3.1 create

运用create 命令,能够创设1个zookeeper节点,如:

create [-s] [-e] path data acl

 

里面,-s或-e分别钦命节点本性,顺序或一时半刻节点,若不钦赐,则表示持久节点;acl用来开始展览权力决定。

a、创造顺序节点:

create -s /zk-temp 123

 

执行命令后,会在目录下创造 zk-test 节点,供给专注的是,由于进入了 **-e
** 参数,执行命令后,生成的节点目录名会再持续加上一串数字:  zk-test0000001九

b、创设临时节点:

create -e /zk-temp 123

 

一时节点在客户端回话甘休后(quit),将会活动删除。又一次进入客户端时,将不存在刚创设的一时半刻节点

c、创造永久节点:

create /zk-temp 123

 

不行使参数时,将会私下认可成立永久节点

(一)要求的设施:1台服务器(windows),一台湾游客户机(windows)。注意:如果未有服务器,那么唯有1台湾游客户机也是足以的,正是1台总括机又当服务器,又当客户机。

2.3.2 读取节点

  • ls path [watch] :查看当前Zookeeper中所包罗的始末
  • get path [watch] :获取节点数据内容和性质
  • ls2 path [watch] :ls 和 get 的功效结合

命令调用示例:

[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]

[zk: localhost:2181(CONNECTED) 4] get /zk
myData
cZxid = 0x500000006
ctime = Fri Oct 17 03:54:20 PDT 2014
mZxid = 0x500000006
mtime = Fri Oct 17 03:54:20 PDT 2014
pZxid = 0x500000006
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

 

(2)服务器(只怕客户机)须要去控制面板打开IIS管理,那个隐秘了。

2.3.3 Set

set path data [version]

利用Set 命令,能够创新钦定节点的数量内容,例如:

[zk: localhost:2181(CONNECTED) 5] set /zk Jayce
cZxid = 0x500000006
ctime = Fri Oct 17 03:54:20 PDT 2014
mZxid = 0x500000007
mtime = Fri Oct 17 03:55:50 PDT 2014
pZxid = 0x500000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0

[zk: localhost:2181(CONNECTED) 6] get /zk
Jayce
cZxid = 0x500000006
ctime = Fri Oct 17 03:54:20 PDT 2014
mZxid = 0x500000007
mtime = Fri Oct 17 03:55:50 PDT 2014
pZxid = 0x500000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0

 

(三)下载二个jQuery文件。那里有个微软CDN服务器能够下载,打开链接之后,Ctrl+S就行了——http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.4.min.js

2.3.3 Delete

delete path [version]

经过delete 命令能够去除指标节点内容:

[zk: localhost:2181(CONNECTED) 7] delete /zk
[zk: localhost:2181(CONNECTED) 8] ls /
[zookeeper]

 

(四)原理简介:大家在浏览器输入3个域名(网站),按下回车之后,总括机(windows)做的事体,正是先在地头的七个名字为hosts的文书中搜寻映射关系。

其一hosts文件的意义正是分析域名,把请求的域名转换到IP。来看一下hosts文件中情节(能够直接用记事本打开,此处使用Notepad++,强烈推荐啊)。如下图:

澳门美高梅手机网站 4

看来那几个文件有许多的诠释,这一个音信十分有用,提议仔细研读,那里稍作解释。那几个注释说的不经意就一句话:

本文件用于域名解析,用法:一行只好写多个炫耀关系,语法是:IP 空格
域名。

也正是说,大家只要像她那样写,在结尾追加一行,并保留,比如

127.0.0.1 www.baidu.com

下一场去浏访问百度,发现并未访问到百度。因为域名解析被指向了地点1二柒.0.0.1。

经过能够想到,假若能把这些ajax.googleapis.com域名解析成大家得以访问到的IP不就足以了嘛。于是先鲜明服务器(或许客户机)的IP地址。作者那边的IP地址是局域网IP地址:1玖2.168.一.10八。

假就算客户机,比如是团结的总结机,那么能够写1二7.0.0.1。于是追加到hosts中去:

192.168.1.108 ajax.googleapis.com

接下去,看到光是域名解析做完了是不够的,因为那壹段请求十二分的长,后边有诸多级目录:http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js

那么此时候IIS的效应就要用起来了。首先到服务器中开创好当地目录,专注这一个目录的布局要做成:/ajax/libs/jquery/壹.陆.2/jquery.min.js。如下图:

澳门美高梅手机网站 5

然后在IIS中添加网址,怎么添加那里不说,添加之后如图:

澳门美高梅手机网站 6

 

 

接下来小心,在拜访codeproject从前最佳做壹件事情,正是清空浏览器缓存,不然大概会从缓存中读取,看不到效果。接着来访问网址。

澳门美高梅手机网站 7

 

 

 

看来那结果,完美加载状态码为200,成功了。然后单击那条查看详情:

澳门美高梅手机网站 8

 

大家看出那里多了二个Remote
Address,便是我们想要解析到的IP地址,后边的80是暗中认可端口。几乎无微不至运维啊。

此地只好说美赞臣(Meadjohnson)下,hosts文件应当是不扶助端口映射的,小编试了广大,像什么冒号+端口,逗号+端口,都十分,去查好像也是说相当,

约等于说我们解析的时候只好选取80端口。而80端口是暗中认可的,所以在hosts文件中并非指明。

那么再来考虑壹种景况,不相同的网址jquery文件请求版本恐怕分裂。codeproject是一.陆.二,stackoverflow的是1.7.一,jquery.com的央浼是一.11.二。而大家刚刚唯有2个1.陆.2。

既是那样,那我们会想,作者在刚刚的公文夹/ajax/libs/jquery/下,多加多少个本子文件夹不就行了吗。比如再加2个壹.7.壹,再加二个一.1一.二,然后在那四个文件夹下再各放3个

jquery.min.js。不错,那真的是足以的。这么些jquery.min.js文件的莫过于版本,你能够不跟文件夹对应,你能够全体都以1.陆.2,只要外面包车型客车文书夹版本写对就行了,可是如此不是很好,

因为微微网址用的壹.11.二本子里的性状,而你给她分析加载的实际是一.陆.贰,那样就会报错了。所以最佳依然对应起来。

 

吸收来说第叁种方法,用少量的.net mvc手段来决定。

能够让jquery的实际上版本和文件夹写出来的版本号完美对应。

第三用visial studio 2013 update5来成立1个mvc四类型。

如下:

澳门美高梅手机网站 9

创建完了以往没用的东西尽数删减,个中那个script文件夹中放了重重的jquery版本,如图:

澳门美高梅手机网站 10

好了。然后大家来创设贰个控制器,取名叫HomeController,写二个Action,取名字为Index,如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace CDN.Controllers
{
    public class HomeController : Controller
    {
        public void Index(object id)
        {
            var js = String.Format(@"/Script/jquery-{0}.min.js", id);
            var temp = Server.MapPath("~" + js);
            Response.WriteFile(temp);
        }
    }
}

下一场依照http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js这个请求的特性,来配置一下路由参数。如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace CDN
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "ajax/libs/jquery/{id}/jquery.min.js",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

懂MVC4的人1眼就知道了,如若不懂的,提议先看看mvc4的路由规则,那里不再赘述。那几个url,就是基于那条请求本性写的,把版本号用{id}来代替,把请求指向/Home/Index?id=版本号。

于是HomeController中的Index顺遂的收受到了请求,再根据id中传过来的版本号找到服务器中有关文件,然后response出去,就能够了。最终颁发出去,安顿到IIS中。详细经过不赘述。如图:

澳门美高梅手机网站 11

下一场去做客一下,结果跟上面1模一样,那里不截图了。

 

个人感觉第一种方式好一些,用程序控制版本。可是第三种方法不难暴虐,也是足以的。

效仿CDN就到位了。那里用googleapis来比喻,因为用到的可能挺多,所以就用那几个了。那种方法本身无论玩玩就行了。毕竟要改hosts,不宜做什么用处。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注