首页 文章 精选 留言 我的

精选列表

搜索[分布式锁],共10000篇文章
优秀的个人博客,低调大师

[ElasticSearch2.x]原理之分布式搜索

这个要比基本的创建-读取-更新-删除(CRUD)请求要难一些。CRUD操作是处理的单个文档。这就意味着我们明确的知道集群中的哪个分片存储我们想要的文档。 一个 CRUD 操作只对单个文档进行处理,文档有唯一的组合,由_index,_type, 和 路由值 (默认是该文档的_id)组成。 这表示我们确切的知道此文档在集群中哪个分片中。 搜索请求是更复杂的执行模型,因为我们不知道哪些文档会与查询匹配,它们可能存在在集群中的任意一个分片中。一个搜索请求不得不搜索我们关注的一个或多个索引中的每个分片拷贝(主分片或者副本分片),以查看分片中中是否有匹配的文档。 但找到所有匹配到文档只是完成了一半工作.在searchAPI返回一“页”结果之前,来自多个分片的结果必须聚合成单个排序的列表。 因此,搜索在两阶段过程中执行,query和fetch。 1. Query阶段 在初始化查询阶段(query phase),查询将广播到索引中的每个分片的拷贝上(主分片或者副本分片)。每个分片在本地执行搜索并且建立了匹配文档的优先队列(priority queue)。 1.1 优先级队列 优先级队列priority queue只是一个存有前n个(top-n)匹配文档的有序列表。优先级队列的大小取决于from和size分页参数。 例如,以下搜索请求将需要足够大的优先级队列来容纳100个文档: GET /_search { "from": 90, "size": 10 } 1.2 Query Query阶段过程如下图所示: Query阶段包含如下步骤: (1) 客户端发送一个Search请求给节点 3,节点 3 创建了一个长度为from+size的空优先级队列。 (2) 节点3将搜索请求转发到索引中每个分片的一个主分片或副本分片上( forwards the search request to a primary or replica copy of every shard in the index)。 每个分片在本地执行查询,并将结果添加到大小为from+size的本地排序的优先级队列中。 (3) 每个分片将其优先级队列中的所有文档的文档ID和排序值返回给协调节点节点3,节点3将这些值合并到其自己的优先级队列中,以生成全局排序的结果列表。 当一个搜索请求被发送到一个节点,这个节点就变成了协调节点。这个节点的工作是向所有相关的分片广播搜索请求并且把它们的响应整合成一个全局的有序结果集。将这个结果集返回给客户端。 第一步是将请求广播到索引里每个节点的一个主分片或者副本分片上(broadcast the request to a shard copy of every node in the index)。就像document的GET请求一样,搜索请求可以被主分片或者任意副本分片处理。所以说更多的副本能够更高效的提高搜索。协调节点将在之后的请求中轮询所有的分片拷贝来分摊负载。 每一个分片在本地执行查询和建立一个长度为from+size的有序优先级队列——这个长度意味着它自己的结果数量就足够满足全局的请求要求。分片返回一个轻量级的结果列表给协调节点。只包含文档ID值和排序需要用到的值,例如_score。 协调节点将这些分片结果合并到其自己的排序优先级队列中,表示全局排序的结果集。 到此查询阶段结束。 备注 索引可以由一个或多个主分片组成,因此针对单个索引的搜索请求需要能够组合来自多个分片的结果。 搜索多个或所有索引的工作方式完全相同 - 只是会涉及更多的分片。 2. Fetch 阶段 查询阶段标示出哪些文档满足我们的搜索请求,我们只返回了文档ID以及对排序有用的值,并没有返回文档本身。们仍然需要检索那些文档。这就是fetch阶段的工作,过程如下图所示: 分发阶段由以下步骤构成: (1) 协调节点标示出哪些文档需要取回,并且向相关分片发出GET请求。 (2) 如果需要,每个分片加载文档,然后将文档返回协调节点。 (3) 一旦所有的文档都被取回,协调节点将结果返回给客户端。 协调节点首先决定哪些文档是实际需要取回的。例如,如果我们查询指定{ "from": 90, "size": 10 },那么前90条结果将会被丢弃,只需要检索接下来的10个结果。这些文档可能来自与查询请求相关的一个、多个或者全部分片。 协调节点给拥有相关文档的每个分片创建一个multi-get request,并发送请求给同样处理查询阶段的分片拷贝。 分片加载文档体--_source字段--如果有需要,用metadata和search snippet highlighting丰富结果文档。 一旦协调节点接收到所有的结果文档,它就组合这些结果为单个响应返回给客户端。 原文:https://www.elastic.co/guide/en/elasticsearch/guide/current/distributed-search.html https://www.elastic.co/guide/en/elasticsearch/guide/current/_query_phase.html https://www.elastic.co/guide/en/elasticsearch/guide/current/_fetch_phase.html

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

