控制Elasticsearch的分片分布到不同的机器上

空心菜 发表了文章 0 个评论 5200 次浏览 2016-04-27 20:07 来自相关话题

方法一:修改配置文件,设置参数 # vim elasticsearch.yml cluster.routing.allocation.same_shard.host: true这个设置是告诉es,将同一shard的primary sha ...查看全部
方法一:修改配置文件,设置参数
# vim elasticsearch.yml
cluster.routing.allocation.same_shard.host: true
这个设置是告诉es,将同一shard的primary shard和replica shard分步在不同的主机上(官方文档说按照不同的IP或主机名称来判断是否是同一主机)。这个值,ES默认是false。注意:如果是已经在生产环境使用的ES(每个机器的节点大于1个时),修改完配置重启节点时,可能会导致最后一个节点没有数据(因为最后一个节点在重启的时候,其他节点已经将他这个节点上的数据分配到同一机器上的另外一个节点)。
 
方法二:设置rack_id
node.rack_id: rack_1
cluster.routing.allocation.awareness.attributes: rack_id
Rack原义是货架,在这里是指机柜。这个rack_id其实可以自己定义, 上面配置的第二行就是如何定义这个名称。这样定义后,分片会被尽量的分片在不同的rack_id上面。如果rack_1和rack_2在不同的机器上,则就能实现将shard分布在不同的机器上的效果。定义这个名称后,如何查看索引是否分布在不同的机器上(第一个命令只记录了node_name,需要用第二个命令查询对应是那台机器):
curl -XGET 'http://127.0.0.1:9250/index_name/_status?pretty=true'
curl -XGET 'http://127.0.0.1:9250/_cluster/nodes?pretty=true'
参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html
           https://www.elastic.co/guide/en/elasticsearch/reference/2.3/shards-allocation.html#_shard_allocation_settings
           https://www.elastic.co/guide/en/elasticsearch/reference/2.3/allocation-awareness.html

docker pull ubuntu出错

弥彦 回复了问题 3 人关注 2 个回复 5552 次浏览 2016-04-11 21:28 来自相关话题

Kafka文件系统设计

Geek小A 发表了文章 0 个评论 3414 次浏览 2016-04-09 17:08 来自相关话题

Kafka简要说明 关键特⾊: []可伸缩架构[/][]高吞吐量[/][]consumer⾃动负载均衡 [/][]支持集群多副本[/]Topic中partition ...查看全部


Kafka简要说明


karch.png

关键特⾊:
    []可伸缩架构[/][]高吞吐量[/][]consumer⾃动负载均衡 [/][]支持集群多副本[/]

Topic中partition存储分布 

topic名称为:report_push 
topic1.png
topic2.png
在kafka文件系统中,同一个topic下有多个不同partition,每个partition创建一个目录。

Partiton文件存储⽅方式 

ext.png
    []每个partion(目录)相当于一个巨型⽂件被平均分配到多个⼤小相等的多个segment(段)文件中。但每个段segment file消息数量不⼀定相等,这种特性⽅便old segment file快速被删除。[/][]每个partiton只需要⽀持顺序读写就⾏了,segment文件生命周期由服务端配置参数决定。 [/]
 小结:           主要目的就是提⾼磁盘利用率和消息处理性能。

Partiton中segment⽂文件存储结构 

下⾯面介绍一下partion⽂文件存储中segment file组成结构。一个商业化消息队列的性能好坏,其文件系统存储结构设计是衡量⼀个消息队列服务程序最关 键指标之一,他也是消息队列中最核心且最能体现消息队列技术⽔平的部分。在本节中我们将⾛进segment file内部⼀探究竟。segment file组成:由2⼤大部分组成,分别为segment data file和segment index file,此2个⽂件⼀一对应,成对出现.segment中 index — data file对应关系 
datafile.png
index为稀疏索引结构,并不存储每条记录的元数据信息,⽽是与单条或多条消息大⼩比较,如果总消息⼤小大于该阀值才写一次index,默认阀值4096字节。
partiton中segment⽂件存储结构-index 00000000000000000000.index索引⽂件存储结构: 每次记录相应log文件记录的相对条数和物理偏移位置,共8bytes 4 byte 当前segment file offset - last seg file offset记录条数offset4 byte 对应segment file物理偏移地址 position......... part中segment文件存储结构-data file 
filedata.png
一个消息(message chunk)数据块可能包含多条消息,但同⼀个数据块中的消息只有⼀个offset(partiions第多少msg chunk),所以当一个消息块有多条数据处理完部分数据发生异常时,消费者重新去取数据,就会再次取得这个数据块,然后消费过的数据就会被重新消费。

