首页 文章 精选 留言 我的

精选列表

搜索[搭建],共10000篇文章
优秀的个人博客,低调大师

怎样在初创公司里搭建稳定、可访问的数据基础架构

数据是创立Asana的核心部分,并且每一个团队都依赖他们自己的方式。我们的负责增长的团队依靠事件数据来分析试验结果(对比试验)。 我们做很多快速的实验--通常会有很多实验一起跑-- 让这些互相影响的作用和其他关键度量引导我们需要放弃什么和投入什么 项目经理,设计师和产品工程师通过分析使用数据来发现不可避免的妥协,比如简洁性对强大性。 通过这种方法,我们可以知道什么样的新产品方向能够释放出最多的潜力。市场部门需要明确在他们的竞争力中的哪个部分能够驱使新用户到Asana。财会部门需要非常可靠的关于总体增长模式的统计数据来帮助Asana确认能持续发展到2064年。你是怎样建造一个支持所有这些多样需求的系统呢 ? (Asana 数据基础架构) 从小开始,逐渐增长 上图并不是我们一开始就建立的系统。我们从一个十分简单的系统开始,也就是一些python脚本和MySQL数据库,它们全都运行在一个机器上。刚开始的时候,一个简洁的系统能够减少系统维护,并且如果还没有任何用户,或许你就可以从这里开始。但是,从2011开始,Asana的增长就一直稳定(看下面的图)。然后我们就开始碰到一些限制。最近,针对数据基础架构,我们做了一系列的变化。所有的一切都证明是很有价值的。 往监控,测试和自动化上投资来减少救火的次数 从MySQL迁移到Redshift,得到一个可扩展的数据仓库 从本地的日志处理迁移到基于Hadoop的可扩展的日志处理 引进商业智库工具来允许非专家来回答他们自己的数据问题 Asana随着时间变化时的“时间”数量图。按照原始数据量做单位 结束无休止的问题 一年前,我们遇到了一些关于数据处理健壮性的问题。当图表中有个重要的变化,人们立马会质疑数据的整体性。把问题和有趣的想法区分开来是很难的。数据科学已经是一门艺术,所以你需要基础架构来给你提出的问题一个信得过的答案。然而,99%的准确性还是不够好。在数据基础架构小组那里,我们花费了太多时间鼓捣非常紧急的问题,而且这点使得我们没法取得更长期的发展。这太痛苦了。 受到启发 当坏的事情发生后,我们会采取“5个为什么”的方法来发现问题的原因和解决这个问题。比如,我们曾经让一个数据处理脚本错误地生成了一个超级大的日志文件,它太大了,以至于我们无法用电子邮件发送。作为解决方案,我们在发生日志文件前就开始把日志文件分割成小段,并且在发送邮件错误的时候发送警告信息和在脚本输出结果上增加监控。在其他的一些我们还没有办法洞悉原因的例子里,我们就增加日志,检测和预警。例如,我们的实验总是经常性的落后,所以我们在不同的处理阶段增加更广泛的日志记录来看看哪里花费了最多的时间,并且用来指示什么部分需要优化。 当我们的监控和日志记录不够的时候,最坏的事情持续了好几个月。一个比较极端的例子就是,我们的一个工具花费了比其应花费时间多很多的时间。一段时间后,我们发现了一些查询被传递进了一个不知道为什么我们也没搞懂的、含有有特殊时区信息的时间类。这些查询显著地增加了查询时间。由于这个任务花费了一天多的时间来完成,所以第二天的任务才能接着开始,然而这导致了MySQL锁过期。当生成图像的时候,这些任务就没法取得所有需要的数据。我们隐藏了零数值,并且必须要每次人工地做很多工作去清理。错误总是导致更多的错误,所以打补丁也没有用。最终,这个事件使得我们真正要去把测试的优先级提到最高。 一年前,我们的数据基础架构的代码上面几乎就没有任何测试。然而我们还不能满足我们当前的测试覆盖率,但是我们已经做了很多改进。当你得到一个失败的测试结果并且你意识到这个本可能出问题的部分使得你改变了产品的一些代码。这样的感觉好极了。虽然我们一直在探索节点增加的特性,我们还是使用python内置的单元测试模块。我们把努力的方向放在为数不多的,特别是在那些我们能够建立自己的架构代码的领域,从而使得我们的数据科学家和其他的数据用户能够写出他们自己的测试。 自动化测试 原来我们用cron来运行所有的事情。任务会在不同的时间段运行,我们期望某些任务在另外一些依赖它们的任务开始前完成。但是事情不总是这样。比如,一个任务运行失败,那就需要很多人为的清理。接着,我们开始使用Luigi 来建立一个管道。这个管道懂得依赖性,就像你看到的下图中我们的管道的一小部分示例。通过Luigi,当一个任务运行失败,我们会得到告警,而且所有依靠它的任务都不会运行,直到我们修复那个运行失败的问题。只需要恢复管道并且让未完成的任务继续,这样就简单多了。这个也是我们并行化这些任务的第一步。 我们的过去的预警方式很粗糙简陋。我们有显而易见的比如关于可用的硬盘空间的预警,但是这个花费很多思考和努力来克服困难从而得到我们今天拥有的一切。现在,我们覆盖了所有的系统警告,从内存和CPU使用率到Redshift集群上长时间的高负载。我们监控我们数据管道的变化,当时间花费超出预期或者一些任务没有能够在我们期望的时间内完成时就发出预警。我们监控数据本身,保证重要的变量都是非零的,并且用回归分析来提示一个事件出现多于或者少于在过去的几个星期中我们看到的次数。 (用Luigi画的我们数据的ETL 管道) 我们改进关于优先处理邮件警示的过程。我们十分重度地依赖Asana,它工作十分良好,特别是在分担责任和当数据会出现预知的错误时通知用户。 (原文此处的will应该为with)有了这些努力,问题逐渐变得少了。一旦不再花费时间让已有的数据基础架构发生瘫痪,我们就有时间来建造未来。 我们的数据基础架构的最新发展如下: 扩展的数据仓库 (Redshift) 最初,我们使用MySQL数据库作为数据仓库,因为我们的工程师擅长优化这个数据库。但是,因为MySQL是基于行记录的,所以它不适合在非常大的数据集合上运行包含复杂链接操作的聚集查询。当我们遇到了性能问题,我们修改索引。当我们还遇到更多的性能问题,我们在MySQL之上建立一个定制的、面向直方图的查询缓冲层。 依旧,每一处优化只能帮助我们走得这么远,并且我们并不想把我们的宝贵的工程师资源花在建立分析数据库上。很多公司都宣称Redshift帮助他们很好的提速。所以我们也打算试一试。结果太好了。在最极端的情况下,一个日常的查询在MySQL上需要6个小时,但是在Redshift上,只需要几秒钟,而且不需要任何修改。 一个在MySQL上需要花费数分钟的查询,但在Redshift只需要1秒钟。 迁移的过程 迁移到Redshfit可不是一个小事情。我们已存在的数据管道是适合于MySQL的计划而建造的。并且每一个人都很熟悉这个特点。我们努力抽象出Redshift的特性。比如,通过亚马逊的S3加载数据和依据主键合成数据到一个已有的表格。缺少对于主键的支持是意料之外的最大缺点。然后迁移我们已存在的数据管道的乐趣就开始了。复杂的依赖性意味着我们必须小心地按照正确的顺序迁移写入。有时,当我们迁移从MySQL的一个表格到Redshift的所有查询时,我们必须同时写入到MySQL和Redshift。最困难的部分是协调部门之间的努力去迁移数量巨大的、相互依赖的MySQL查询语句。而且其中的一些只被很少的一部分人理解和使用。我们从数据科学家和商业团队中得到了关于他们最棘手的部分的有价值的反馈。继而,我们使得他们的工作变得更愉快。 解锁新的分析 然而我们选择Redshift时的主要目的是解决性能和可扩展性的问题,不过它顺便也改进了可访问性。这点来得有点间接和意外。在迁移到Redshift的同时,我们也在探寻商业智能工具。我们评估了一些工具,本来最喜欢Looker,而且决定尝试一下。不幸的是,当我们把它和MySQL连在一起时的分析结果太慢了,以至于我们没法推荐给我们的商业团队。把Looker和Redshift链接后,性能从需要数分钟变得足以实时地在绝大多数查询上循环。这个组合太强大了,以至于我们的商业团队自己就决定用它了。 我们绝大多数的商业团队就凭他们自己,其中有些成员甚至连SQL查询不熟悉,也能够玩数据。更好的是,他们能够在不需要数据基础架构小组的支持下做到这点。他们的团队负责人说:“这个就仿佛我把1995年自动挡的吉普牧马人换成了法拉利一样爽… 有快又有乐趣!” 进一步地扩展 Redshift还提供了工具用来限制给单独的进程和程序的资源。我们非常依靠这些功能来防止某些个人把数据库独占,从而别人无法使用。通过增加机器的数量,然后按一些按钮我们就能在半个小时内加速和增加存储量。在将来,我们还可能自动化这个过程。 可扩展的日志处理 (弹性 MapReduce) 我们日常的数据处理延迟变得很长,但是我们努力保持处理时间在24小时内。虽然Redshift起了很大的帮助,但是我们也需要扩展日志处理部分。我们决定采用这个行业的长期标准 Hadoop MapReduce。除了容易变得可扩展的,这也是一个更容易的数据处理方式。和建造易使用框架的努力一起,这个使得更多的每天工作不是写代码的同事也能够把日志处理成有用的模式。因此,这个既是一个大的扩展性项目也是一个易用性的项目。 我们在Yelp的映射归纳任务框架(mrjob)的基础上建立我们的系统。因为我们都知道Python很好,而且在灵活的MapReduce上开始跑任务也比较容易。我们知道这个明显地比Java和流慢一些,但是那个层次的性能还不重要到让我们降低易用性。我们在设计基础架构的时候就好像知道在将来我们会把mrjob换到到其他的一些东西。 当我们开始用MapReduce的时候,我们仍旧同时写入MySQL和Redshift中。起初,这个让我们同时从Hadoop集群上加载数据到两个数据库中。但是这个并不好使,因为大多数的集群会空闲很长的时间,而有时我们就很容易地碰到过期。所以我们提倡放弃MySQL,而在集群之外,移动数据到Redshift。亚马逊的弹性MapReduce可以存储输出到S3。我们利用这个来存储数据,并且加载它到Redshift上来作为一个来自单独的服务器的任务。 当前,我们用一个八个节点的集群,这个给我们4到6倍的性能提升。当我们负责增长的团队要增加三倍的运行任务的时候,我们只需要增加Hadoop集群的大小或者增加更多的集群。我们运行在亚马逊弹性MapReduce上,就使得这样做变得更容易。可扩展性还间接地帮助了易用性。因为不用担心他们的代码变得很慢和对数据管道有负面的影响,我们的商业团队在增加更多的数据处理上变得舒服很多。 商业智能工具 (Interana and Looker) 当调研商业智库工具的时候,有人介绍Interana。一个基于交互事件的、处理原生日志文件的分析解决方案。然而,这个并不是我们一开始需求的东西。我们集合我们的数据后发现它可以满足一个之前并没有预料到的需求:超快循环分析原生日志。我们就成为他们的最初的几个用户之一。在早期的产品设计里,我们和他们反复交流,使得他们实现了很多我们的性能需求。这逐渐地成为我们产品团队数据分析中的一个集成部分。同时,Looker继续成为我们商业团队的一个重要的补充。我们的团队需要及时分析某几个时间点上数据的状态。 我们能够在几秒钟内处理十亿数量级的数据点。从而展现出很多我们的数据中深层次的数据分析,这在以前不可能的。任何查询数据模式的人都能够很快地切割数据来发现根本原因并且拥有我们全部的数据集的访问权来快速地在区块中筛查。这允许他们探索我们的用户怎样使用这个产品,从通过群组来做简单的事件计数到复杂的对话和漏斗分析。现在,我们很少写专门的脚本来扒下创建特殊聚集的日志。我们开始用Interana来分析性能日志。团队成员说:“一旦当Interana加入到我们的数据处理管道中,查找和解决回归分析的效率就提高了一个数量级。” 一些Looker擅长的例子: 查询金融和收入数据;多种方式分切收入来理解增长的趋势 视觉化随着时间流逝的群效应(见截图右侧部分) 数据堆砌;所有满足一个标准的客户,等等。 (Looker帮助我们查看大维度建模在时间轴上的群效应) 一些Interana 擅长的事情: 交互的漏斗分析 视觉化用户行为,导致新能问题(截图中的右边部分) 理解长期使用这个应用的用户会做什么操作 Interana使我们能够找出在Asana中最慢的一些共同的行为 接下来 除了这些大项目,我们加固了一切,从而使得同事不会轻易的不小心弄瘫痪设备。Justin Krause,我们的商业智库负责人说:“我们的工作生活变得非常好了,我几乎不会弄坏任何东西了。” 大多数星期里,我们只用半个小时的时间来维护基础设备。我们喜欢我们现在的状态,但是这个仅仅是漫长旅行中的一点。伴随增长,新的功能,新的生意需求,我们管道中的很多部分在将来的岁月中都会变得过时。我们知道事物总是会出现新的、有趣的错误,所以我们也增加测试和监控,以谋求在发生前发现大部分情况。我们还留意在数据分析领域中,哪个新系统变得流行,我们就会做出相应的对策。 我们认为会在下面几点探索一下: 加入Hive,在Redshift之上增加一些东西,或者在Interana的能力范围之外用另外一个系统来做原始的日志查询。 流数据分析的系统 比mrjob更快的Hadoop,或者可能用像Spark一样的东西来做内存中的MapReduce 更好的异常探测和趋势预警 限制单点缺陷 如果你对在快速变化的环境下建立数据基础架构有很好的想法,请加入我们下一阶段的旅行吧。如果你想分析大数据和学习各个组之间怎样工作,就以一个数据科学家的身份来用这个基础架构!Clark Bernier,我们的一个数据科学家说:“和一群有天赋,有担当的数据基础架构团队一起工作是在Asana中作为数据科学家时最美好的一部分。我能够专心于数字和他们的含义中,我相信我的分析能够如闪电般一样飞速。” 来源:董老师在硅谷 知乎专栏 原作者:Marco Gallotta 译者:Liang Yu 原文:Stable Accessible Data Infrastructure in Startup 本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2016-04-04

