avatar1 avatar
@{[{user.name}]}
希腊·圣域
since February 1500

废话少说,zookeeper主要用于统一的命名状态同步集群管理分布式应用分布式锁等的管理工作。

1. Zookeeper最主要的工作原理概述

真实环境中Zookeeper一般会建立多个节点(node), 这些节点互相联通并进行选举,之后回选举出一个master主节点(或leader节点)和若干followers子节点,选举机制依赖于节点的投票机制,基本过程为:其中一个节点发现master尚不存在(原master死亡/尚未进行第一次选举),则该节点向其他所有节点发送我要想成为master的消息并等待其他节点的相应,如果超过半数或以上的节点同意则该节点随机成为master节点。

基于上面的解释,zookeeper集群中一般会建立>=3的单数个节点来方便master/leader的选举,例如3,5,7个节点这样。

当然实际的选举过程和策略远比这个要复杂的多,并且要处理各种各样不同的情形,还有一个典型的问题:假设有一组zookeeper的集群,当集群中的某些节点组A跟其他节点组B由于网络原因无法通信,但是这A组中的节点可以互相通信,B组中的节点也可以互相通信,这样就造成了会在两个组中同时存在两个leader,当网络恢复时,zookeeper是如何处理的?

2. 为什么要选举出master/leader节点呢

简单来讲,master的作用就是要统领其他节点的更新,因为zookeeper是一个分布式的协调系统,这样需要保证在zookeeper上的任何一个节点所读取到的值必须都是相同的。

Zookeeper是如何更新消息的
当你向其中一个节点发送更新请求时,该节点首先会将请求发送到master,之后master就会向全部子几点发送更新请求并等待反馈,当超过半数的节点反馈更新成功后master会更新自身状态为已更新,所以zookeeper并不能保证每次读取的一致性,由于master会总是存有最新的状态,所以其他所有节点则必须保持跟master的同步状态来同步自己的数据。

3. 模拟zookeeper的使用

  1. 首先下载zookeeper.

  2. 解压后复制三个副本来充当三个不同的节点

  3. 在每一个副本下创建data文件夹来存储信息。

  4. data文件夹下创建文件myid来指明该节点的id号,id号要唯一,该号码信息会在第5步写入配置文件。

  5. 为每一副本修改配置文件,conf/zoo.cfg
    Zookeeper-1


     tickTime=2000
     initLimit=10
     syncLimit=5
     dataDir=/Users/neeson/XPlan/ZooKeeper/zookeeper-1/data //数据存储的地方
     clientPort=2181 //客户端要连接该node所使用的端口
     server.1=localhost:
柳宗元的江雪 20 May 2017 21:00:00

千山鸟飞绝
万径人踪灭
孤舟蓑笠翁
独钓寒江雪


太喜欢这首五言绝句了,每次都在脑海里描绘一下诗中所描绘那种空旷的境地,下着雪,然后有点呼呼的北风,空旷的被雪覆盖的山岭以及偶尔传来的鸟叫声,有一个老翁独自坐在我岸边披着草衣带着斗笠在江边垂钓...୧(˶‾᷄ ⁻̫ ‾᷅˵)୨ 哇..这种场景实在太美妙了。

可能跟我喜欢下雪天有关系吧,因为一些原因,以及好多年没有看到过雪了,今年又将注定是看不到雪的一年,唉 ( ⸝⸝⸝°_°⸝⸝⸝ ), 希望有机会能够尽快再看到下雪天吧。。。 保佑┌|°э°|┘

先吐个槽୧(˶‾᷄ ⁻̫ ‾᷅˵)୨

LetsEncrypt是由ISRG互联网安全研究小组发起的一个免费、开发、自动化的证书颁发机构,所以安全性毋庸置疑,不像某些毫无节操的证书签发机构或者服务商通公然发放伪造证书,给某些原本毫无信用的垃圾机构的无耻行径添贡献厚厚的一笔,有句话怎么说来着,貌似叫弄巧成拙...

LetsEncrypt现在提供了SSL证书自动授权和管理的一个客户端,并且提供的详细的步骤等等是可以非常容易的安装和管理,不过我用的是Nginx做反向代理服务器,按照官网的nginx配置方法怎么都不成功,在阅读了大量相关文章后终于成功配置成功,一下是详细的配置步骤。