数据库稀疏索引例⼦

dataxis.png
稀疏索引只为数据⽂件的每个存储块设⼀个键-指针对,它⽐稠密索引节省了更多的存储空间,但查找给定值的记录需更多的时间。只有当数据文件是按照某个查 找键排序时,在该查找键上建⽴的稀疏索引才能被使用,而稠密索引则可以应⽤在任何的查找键。如图2所⽰示,稀疏索引只为每个存储块设一个键-指针对。键值 是每个数据块中第一个记录的对应值。

如何在partition中快速定位segment file 

同一个topic下有不同分区,每个分区下⾯会划分为多个(段)文件,只有一个当前文件在写,其他⽂文件只读。当写满一个文件(写满的意思是达到设定值)则切换⽂文件,新建一个当前文件用来写,老的当前⽂件切换为只读。文件的命名以起始偏移量来命名。 看一个例⼦子,假设report_push这个topic下的0-0分区可能有以下这些⽂文件:
index.png
其中00000000000000000000.index表⽰示最开始的文件,起始偏移量为0.第⼆个⽂文件 00000000000000368769.index的消息量起始偏移量为368769.同样,第三个⽂件00000000000000737337.index的起始偏移量为737337.以起始偏移量命名并排序这些 文件,那么当消费者要拉取某个消息起始偏移量位置的数据变的相当简单,只要根据 传上来的offset[b]⼆分查找[/b]文件列表,定位到具体文件,然后将绝对offset减去文件的起始节点转化为相对offset,即可开始传输数据。
例如,同样以上面的例⼦为例,假设消费者想抓取从第368969消息位置开始的数据,则根据368969⼆分查找,定位到00000000000000368769.log这个文件(368969在368769和737337之间),根据索引文件二分搜索可以确定读取数据最⼤大小,栗子:
indexlog.png

如何在segment file查找msg chunk 

msg.png
实际效果:
jg.png

kafka的⽂文件系统结构—>总结

⾼效文件系统特点 :
    []一个大文件分成多个⼩文件段。[/][]多个⼩⽂件段,容易定时清除或删除已经消费完文件,减少磁盘占用。[/][]index全部映射到memory直接操作,避免segment file被交换到磁盘增加IO操作次数。[/][]根据索引元数据信息,可以确定consumer每次批量拉取最大msg chunk数量。[/][]索引⽂文件元数据存储用的是相对前一个segment file的offset存储,节省空间⼤小。[/]

Hadoop生态圈技术图谱

being 发表了文章 0 个评论 4257 次浏览 2016-04-07 21:37 来自相关话题

当下Hadoop已经成长为一个庞大的体系,貌似只要和海量数据相关的,没有哪个领域缺少Hadoop的身影,下面是一个Hadoop生态系统的图谱,详细的列举了在Hadoop这个生态系统中出现的各种数据工具。 这一切,都起源自Web数据爆炸时代的来临 ...查看全部
当下Hadoop已经成长为一个庞大的体系,貌似只要和海量数据相关的,没有哪个领域缺少Hadoop的身影,下面是一个Hadoop生态系统的图谱,详细的列举了在Hadoop这个生态系统中出现的各种数据工具。
这一切,都起源自Web数据爆炸时代的来临
    []数据抓取系统-Nutch[/][]海量数据怎么存,当然是用分布式文件系统-HDFS[/][]数据怎么用呢,分析,处理MapReduce框架,让你编写代码来实现对大数据的分析工作[/][]非结构化数据(日志)收集处理-fuse,WebDav,Chukwa,flume,scribe[/][]数据导入到HDFS中,至此RDBSM也可以加入HDFS的狂欢了-Hiho,sqoop[/][]MapReduce太麻烦,好吧,让你用熟悉的方式来操作Hadoop里的数据-Pig,Hive,Jaql[/][]让你的数据可见-drilldownintellicus[/][]用高级语言管理你的任务流-ooziecascading[/][]Hadoop当然也有自己的监控管理工具-Ambari,Hue,karmasphere,eclipse plugin,Cacti,ganglia[/][]数据序列化处理与任务调度-avrozookeeper[/][]更多构建在Hadoop上层的服务 - MahoutElastic map Reduce[/][]OLTP存储系统-Hbase[/]