优秀的个人博客,低调大师

Zookeeper的安装部署,zookeeper参数配置说明,集群搭建,查看集群状态

1、Zookeeper的安装部署 7.1 Zookeeper工作机制 7.1.1、Zookeeper集群角色 Zookeeper集群的角色: Leader 和 follower(Observer) zk集群最好配成奇数个节点 只要集群中有半数以上节点存活,集群就能提供服务 7.2 Zookeeper部署 7.2.1 机器准备 1/ 安装到3台虚拟机上,准备的三台服务器地址是: C:\Windows\System32\drivers\etc\hosts中配置的内容如下: 192.168.106.80 hadoop 192.168.106.81 hadoop2 192.168.106.82 hadoop3 如果想同时能够操作三台服务器,可以进行如下配置: 2/ 安装好JDK 3/ 上传安装包。上传用工具。 4/ 解压 su - hadoop(切换到hadoop用户),如果直接是root用户则不需要这样切换 tar -zxvf zookeeper-3.4.5.tar.gz(解压) 5/ 重命名 mv zookeeper-3.4.5 zookeeper(重命名文件夹zookeeper-3.4.5为zookeeper) 可以删除里面一些源码工程相关的文件,剩下的是这些: 7.2.2修改环境变量 (注意:3台zookeeper都需要修改) 1/ su – root(切换用户到root) 2/ vi /etc/profile(修改文件) 3/ 添加内容: export ZOOKEEPER_HOME=/home/hadoop/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin 4/ 加载环境配置: source /etc/profile 5/ 修改完成后切换回hadoop用户: su - hadoop 7.2.3 修改Zookeeper配置文件 1、用root用户操作 cd zookeeper/conf cp zoo_sample.cfg zoo.cfg 2、vi zoo.cfg 3、添加内容: # 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=/home/tuzq/software/zookeeper/zkdata dataLogDir=/home/tuzq/software/zookeeper/log # the port at which the clients will connect clientPort=2181 # # 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 server.1= hadoop:2888:3888 server.2= hadoop2:2888:3888 server.3= hadoop3:2888:3888 参数说明: tickTime:zookeeper中使用的基本时间单位, 毫秒值. initLimit: zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower。 initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即5*2000=10000ms=10s. syncLimit: 该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为2, 说明时间限制为2倍tickTime, 即4000ms. dataDir: 数据存放目录. 可以是任意目录.但是我喜欢这么干 dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置 clientPort: 监听client连接的端口号. server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. 由于配置的是伪集群模式, 所以各个server的B, C参数必须不同. 4、创建文件夹: cd /home/tuzq/software/zookeeper/ mkdir zkdata mkdir -m 755 log 5、在data文件夹下新建myid文件,myid的文件内容为: cd zkdata echo 1 > myid 7.2.4 分发安装包到其他机器 scp -r /root/apps root@hadoop2:/root/ scp -r /root/apps root@hadoop3:/root/ 7.2.5 修改其他机器的配置文件 1、修改myid文件 到hadoop2上:修改myid为:2 到hadoop3上:修改myid为:3 7.2.6 启动(每台机器) 注: 1、事先将三台服务器的防火墙都关掉 2、全网统一hosts映射 先配好一台上的hosts 在hadoop机器中的hosts文件中做如下修改: [root@hadoop zkdata]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.106.80 hadoop 192.168.106.81 hadoop2 192.168.106.82 hadoop3 然后: scp/etc/hosts hadoop2:/etc scp/etc/hosts hadoop3:/etc 查看hadoop2中的hosts文件中的内容 [root@hadoop2 zkdata]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.106.80 hadoop 192.168.106.81 hadoop2 192.168.106.82 hadoop3 3、然后一台一台地启动 bin/zkServer.sh start 创建日志文件目录,如果没有这个日志文件将会报错 mkdir -p /home/tuzq/software/zookeeper/log 或者编写一个脚本来批量启动所有机器: for host in " hadoop hadoop2 hadoop3" do ssh $host "source /etc/profile;/home/tuzq/software/zookeeper/bin/zkServer.shstart" vim startupZK.sh chmod +x startupZK.sh #!/bin/bash for host in "hadoop hadoop2 hadoop3" do ssh $host "source /etc/profile;/home/tuzq/software/zookeeper/bin/zkServer.sh start" done 7.2.7 查看集群状态 1、jps(查看进程) 2、zkServer.sh status(查看集群状态,主从信息) 分别查看hadoop hadoop2 hadoop3这三台服务器上的zookeeper的状态