环境信息

服务器:   ubuntu 14.04/16.04
反向代理: Nginx 
Ghost:   0.11.8

安装certbot

可以参考certbot的官方网站

$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot 

第一次配置nginx

通过certbot自动授权证书的时候certbot服务器需要验证服务器的有效性,该步骤即为配置nginx以便certbot服务器可以通过验证。

首先备份你nginx的配置文件

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default_backup

编辑default文件,添加如下信息, 把yourdomain.com/www.yourdomain.com换成你自己的域名。

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    location ~ /.well-known {
        allow all;
    }
}

重启nginx

service nginx restart

certbot自动验证和签发SSL数字签名

确保你的服务器可以通过80端口访问。同样yourdomain.com和www.yourdomain.com换成你自己的域名。

如果第一次使用certbot命令时推荐在模拟环境模式运行,certbot现在加入了请求频率限制,一个小时内最多重试5次,如果5次全部失败则要等一个小时后才可以进行下一次请求,在模拟环境下测试通过后再取消模拟模式。启用模拟模式非常简单在certbot后添加

晋太元中,武陵人,捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之。复前行,欲穷其林。

林尽水源,便得一山。山有小口,髣髴若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑、竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人;黄发、垂髫,并怡然自乐。

见渔人,乃大惊,问所从来。具答之。便要还家,设酒, 杀鸡, 作食。村中闻有此人,咸来问讯。自云:先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏、晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”

既出,得其船,便扶向路,处处志之。及郡下,诣太守, 说如此。太守即遣人随其往,寻向所志,遂迷, 不复得路。
南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。


今天不经意间看到了陶渊明的这篇诗记,每次读完都内牛满面,描述的场景实在是太美好了(╥﹏╥)。内心一直有个阴谋论,为什么这个武陵人出来一路做记号最后却没有再找到回去的路,我想是因为里面的人对他说:不足为外人道也。然后他走后并不放心这个武陵人是否守信用就派人跟踪他,发现他留记号后就一边跟踪一边擦除记号,一边伪造记号,所以.... ╮(′~‵〞)╭

使用过iReport做过报表或者各种report的同学都知道,iReport对中文的支持非常差,可以说不经过任何配置的话是不支持中文的。因为iReport是基于iText生产PDF的,所以最简单的做法是导入iTextAsian包来解决中文文问题,但是这个包只支持宋体,在现在支持clearType的中文字体那么多,比如微软雅黑,如果可以随意更换自己喜好的字体就完美了。经过Kido的不断测试,终于找到一个简单可行的随意更换字体的办法。

  • 创建一个font文件夹,这个文件夹的位置可以不需要在工程目录下,比如可以在C盘下创建一个 C:/font, 如果是Mac则可以创建于当前用户目录下,比如:~/font

  • 添加刚刚创建的文件夹到你的iReport中的classpath中,如图

![](/content/images/2016/11/1.png)
  • 下载你想要添加的中文字体,注意,iReport只支持.ttf格式的字体,下载时请留意,字体一般有两个文件,一个对应普通字体另一个粗体。

  • 将下载好的字体保存到font文件夹,注意:不要包含子目录,直接将字体文件拷贝到font根目录。

  • 安装字体到iReport,如下图

![](/content/images/2016/11/5.1.png)

![](/content/images/2016/11/5.2.png)

![](/content/images/2016/11/5.3.png)
* 完成上述几步就可以在iReport中使用中文字体了,使用时跟iReport中默认的英文字体一样,不需要设置任何地方可直接使用,PDF font name, embeded等等统统不要设置。
  • 如果你想在Java中调用iReport动态生成PDF报告,那么你还需要将刚刚添加到iReport的字体打包成jar并添加到Java工程的classpath中,具体打包方法如图:
![](/content/images/2016/11/Screen-Shot-2016-11-14-at-10.21.53-AM.png)
Kido成功用以上方法随意的切换了中文字体,总结一记录一下吧,有需要的同学也可以参考一下。
当前第 1页,一共 4页