hadoopem.png

dealwith.png

hadoope.png

http://www.neevtech.com/blog/2013/03/18/hadoop-ecosystem-at-a-glance/ 
buildhadoop.png

http://zh.hortonworks.com/blog/modern-retail-architectures-built-hadoop/
hadooprep.png

Hadoop运维经验杂谈

chris 发表了文章 0 个评论 3325 次浏览 2016-04-07 00:57 来自相关话题

Hadoop在蓝汛 系统架构: Cloudera和它的产品们 Ap ...查看全部


Hadoop在蓝汛


hadoop.png

系统架构
arch.png


Cloudera和它的产品们


Apache Hadoop与CDH版本关系
hacdh.png

CDH为什么更好?
    []安装升级更简单:[/]
                 yum ,tar, rpm, cloudera manager 四种安装方法 
    []更快获取新功能和修正新bug[/][]年度release,季度update[/][]Yum安装自动匹配合适的生态系统版本[/][]自动目录配置(logs,conf),以及hdfs和mapred用户创建[/][]详细的文档[/]
CDH3u3重大改善
cdh3.png
CDH3u4重大改善
cdh4.png
Cloudera Manager
m1.png
m2.png
m3.png
Cloudera Training
    []关于Training[/]
                分为Administrator和Development两门课程
    []关于认证考试[/][]关于证书[/]

运维事故

1、伤不起的内存现象1
系统上线第二天,Jobtracker不工作,web页面打不开
原因
一次提交Job数量太多,导致Jobtracker 内存溢出
解决
调大JT内存;限制Running Job数量
现象2
NN内存溢出,重启后发现50030页面显示fsimage损坏,调查发现SNN fsimage同样损坏了
原因
小文件太多导致NN/SNN内存溢出,导致fsimage文件损坏,但是重启后的NN可以正常服务。
原因
Cloudera google group去救,获得后门脚本
2、低效的MapReduce Job现象
MapReduce Job执行时间过长
原因
MR中用到了Spring,小文件导致Map方法效率低下,GZ文件读写效率低
解决
MR去Spring化;开启JVM重用;使用LZO作为输入和map输出结果;加大reduce并行copy线程数
压缩与MapReduce性能
    []前提:大量小文件[/][]输入147GB,文件数45047,平均3MB[/][]CPU 8 core;32GB内存;7200转磁盘;28台Slave机器[/]
xn.png
 3、OMG,整个集群完蛋了现象
早上来发现所有DataNode都dead了,重启后10分钟,DN陆续又都dead了;调查发现节点有8%左右丢包率
原因
交换机模块故障;DN不能Hold住大量小文件
解决
升级3u2到3u4;设置DN内存到2GB
遇到无法跨越的问题解决办法
    []加入Hadoop官方Mail List[/][]加入Cloudera Google Group[/]

监控与告警

    []监控:ganglia[/][]设备告警、服务告警:nagios[/][]业务告警:自己实现[/]

monitor.png

Nagios告警:
nagios.png

业务监控:
mo1.png

mo2.png

mo3.png

怎么自定义zookeeper的启动内存

OpenSkill 回复了问题 3 人关注 2 个回复 7698 次浏览 2016-04-03 02:54 来自相关话题

怎么查看kafka集群中所有broker节点

chris 回复了问题 2 人关注 1 个回复 24190 次浏览 2016-04-02 13:34 来自相关话题