优秀的个人博客,低调大师

如何使用一个IP搭建ES集群——Docker如你所愿

打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处: http://blog.csdn.net/gamer_gyt 博主微博: http://weibo.com/234654758 Github: https://github.com/thinkgamer 写在前边的话 随着业务的发展,elasticsearch部署在一台机子上显然会不够用,那么我们该如何处理呢,幸运的elasticsearch支持横向扩展,即集群模式,这样无论数据量增长多大,我们只需要扩展我们的es集群即可。 本文永久地址 http://blog.csdn.net/gamer_gyt/article/details/53648983 背景说明 Ubuntu16.04 Docker 1.9 Elasticsearch 2.4 假设现在就一台服务器,我们要用这台服务器来部署一个ES的集群,那么最好的解决办法便是Docker了,我们可以利用Docker启动两个容器,在两个容器内各部署一个ElasticSearch,总而组成一个2个节点的ES集群 linux下Docker的部署:http://blog.csdn.net/gamer_gyt/article/details/52769294 终端安装Docker:http://bbs.csdn.net/topics/392063910 我的Docker专栏:http://blog.csdn.net/column/details/13159.html Docker网络模式解释 1:host模式 众所周知,Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 例如,我们在10.10.101.105/24的机器上用host模式启动一个含有web应用的Docker容器,监听tcp80端口。当我们在容器中执行任何类似ifconfig命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用10.10.101.105:80即可,不用任何NAT转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。 2:container模式 在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。 3:none模式 这个模式和前两个不同。在这种模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。 4:bridge模式 bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上 两个容器以组播方式创建ES集群 组播配置示例如下,单播配置在最下边,使用时只需替换加几行配置即可 1:下载Ubuntu最近版镜像 sudo docker pull ubuntu 2:配置基本环境 启动容器,进入容器内安装基本环境vim,java,和elasticsearch sudo docker run -it -d –name esc1 ubuntu:latest sudo docker exec -it esc1 /bin/bash apt-get install vim apt install openjdk-8-jre 然后安装es,下载安装包 点击下载 将其拷贝到docker内,安装 dpkg -i elasticsearch-2.4.0.deb 至此基本环境已经准备的差不多了,然后便是退出容器,stop 容器,然后进行commit 保存成两个容器 sudo docker commit esc1 es1:1.0 sudo docker commit esc1 es2:1.0 最后查看镜像如图所示: 3:es环境配置 分别启动两个容器 sudo docker run -it -d -p 9201:9201 -p 9301:9301 -p 5001:5001 -p 5602:5602 –name esc1 es1:1.0 sudo docker run -it -d -p 9200:9200 -p 9300:9300 -p 5000:5000 -p 5601:5601 –name esc2 es2:1.0 进入两个容器进行配置elasticsearch.ymal文件 esc1: cluster.name: xdstar node.name: node-1 node.master: false node.data: true network.host: 0.0.0.0 http.port: 9201 transport.tcp.port: 9301 esc2: cluster.name: xdstar node.name: node-2 node.master: true node.data: true network.host: 0.0.0.0 http.port: 9200 transport.tcp.port: 9300 cluster.name:集群名字,配置必须一样 node.name:每个节点的名字,不能一样 node.master: true 代表可以被选举为主节点,false代表不能被选举为主节点(这里我们设置esc2为主节点) ndoe.data:代表是否可以存储数据 network.host:表示访问的ip,0.0.0.0表示可以以IP访问或者localhost,127.0.0.1 network.port:访问的端口 启动Elasticsearch service elasticsearch start 细心的朋友会发现容器的启动端口转发端口不一致,这是因为,这里启动Docker容器默认采用的桥接,和主机共享端口了,所以两者端口不能一致,要不然会重复 启动完es集群,浏览器输入 https:192.168.1.250:9200/_plugin/head (这里我安装了head插件,插件安装,参考之前的一篇文章,里边有讲到:http://blog.csdn.net/gamer_gyt/article/details/52654263) 4:安装logstash配置rsyslog解析文件 logstash 2.4版本 点击下载 更多版本:https://www.elastic.co/downloads/past-releases dpkg -i logstash-all-plugins-2.4.0_all.deb 然后进入配置文件目录 cd /etc/logstash/conf.d vim rsyscon.conf 添加以下内容 input { syslog{ port => 5000 type => syslog } } output { stdout { codec=> rubydebug } elasticsearch { hosts => ["localhost:9200"] } } 启动logstash service logstash start 5:本地配置,产生syslog日志 编辑rsyslog的配置文件: vim /etc/rsyslog.conf 最后添加 *.* @localhost:5000 *.* @@localhost:5000 重启rsyslog服务 service rsyslog restart ssh 本地,产生日志 ssh localhost 这个时候观察elasticsearch界面: ES集群的多播与单播 以上的集群是采用组播的方式来构建的,组播就是通过在你的网络中发送UDP的ping请求以发现节点,其它Elasticsearch会收到这些ping请求并且进行响应,这样随后就会形成一个集群。 多播对于开发环境是很好的,你不需要做什么事情,打开一些节点,他们自然的会发现对方形成一个集群。 正是因为这种易用性,你在生产环境中必须禁掉它。否在你得到的结果就是一个节点意外的加入到了你的生产环境,因为他们收到了一个错误的组播信号。对于组播本身并没有错。组播会导致一些愚蠢的问题,并且导致集群变的脆弱(例如:一个网络工程师正在捣鼓网络,而没有告诉你,你会发现所有的节点突然发现不了对方了)。 在生产环境中,建议使用单播代替组播,也就是说为Elasticsearch提供一些它应该去尝试连接的节点列表。一旦这个节点联系到组播列表中的一员,它就会得到整个集群所有节点的状态,然后它会联系master节点,并加入集群。 这意味着你的单播列表不需要包含你的集群中的所有节点,它只需要包含足够一个新节点联系上其中一个并且说上话就ok了。 ES 是一个 P2P 类型(使用 gossip 协议)的分布式系统,除了集群状态管理以外,其他所有的请求都可以发送到集群内任意一台节点上,这个节点可以自己找到需要转发给哪些节点,并且直接跟这些节点通信。 所以,从网络架构及服务配置上来说,构建集群所需要的配置极其简单。在 Elasticsearch 2.0 之前,无阻碍的网络下,所有配置了相同 cluster.name 的节点都自动归属到一个集群中。 2.0 版本之后,基于安全的考虑,Elasticsearch 稍作了调整,避免开发环境过于随便造成的麻烦。 ES 从 2.0 版本开始,默认的自动发现方式改为了单播(unicast)方式。配置里提供几台节点的地址,ES 将其视作 gossip router 角色,借以完成集群的发现。由于这只是 ES 内一个很小的功能,所以 gossip router 角色并不需要单独配置,每个 ES 节点都可以担任。所以,采用单播方式的集群,各节点都配置相同的几个节点列表作为 router 即可。 此外,考虑到节点有时候因为高负载,慢 GC 等原因可能会有偶尔没及时响应 ping 包的可能,一般建议稍微加大 Fault Detection 的超时时间。 同样基于安全考虑做的变更还有监听的主机名。现在默认只监听本地 lo 网卡上。所以正式环境上需要修改配置为监听具体的网卡。 network.host: "0.0.0.0" discovery.zen.minimum_master_nodes: 3 discovery.zen.ping.timeout: 100s discovery.zen.fd.ping_timeout: 100s discovery.zen.ping.unicast.hosts: ["10.19.0.97","10.19.0.98","10.19.0.99","10.19.0.100"] 上面的配置中,两个 timeout 可能会让人有所迷惑。这里的 fd 是 fault detection 的缩写。也就是说: discovery.zen.ping.timeout 参数仅在加入或者选举 master 主节点的时候才起作用; discovery.zen.fd.ping_timeout 参数则在稳定运行的集群中,master 检测所有节点,以及节点检测 master 是否畅通时长期有用。 既然是长期有用,自然还有运行间隔和重试的配置,也可以根据实际情况调整: discovery.zen.fd.ping_interval: 10s discovery.zen.fd.ping_retries: 10 单播配置 以上展示为组播方式,单播配置相对来说只需要在配置文件里加几行即可 esc1: discovery.zen.ping.unicast.hosts: ["localhost:9300","localhost:9301"] esc2: discovery.zen.ping.unicast.hosts: ["localhost:9300","localhost:9301"] PS:我这里尝试了很多次,增加了 discovery.zen.minimum_master_nodes: 3 discovery.zen.ping.timeout: 100s discovery.zen.fd.ping_timeout: 100s 这三个属性之后集群并不能启动,所以这里只设置了discovery.zen.ping.unicast.hosts属性 OK!!!