Ceph分布式存储学习指南1.14 Ceph

1.14 Ceph 如果我们比较Ceph和现存的其他存储解决方案,由于Ceph特性丰富,它明显与众不同。它克服了现有存储系统的局限性,并已经被证明是昂贵的老存储系统的理想替代品。它是运行于任何商用硬件上的开源软件定义存储解决方案,这使得它也是一个经济的存储解决方案。Ceph提供了各种接口让客户端连接Ceph集群,这为客户端增加了灵活性。对于数据保护,Ceph并不依赖于RAID技术,因为它存在本章前面提到的各种限制。而是采用了已经被证明比RAID更好的副本和纠删码方案。 Ceph的每一个组件都是可靠的并支持高可用性。如果你在配置Ceph组件的过程中牢记冗余,我们可以自信地说Ceph不存在任何单点故障。而单点故障是当今其他存储解决方案的一大挑战。Ceph最大的优点是它的统一特性,它同时提供了现成的块、文件和对象存储解决方案,而其他的存储系

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

Zabbix分布式监控之Discovery自动发现配置

当我们能够熟练构建Zabbix监控平台之后,我们会发现,对zabbix的认识只是刚开始,今天带大家来学习Zabbix比较牛的功能,自动发现功能。什么是自动发现呢,简单来说就是,可以自动批量去发现局域网若干服务器,并自动添加监控,省去人工手动的添加,节省大量的人力成本! 随着监控主机不断增多,有时候需要添加一批机器,需要将公司的所有服务器添加到zabbix中,学过nagios、cacti的同学都知道,如果要批量必须使用脚本,或者手动传统办法去单个添加设备、分组、项目、图像,如果设备多,会晕倒哦。 Zabbix最大的特点之一就是可以批量自动主机并监控,利用发现(Discovery)模块,实现自动刚发现主机、自动将主机添加到主机组、自动加载模板、自动创建项目(item)、自动创建图像。 1)Configuration ----discovery ---- Create discovery rule 2)脚本自动安装配置Agent 由于发现规则里checks,我们选择的是Zabbix agent方式去检查,所以需要在被监控端安装zabbix agent,安装脚本如下: #!/bin/bash #autoinstallzabbixversion2.0 #bywww.jfedu.net2017 ############# ZABBIX_SOFT="zabbix-2.0.6.tar.gz" INSTALL_DIR="/usr/local/zabbix/" SERVER_IP="192.168.111.128" IP=`ifconfig|grepBcast|awk'{print$2}'|sed's/addr://g'` SERVER_INSTALL(){ yum-yinstallcurlcurl-develnet-snmpnet-snmp-develperl-DBI groupaddzabbix;useradd-gzabbixzabbix;usermod-s/sbin/nologinzabbix tar-xzf$ZABBIX_SOFT;cd`echo$ZABBIX_SOFT|sed's/.tar.*//g'` ./configure--prefix=/usr/local/zabbix--enable-server--enable-agent--with-mysql--enable-ipv6--with-net-snmp--with-libcurl&&makeinstall if[$?-eq0];then ln-s/usr/local/zabbix/sbin/zabbix_*/usr/local/sbin/ fi cd-;cdzabbix-2.0.6 cpmisc/init.d/tru64/{zabbix_agentd,zabbix_server}/etc/init.d/;chmodo+x/etc/init.d/zabbix_* mkdir-p/var/www/html/zabbix/;cp-afrontends/php/*/var/www/html/zabbix/ #configzabbixserver cat>$INSTALL_DIR/etc/zabbix_server.conf<<EOF LogFile=/tmp/zabbix_server.log DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=123456 EOF #configzabbixagentd cat>$INSTALL_DIR/etc/zabbix_agentd.conf<<EOF LogFile=/tmp/zabbix_agentd.log Server=$SERVER_IP ServerActive=$SERVER_IP Hostname=$IP EOF #startzabbixagentd /etc/init.d/zabbix_serverrestart /etc/init.d/zabbix_agentdrestart /etc/init.d/iptablesstop setenforce0 } AGENT_INSTALL(){ yum-yinstallcurlcurl-develnet-snmpnet-snmp-develperl-DBI groupaddzabbix;useradd-gzabbixzabbix;usermod-s/sbin/nologinzabbix tar-xzf$ZABBIX_SOFT;cd`echo$ZABBIX_SOFT|sed's/.tar.*//g'` ./configure--prefix=/usr/local/zabbix--enable-agent&&makeinstall if[$?-eq0];then ln-s/usr/local/zabbix/sbin/zabbix_*/usr/local/sbin/ fi cd-;cdzabbix-2.0.6 cpmisc/init.d/tru64/zabbix_agentd/etc/init.d/zabbix_agentd;chmodo+x/etc/init.d/zabbix_agentd #configzabbixagentd cat>$INSTALL_DIR/etc/zabbix_agentd.conf<<EOF LogFile=/tmp/zabbix_agentd.log Server=$SERVER_IP ServerActive=$SERVER_IP Hostname=$IP EOF #startzabbixagentd /etc/init.d/zabbix_agentdrestart /etc/init.d/iptablesstop setenforce0 } read-p"PleaseconfirmwhethertoinstallZabbixServer,yesorno?"INPUT if[$INPUT=="yes"-o$INPUT=="y"];then SERVER_INSTALL else AGENT_INSTALL fi 在客户端执行sh auto_install_agent.sh脚本即可: 3)主机自动加入主机组并关联模板 我们配置了自动发现主机,那么发现主机之后我们要做什么呢? 需要将主机加入主机组、并关联相应的模板,执行Action (动作)来执行一些列的操作: Configuration ---- Actions ---- Event source(选择Discovery) ---- Create action 4)动作-条件-操作 5)MontoringàDiscovery如下图 6)查看主机是否被自动监控 ConfigurationàHosts如下图 7)监控图像查看 MonitoringàGraphs如下: 更多文章请持续关注我们!后期更经常哦! 你若觉得作者的文章写得不错,请奖励作者几锭银子,让作者感受到来自你满满的鼓励和继续创作的动力!我们支持原创!鼓励原创! 打赏之后,文章底部显示参与打赏者的记录,可以直接通过微信扫描打赏哟,直接按打赏根据提示操作。 自定义打赏金额,友情提示打赏金额不要超过50元哦,土豪可以随意哦,51CTO谢谢您对作者的支持!谢谢你的慷慨大方!

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