Rabbitmq用户管理介绍

koyo 发表了文章 0 个评论 2950 次浏览 2016-03-30 23:38 来自相关话题

用户管理 用户管理包括:增加用户、删除用户、查看用户列表、修改用户密码​。1、新增一个用户rabbitmqctl add_user Username Password2、删除一个用户rabbitmqctl delete_use ...查看全部


用户管理


用户管理包括:
增加用户、删除用户、查看用户列表、修改用户密码​。
1、新增一个用户
rabbitmqctl  add_user  Username  Password
2、删除一个用户
rabbitmqctl  delete_user  Username
3、修改用户的密码
rabbitmqctl  change_password  Username  Newpassword
4、查看当前用户列表
rabbitmqctl  list_users


用户角色


用户角色可分为五类:
超级管理员、监控者、策略制定者、普通管理者以及其他。
1、超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
2、监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
3、策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息。
与administrator的对比,administrator能看到这些内容。
4、普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
5、其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
了解了这些后,就可以根据需要给不同的用户设置不同的角色,以便按需管理。
 
设置用户角色的命令为:
rabbitmqctl  set_user_tags  User  Tag
User为用户名, Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)。
 
也可以给同一用户设置多个角色,例如:
rabbitmqctl  set_user_tags  hncscwc  monitoring  policymaker


用户权限


用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。
例如:
将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。详细请参考官方文档中"How permissions work"部分。
相关命令为:
1、设置用户权限
rabbitmqctl  set_permissions  -p  VHostPath  User  ConfP  WriteP  ReadP
2、 查看(指定hostpath)所有用户的权限信息
rabbitmqctl  list_permissions  [-p  VHostPath]
3、查看指定用户的权限信息
rabbitmqctl  list_user_permissions  User
4、清除用户的权限信息
rabbitmqctl  clear_permissions  [-p VHostPath]  User

Centos下Rabbitmq安装配置

koyo 发表了文章 0 个评论 4478 次浏览 2016-03-29 18:38 来自相关话题

因为rabbitmq是利用erlang编程语言开发的,所以首先我们得安装erlang虚拟机的支持,就像Java重新一样,首先得有JDK的支持。 一、安装Erlang 1、Yum方法安装# wget -O /e ...查看全部
因为rabbitmq是利用erlang编程语言开发的,所以首先我们得安装erlang虚拟机的支持,就像Java重新一样,首先得有JDK的支持。


一、安装Erlang


1、Yum方法安装
# wget -O /etc/yum.repos.d/epel-erlang.repo http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo
# yum -y install erlang
2、源码安装
# yum -y install gcc* make ncurses-devel libxslt xsltproc unzip nc xmlto
# wget http://www.erlang.org/download/otp_src_R16B01.tar.gz
# tar zxvf otp_src_R16B01.tar.gz
# ./configure --prefix=/usr/local/erlang_R16B01 --without-javac --with-ssl
# make && make install
# ln -s /usr/local/erlang/bin/erl /usr/bin/erl
# ln -s /usr/local/erlang/bin/escript /usr/bin/escript
# ln -s /usr/local/erlang/bin/erlc /usr/bin/erlc


二、安装Rabbitmq


1、Yum方法安装
# rpm -Uvh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
# yum install rabbitmq-server-3.1.5
2、源码安装
***下载免编译安装包,下载解压开封即用,可以下载任意自己想要的版本!
# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.1/rabbitmq-server-generic-unix-3.5.1.tar.gz
# tar zxf rabbitmq-server-generic-unix-3.5.1.tar.gz -C /data/


三、配置