优秀的个人博客,低调大师

使用docker toolbox 在windows上搭建统一环境

1.先下载docker toolbox 以下是下载地址: http://get.daocloud.io/#install-docker-for-mac-windows 2.下载安装git windows 客户端 安装全都 忽咯了,一律允许。 点击 启动docker 如果看到以下界面就显示成功了: 第一次比较慢,要装default 这个系统,启动后,你可以打开你虚拟机看看 接着讲一下,如何将本地的工程目录放到docker 容器环境下: 事先约定好:我在E盘上面新建 了一个workspace的目录: 然后我将这个目录挂载到docker 的虚拟机下面:设置 -> 共享 -> 添加共享文件夹 上面已经看清楚了,共享文件夹是workspace: 然后到default 里执行如下命令: mkdir /data mount -t vboxsf workspace /data 然后,就没有然后了 接下来,我们用-v 这个参数将目录挂载上去: 以下是我本地的目录结构: 然后看一下,docker-compose.yml: # development.yml version: '2' services: php-fpm: image: jackluo/php-fpm:5.6.3 restart: always volumes: - /data/php/tanzi/www:/var/www/html - /data/php/tanzi/data:/usr/local/var/log web: image: index.alauda.cn/library/nginx restart: always links: - php-fpm volumes: - /data/php/tanzi/config:/etc/nginx/conf.d - /data/php/tanzi/data:/var/log/nginx volumes_from: - php-fpm ports: - 80:80 expose: - 80 然后就可以docker-compose up -d 了 至此就安装完了