centos6.5下安装mfs分布式存储

MFS文件系统的组成 1、 元数据服务器。在整个体系中负责管理管理文件系统,目前MFS只支持一个元数据服务器master,这是一个单点故障,需要一个性能稳定的服务器来充当。希望今后MFS能支持多个master服务器,进一步提高系统的可靠性。 2、 数据存储服务器chunkserver。真正存储用户数据的服务器。存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间复制(复制份数可以手工指定,建议设置副本数为3)。数据服务器可以是多个,并且数量越多,可使用的“磁盘空间”越大,可靠性也越高。 3、 元数据日志服务器Metalogger server(Metalogger):负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作。 4、 客户端。使用MFS文件系统来存储和访问的主机称为MFS的客户端,成功挂接MFS文件系统以后,就可以像以前使用NFS一样共享这个虚拟性的存储了。 环境:mfsmaster:192.168.50.119 mfschunk,mfslogger,mfsclient: 192.168.50.120 一、mfsmaster安装配置 1.创建安装用户 useraddmfs-s/sbin/nologin 2.安装 tar-xfmfs-1.6.27-5.tar.gz&&cdmfs-1.6.27 ./configure--prefix=/usr/local/mfs--with-default-user=mfs--with-default-group=mfs make&&makeinstall 3.配置文件 cd/usr/local/mfs/etc/mfs/ cpmfsmaster.cfg.distmfsmaster.cfg cpmfsexports.cfg.distmfsexports.cfg cp/usr/local/mfs/var/mfs/metadata.mfs.empty/usr/local/mfs/var/mfs/metadata.mfs 4.启动元数据服务器 /usr/local/mfs/sbin/mfsmasterstart workingdirectory:/usr/local/mfs/var/mfs lockfilecreatedandlocked initializingmfsmastermodules... loadingsessions...ok sessionsfilehasbeenloaded exportsfilehasbeenloaded mfstopologyconfigurationfile(/usr/local/mfs/etc/mfstopology.cfg)notfound-usingdefaults loadingmetadata... loadingobjects(files,directories,etc.)...ok loadingnames...ok loadingdeletiontimestamps...ok loadingchunksdata...ok checkingfilesystemconsistency...ok connectingfilesandchunks...ok allinodes:1 directoryinodes:1 fileinodes:0 chunks:0 metadatafilehasbeenloaded statsfilehasbeenloaded master<->metaloggersmodule:listenon*:9419 master<->chunkserversmodule:listenon*:9420 mainmasterservermodule:listenon*:9421 mfsmasterdaemoninitializedproperly 5.启动web页面 /usr/local/mfs/sbin/mfscgiservstart#开启WEB监控页面进程 http://ip:9425查看mfs系统状态 6.开机启动 echo"/usr/local/mfs/sbin/mfsmasterstart"/etc/rc.local echo"/usr/local/mfs/sbin/mfscgiserv"/etc/rc.local 7.检查进程 [root@localhostmfs]#ps-ef|grepmfs mfs65561003:20?00:00:04/usr/local/mfs/sbin/mfsmasterstart root65821003:23?00:00:00python/usr/local/mfs/sbin/mfscgiserv root66251692004:39pts/000:00:00grepmfs 二、mfschunk,mfslogger,mfsclient服务器配置 1.创建安装用户 useraddmfs-s/sbin/nologin 2.安装 yum-yinstallfusefuse-devel tar-xfmfs-1.6.27-5.tar.gz&&cdmfs-1.6.27 ./configure--prefix=/usr/local/mfs--with-default-user=mfs--with-default-group=mfs--enable-mfsmount make&&makeinstall chown-Rmfs.mfs/usr/local/mfs/ 3.配置文件 cd/usr/local/mfs/etc/mfs/ cpmfschunkserver.cfg.distmfschunkserver.cfg cpmfshdd.cfg.distmfshdd.cfg cpmfsmetalogger.cfg.distmfsmetalogger.cfg 4.修改配置文件 [root@localhostmfs]#catmfschunkserver.cfg #WORKING_USER=mfs #WORKING_GROUP=mfs #SYSLOG_IDENT=mfschunkserver #LOCK_MEMORY=0 #NICE_LEVEL=-19 #DATA_PATH=/usr/local/mfs/var/mfs #MASTER_RECONNECTION_DELAY=5 #BIND_HOST=* MASTER_HOST=192.168.50.119 MASTER_PORT=9420 #MASTER_TIMEOUT=60 #CSSERV_LISTEN_HOST=* #CSSERV_LISTEN_PORT=9422 #HDD_CONF_FILENAME=/usr/local/mfs/etc/mfs/mfshdd.cfg #HDD_TEST_FREQ=10 #deprecated,toberemovedinMooseFS1.7 #LOCK_FILE=/var/run/mfs/mfschunkserver.lock #BACK_LOGS=50 #CSSERV_TIMEOUT=5 [root@localhostmfs]#catmfshdd.cfg #mountpointsofHDDdrives /usr/local/mfsdata/#mfschunkserver上的分区,必须是独立分区! [root@localhostmfs]#catmfsmetalogger.cfg #WORKING_USER=mfs #WORKING_GROUP=mfs #SYSLOG_IDENT=mfsmetalogger #LOCK_MEMORY=0 #NICE_LEVEL=-19 #DATA_PATH=/usr/local/mfs/var/mfs #BACK_LOGS=50 #BACK_META_KEEP_PREVIOUS=3 META_DOWNLOAD_FREQ=1 #MASTER_RECONNECTION_DELAY=5 MASTER_HOST=192.168.50.119 MASTER_PORT=9419 #MASTER_TIMEOUT=60 #deprecated,toberemovedinMooseFS1.7 #LOCK_FILE=/var/run/mfs/mfsmetalogger.lock 5.启动服务 [root@localhostmfs]#/usr/local/mfs/sbin/mfschunkserverstart workingdirectory:/usr/local/mfs/var/mfs lockfilecreatedandlocked initializingmfschunkservermodules... hddspacemanager:pathtoscan:/usr/local/mfsdata/ hddspacemanager:startbackgroundhddscanning(searchingforavailablechunks) mainservermodule:listenon*:9422 nochartsdatafile-initializingemptycharts mfschunkserverdaemoninitializedproperly [root@localhostmfs]#/usr/local/mfs/sbin/mfsmetaloggerstart workingdirectory:/usr/local/mfs/var/mfs lockfilecreatedandlocked initializingmfsmetaloggermodules... mfsmetaloggerdaemoninitializedproperly 6.创建数据目录 mkdir/usr/local/mfsdata/ chown-Rmfs.mfs/usr/local/mfsdata/ 这里需要一块新磁盘挂载到数据目录 mount/dev/sdb1/usr/local/mfsdata/ 7.创建挂载目录 mkdir/mnt/mfs chown-Rmfs.mfs/mnt/mfs/ 8.挂载目录 [root@localhostmfsdata]#/usr/local/mfs/bin/mfsmount/mnt/mfs/-H192.168.50.119#挂载成功 mfsmasteracceptedconnectionwithparameters:read-write,restricted_ip;rootmappedtoroot:root [root@localhost~]#df Filesystem1K-blocksUsedAvailableUse%Mountedon /dev/mapper/VolGroup-lv_root191665041322824168700648%/ tmpfs24314002431400%/dev/shm /dev/sda1495844326724375727%/boot /dev/sdb11031782815525696384562%/usr/local/mfsdata 192.168.50.119:94219376256093762560%/mnt/mfs 参考地址: http://darren.blog.51cto.com/1081720/1143106 http://sery.blog.51cto.com/10037/147756

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