配置文件和初始化环境脚本配置指定在/data/rabbitmq_server-3.5.1/sbin目录下:
rabbitmq-env         环境初始化配置
rabbitmq-defaults 默认参数设置
rabbitmqctl 管理工具
rabbitmq-plugins 插件管理工具
rabbitmq-server rabbitmq服务启动脚本
rabbitmq-defaults配置:
SYS_PREFIX=${RABBITMQ_HOME}
ERL_DIR=/usr/bin/ //设置erl命令路径
CLEAN_BOOT_FILE=start_clean
SASL_BOOT_FILE=start_sasl
CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq //设置rabbitmq配置文件路径
LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq
MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia
ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins //允许插件列表配置文件
PLUGINS_DIR="${RABBITMQ_HOME}/plugins"
CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf
主要配置文件介绍:
1、enabled_plugins:设置允许的插件列表,格式如下:
[rabbitmq_jsonrpc_channel,
rabbitmq_management,
rabbitmq_management_visualiser,
rabbitmq_tracing].
2、rabbitmq.config:设置rabbitmq运行参数。结构为hash数组格式,如:
[
{mnesia, [{dump_log_write_threshold, 1000}]},
{rabbit, [{vm_memory_high_watermark, 0.4}]}
{rabbitmq_management,
[{listener, [{port, 55673},
{ip, "0.0.0.0"}
]}
]}
].
其中几个关键参数为:
tcp_listeners      设置rabbimq的监听端口,默认为[5672]。
disk_free_limit 磁盘低水位线,若磁盘容量低于指定值则停止接收数据,默认值为{mem_relative, 1.0},即与内存相关联1:1,也可定制为多少byte.
vm_memory_high_watermark 设置内存低水位线,若低于该水位线,则开启流控机制,默认值是0.4,即内存总量的40%。
hipe_compile 将部分rabbimq代码用High Performance Erlang compiler编译,可提升性能,该参数是实验性,若出现erlang vm segfaults,应关掉。
force_fine_statistics 该参数属于rabbimq_management,若为true则进行精细化的统计,但会影响性能。
配置实栗如下:
[{auth_backends,[rabbit_auth_backend_internal]},
{auth_mechanisms,['PLAIN','AMQPLAIN']},
{backing_queue_module,rabbit_variable_queue},
{cluster_nodes,},
{collect_statistics,fine},
{collect_statistics_interval,5000},
{default_permissions,[<<".[i]">>,<<".[/i]">>,<<".*">>]},
{default_user,<<"guest">>},
{default_user_tags,[administrator]},
{default_vhost,<<"/">>},
{delegate_count,16},
{error_logger,{file,"/usr/local/var/log/rabbitmq/rabbit@Technophiliac.log"}},
{frame_max,131072},
{hipe_compile,false},
{included_applications,},
{msg_store_file_size_limit,16777216},
{msg_store_index_module,rabbit_msg_store_ets_index},
{queue_index_max_journal_entries,262144},
{sasl_error_logger,{file,"/usr/local/var/log/rabbitmq/rabbit@Technophiliac-sasl.log"}},
{server_properties,},
{ssl_listeners,},
{ssl_options,},
{tcp_listen_options,
[binary,
{packet,raw},
{reuseaddr,true},
{backlog,128},
{nodelay,true},
{exit_on_close,false}]},
{tcp_listeners,[5672]},
{trace_vhosts,[<<"/">>]},
{vm_memory_high_watermark,0.4}].
3、rabbitmq-env.conf rabbitmq环境参数配置:
RABBITMQ_NODENAME=FZTEC-240088  节点名称
RABBITMQ_NODE_IP_ADDRESS=127.0.0.1 监听IP
RABBITMQ_NODE_PORT=5672 监听端口
RABBITMQ_LOG_BASE=/data/rabbitmq/log 日志目录
RABBITMQ_PLUGINS_DIR=/data/rabbitmq/plugins 插件目录
RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia 后端存储目录
更详细的配置参考官网: http://www.rabbitmq.com/configure.html#configuration-file 
4、启动
# /usr/local/rabbitmq/sbin/rabbitmq-server -detached


四、插件管理


启用rabbitmq web管理插件
# ./rabbitmq-plugins enable rabbitmq_management
web管理端口默认端口是15672,访问地址为http://rabbitmq_host_ip:15672  默认有一个用户名字和密码都是guest
rmq.png

列出所有插件
./rabbitmq-plugins list
rmqlist.png

安装Rabbitmq出现的错误

Something 回复了问题 2 人关注 1 个回复 7513 次浏览 2016-03-28 00:28 来自相关话题