优秀的个人博客,低调大师

利用现有服务器搭建IP-SAN存储服务器

一、准备工作 CentOS6.4服务器2台(1台用做IP-SAN存储服务器,1台做流媒体服务器) iSCSITatget软件 iSCSI Initiator 二、安装iSCSI target软件(IP-SAN服务器) Iscsitarget下载地址为:http://iscsitarget.sourceforge.net [root@iscsi-targetiscsi]#tar-xzvfiscsitarget-1.4.20.1.tar.gz [root@iscsi-targetiscsi]#cdiscsitarget-1.4.20.1 [root@iscsi-targetiscsitarget-1.4.20.1]#make [root@iscsi-targetiscsitarget-1.4.20.1]#makeinstall [root@iscsi-targetiscsi]#serviceiscsi-target Usage:/etc/init.d/iscsi-target{start|stop|restart|condrestart|status} 配置ietd.conf文件 iSCSI Enterprise Target的主配置文件为/etc/iet/ietd.conf,打开ietd.conf找到类似如下行: #Targetiqn.2016-03.com.example:storage.disk2.sys1.xyz iqn.yyyy-mm.<reverseddomainname>[:identifier] 其中: iqn:表示“iSCSI Qualified Name”,简称iqn。 yyyy-mm:表示年份-月份。这里是2016-03。 reversed domain name:表示倒过来的域名,这里是com.example。 identifier:表示识别代码,这里是storage.disk2.sys1.xyz。 配置ietd.conf文件 设定 LUN(Logical Unit Number),找到类似如下行: #Lun0Path=/dev/sdb,Type=fileio,ScsiId=xyz,ScsiSN=xyz 将前面的“#”号去掉,“Lun 0 Path=/dev/sdb”表示块设备号为0,映射的磁盘为/dev/sdb,“Type”值fileio是默认的,可以用于磁盘、file和LVM,这里设定的是“fileio”,主要用来对一个磁盘进行存储共享。 至此,简单的iSCSI Target配置完毕,最后启动iscsi-target服务: [root@iscsi-targetiscsi]#serviceiscsi-targetstart 三、安装iSCSI Initiator(流媒体服务器) 主流Linux发行版本默认都自带了iSCSI Initiator,如果系统没有安装,只需通过光盘查找即可。 这里以centos6.4版本为例,使用iscsi-initiator-utils-6.2.0.871-0.16.el5.i386.rpm包进行安装: [root@ Initiator iscsi]#rpm –ivh iscsi-initiator-utils-6.2.0.871-0.16.el5.i386.rpm 安装完成后,会生成/etc/iscsi主程序配置目录。 启动Initiator服务,操作如下: [root@Initiatoriscsi]#serviceiscsistart 四、在linux上执行iSCSI Target发现 可以使用如下指令向 iSCSI Target 主机查询划分了哪些lun: iscsiadm-mdiscovery--typesendtargets--portalIP 或者 iscsiadm-mdiscovery-tsendtargets-pIP 需要说明的是:当成功执行一次Target发现后,iSCSI Initiator就会将查询纪录写到/var/lib/iscsi/send_targets对应目录下。因此,对于Target发现只需执行一次即可。 Discovery (/var/lib/iscsi/send_targets):在/var/lib/iscsi/send_targets目录下,生成一个target服务器信息文件,文件名为“target服务的IP,端口号”(例如“200.200.10.200,3260”)。此文件用来记录target服务器信息。 Node (/var/lib/iscsi/nodes):在/var/lib/iscsi/nodes目录下,生成一个或多个以target存储服务器上的Target名命名的文件夹,每文件夹下有一个用来记录target服务器上特定Target信息的文件。 五、通过iscsiadm指令与iSCSI Target 建立关联 iscsiadm是用来管理(更新、删除、插入、查询)iSCSI配置数据库文件的命令行工具,用户能够用它对iSCSI nodes、sessions、connections和discovery records进行一系列的操作。 (1)登录iSCSITarget: iscsiadm-mnode-T<target-name>-p<ip-address>:<port>--login 或 iscsiadm-mnode-T[target-name]-p[ip-address]-l 这里的“-T”后面跟target名称,“ip-address”是target主机的IP地址,“port”是target主机的端口号,默认是3260。 (2)断开Initiator与iSCSI Target 主机的连接: iscsiadm-mnode-T[target-name]-p[ip-address] –u 3、通过iscsiadm指令与iSCSI Target 建立关联 (3)查看SiCSIsession和设备信息: iscsiadm-msession-i iscsiadm–msession–R 如果一个Target下新增了一个卷,在服务器上使用iscsiadm –m session –R命令可以刷新当前连接的session以看到新增的卷 (4)查看有那些target记录在了数据库中: iscsiadm-mnode (5)查看target存储端相关配置信息 iscsiadm-mnode-Tiqn.2010-11.net.ixdba:sdc-p192.168.12.246 iscsiadm-mdiscovery–p192.168.12.246

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册