分布式数据库HBase表设计

比较常用的数据库是关系型数据库,但很多场景下nosql数据库会更加擅长,从sql到nosql实施的第一步就是设计表结构,这是两种不同的思维方式,这里说下HBase表设计。 需求:需要一张stock表用于保存市场所有股票的分钟走向,即每个股票每分钟记录一次价格。 方案一:瘦表。 用stockId+datetime作为RowKey,这样方便通过stockId或datetime快速扫描获取到相关记录。 RowKey ColumnFamily “stock_cf” stockId+datetime stock_cf:price “00000120160615100000” 10.02 “00000120160615100001” 10.10 “00000120160615100002” 10.08 “00000220160615100000” 8.00 “00000220160615100001” 8.10 “00000220160615100002” 8.20 craete 'stock' , 'stock_cf' 优点:不受记录数限制,通过id查询时能很快跳过行,拥有很好的扩展性,高表也是推荐的用法。 缺点:不利于原子性,hbase只有行具备原子性。 方案二:宽表。 用stockId作为RowKey,datetime作为列,随着时间增长列会不断地增加,获取某个时间的记录将时间作为列。一个表的列族不要超过3个。 RowKey ColumnFamily “stock_cf” stockId “stock_cf:20160615100000” “stock_cf:20160615100001” “stock_cf:20160615100003” 000001 10.02 10.10 10.08 000002 8.00 8.10 8.20 craete 'stock' , 'stock_cf' 优点:更好的事务性。 缺点:宽表列数最多到百万级别,可扩展性较差。 后面有时间会写些hbase源码及其维护的相关的文章。 ========广告时间======== 鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。 为什么写《Tomcat内核设计剖析》 ========================= 欢迎关注:

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

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等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册