nginxs

运维博客

00-zookeeper启动报错: myid file is missing 和 Problem starting AdminServer

2016/05/14 08:00 于 数据分析 0

微信 微博 豆瓣 人人

zookeeper集群节点启动时候会读取“dataDir”目录下的id,所以必须在对应节点的“dataDir”目录下创建“myid”文件,里面填写serverid
举例:
vim conf/zoo.cfg

    tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
clientPort=2181
server.1=192.168.1.128:2008:6008
server.2=192.168.1.128:2008:6008
server.3=192.168.1.129:2008:6008

我在这里就需要在
“192.168.1.127”节点echo "1" >/data/zookeeper/myid
“192.168.1.128”节点echo "2" >/data/zookeeper/myid
“192.168.1.129”节点echo "3" >/data/zookeeper/myid

    2016-05-14 12:01:01,079 [myid:] - INFO  [main:QuorumPeerConfig@114] - Reading configuration from: /usr/local/zookeeper/bin/../conf/zoo.cfg
2016-05-14 12:01:01,085 [myid:] - INFO [main:QuorumPeerConfig@316] - clientPortAddress is 0.0.0.0/0.0.0.0:2181
2016-05-14 12:01:01,085 [myid:] - INFO [main:QuorumPeerConfig@320] - secureClientPort is not set
2016-05-14 12:01:01,089 [myid:] - ERROR [main:QuorumPeerMain@86] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /usr/local/zookeeper/bin/../conf/zoo.cfg
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:135)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:110)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)
Caused by: java.lang.IllegalArgumentException: myid file is missing
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.checkValidity(QuorumPeerConfig.java:637)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.setupQuorumPeerConfig(QuorumPeerConfig.java:508)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:348)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:131)
... 2 more
Invalid config, exiting abnormally

zookeeper的管理员端口被占用,需要修改配置里的“zookeeper.admin.serverPort=8080”,默认8080没有写出来,只要改为一个没使用端口即可

    2016-05-14 12:17:36,385 [myid:1] - WARN  [main:QuorumPeer@723] - Problem starting AdminServer
org.apache.zookeeper.server.admin.AdminServer$AdminServerException: Problem starting AdminServer on address 0.0.0.0, port 8080 and command URL /commands
at org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:100)
at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:721)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:183)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:120)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)
Caused by: java.net.BindException: Address already in use
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:444)
at sun.nio.ch.Net.bind(Net.java:436)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at org.mortbay.jetty.nio.SelectChannelConnector.open(SelectChannelConnector.java:216)
at org.mortbay.jetty.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:315)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.Server.doStart(Server.java:235)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:96)
... 4 more
org.apache.zookeeper.server.admin.AdminServer$AdminServerException: Problem starting AdminServer on address 0.0.0.0, port 8080 and command URL /commands

zookeeper

zookeeper源码安装

00-zookeeper启动报错: myid file is missing 和 Problem starting AdminServer

zookeeperzookeeper启动失败zookeeper端口占用zookeeper myid file is missingzookeeper Problem starting AdminServer

zookeeper源码安装

2016/04/15 22:56 于 数据分析 0

微信 微博 豆瓣 人人


介绍

zookeeper是一个管理分布式服务协调的开源服务,它本身亦是分布式服务。
是hadoop,Hbase,codis服务的重要组件,为分布式应用提供一致性服务:配置维护,域名服务,分布式同步,组服务等。

下载安装包

    yum -y install openjdk
wget http://apache.fayea.com/zookeeper/zookeeper-3.5.1-alpha/zookeeper-3.5.1-alpha.tar.gz
tar zxf zookeeper-3.5.1-alpha.tar.gz
cd zookeeper-3.5.1-alpha

配置文件

这里先使用默认设置

cat ./conf/zoo.cfg

tickTime=2000                           单位毫秒,用来做两次心跳最低超时时间间隔
initLimit=10 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
syncLimit=5 F节点和L节点最多心跳失败5次。
dataDir=/data/zookeeper 内存数据快照到本地的数据,除非特别说明,否则将是更新事物日志。
clientPort=2181 客户端端口

启动服务

zookeeper默认会占用2181,8080,55144三个端口

    [root@salt-master zookeeper-3.5.1-alpha]# ./bin/zkServer.sh 
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper-3.5.1-alpha/bin/../conf/zoo.cfg
Usage: ./bin/zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|restart|status|print-cmd}

[root@salt-master zookeeper-3.5.1-alpha]# ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper-3.5.1-alpha/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

连接测试

 ./bin/zkCli.sh -server 192.168.1.115:2181
Connecting to 192.168.1.115:2181
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.1.115:2181(CONNECTED) 1] ls /
[zookeeper]
[zk: 192.168.1.115:2181(CONNECTED) 4] ls2 /zookeeper
'ls2' has been deprecated. Please use 'ls [-s] path' instead.
[config, quota]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2

查看zookeeper服务信息

    [root@salt-master codis]# echo stat | nc 192.168.1.115 2181 
Zookeeper version: 3.5.1-alpha-1693007, built on 07/28/2015 07:19 GMT
Clients:
/192.168.1.115:56637[0](queued=0,recved=1,sent=0)
/192.168.1.115:56608[1](queued=0,recved=160,sent=160)

Latency min/avg/max: 0/0/22
Received: 162
Sent: 161
Connections: 2
Outstanding: 0
Zxid: 0x1
Mode: standalone
Node count: 5

zookeeperzookeeper快速安装

hadoop单机版

2016/03/08 22:48 于 数据分析 0

微信 微博 豆瓣 人人


  1. 下载地址:http://apache.fayea.com/hadoop/common/

  2. 解压文件到"/usr/local/hadoop"

3.修改配置文件etc/hadoop/core-site.xml:

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

4.etc/hadoop/hdfs-site.xml:

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

5.添加无密码登录

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa  #生成公钥
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys #添加公钥

6.本地运行MapReduce job

   ./bin/hdfs namenode -format            #格式化文件系统
./sbin/start-dfs.sh #启动服务
启动后查看一下 http://localhost:50070/是否全部启动

  ./bin/hdfs dfs -mkdir /user             #创建“/user”目录
./bin/hdfs dfs -mkdir /user/testdir #创建“/user/testdir”目录
./bin/hdfs dfs -put etc/hadoop /user/testdir/ #把当前的“etc”目录下的“hadoop”目录put到hdfs的“/user/testdir/”目录下
./bin/hdfs dfs -get /user/testdir/hadoop /tmp/test/ #把hadoop内的“/user/testdir/hadoop"目录拉到 "/tmp/test/"
./bin/hdfs dfs -ls /user/baishaohua/hadoop/mapred-site.xml.template #查看“hadoop”的目录下文件

-rw-r--r-- 1 root supergroup 758 2016-03-08 22:27 /user/baishaohua/hadoop/mapred-site.xml.template
./bin/hdfs dfs -cat /user/baishaohua/hadoop/mapred-site.xml.template #查看hadoop中文件

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>

</configuration>

微信扫描二维码了解更多 ->

[运维博客]
[运维博客](http://nginxs.blog.51cto.com/

hadoophadoop单机实例hadoop单机

mongodb 监控命令mongostat

2016/03/07 15:11 于 数据分析 0

微信 微博 豆瓣 人人

mongostat实用工具提供了mongoDB一个实例快速概述和当前运行的状态。mongostat功能类似于UNIX / Linux文件系统实用vmstat,mongostat只不过是提供 mongodb 的数据。

概览包含的数据:
服务器状态
副本状态
数据库状态
集合状态

[root@DB~]#  mongostat --rowcount 2 1  --host 192.168.0.8:27027
[root@DB~]# mongostat -n 2 1 --host 192.168.199.8:27017
insert query update delete getmore command % dirty % used flushes vsize res qr|qw ar|aw netIn netOut conn set repl time
*0 *0 *0 *0 0 3|0 0.0 16.9 0 3.8G 3.0G 0|0 0|0 526b 19k 5 db PRI 2016-03-07T15:09:33+08:00
*0 *0 *0 *0 1 2|0 0.0 16.9 0 3.8G 3.0G 0|0 0|0 433b 19k 5 db PRI 2016-03-07T15:09:34+08:00

--rowcount 20 1 展示20条每次间隔1秒
--n 20 1 展示20条每次间隔1秒

--help 查看帮助信息
--version 查看mongodb版本号
--host 要连接的主机同时也可以指定端口 --host 192.168.0.2:27017 --host 192.168.0.2:27017,192.168.0.3:27017
--port 如果--host不指定端口在这单独指定 --port 27017
--ipv6 指定使用IPv6的地址
--sslCAFile 指定对应的CA密钥位置
--username 用户
--password 密码

insert 写入
query 查询
update 更新
delete 删除
getmore 查看更多(it)
flushes WiredTiger存储引擎中,flushes是指WiredTiger循环创建检查点的时间间隔。
MMAPv1存储引擎中,则代表每秒fsync操作的数量。
dirty WiredTiger存储引擎中dirty 数据占缓存百分比。
used WiredTiger存储引擎中引擎使用缓存占百分比。
mapped MMAPv1
vsize 虚拟内存使用大小
res 使用真实内存大小
qr 客户端等待读的长度
qw 客户端等待些的队列长度
ar 活跃客户执行写操作的数量。
netin mongodb进入的流量包含mongostat本身(单位:bytes)
netout mongodb出去的流量包含mongostat本身
conn 打开的总连接数
set 这个是应用的副本集
repl 当前实例的角色
M或 PRI:"master",
SEC:"Secondary",
REC:"recovering",
UNK:"unknow",
SLV:"slave",
RTR:"mongos process"("router")
ARB:"arbiter"

微信扫描二维码了解更多 ->

[运维博客]
[运维博客](http://nginxs.blog.51cto.com/

mongodb监控命令mongostatmongodb监控命令mongostat命令

SSDB介绍

2016/03/05 23:23 于 数据分析 0

微信 微博 豆瓣 人人

文档



  • SSDB 是一个 C/C++ 语言开发的高性能 NoSQL 数据库, 支持 KV, list, map(hash), zset(sorted set) 等数据结构, 用来替代或者与 Redis 配合存储十亿级别列表的数据.


  • SSDB 是稳定的, 生产环境使用的, 已经在许多互联网公司得到广泛使用, 如奇虎 360, TOPGAME.

  • 它的使用方法基本和redis几乎一致,只是相对少一些list的功能,而ssdb使用内存相对更少。

【官方文档】:http://ssdb.io/docs/zh_cn/index.html

【源码】:https://github.com/ideawu/ssdb

微信扫描二维码了解更多 ->

[运维博客]
[运维博客](http://nginxs.blog.51cto.com/

SSDBssdb介绍

redis 简介

2016/03/05 23:05 于 数据分析 0

微信 微博 豆瓣 人人

来自百度百科:



  • Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

  • redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
  • Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
  • Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
  • redis的官网地址,非常好记,是redis.io。(特意查了一下,域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)

【官网】:http://redis.io/【中文官网】:http://www.redis.cn/【redis教程】:
http://www.yiibai.com/redis/redis_quick_guide.htmlhttp://doc.redisfans.com/

微信扫描二维码了解更多 ->

[运维博客]
[运维博客](http://nginxs.blog.51cto.com/

redisreids教程redis介绍

pymongo性能测试脚本

2016/03/05 00:16 于 数据分析 0

微信 微博 豆瓣 人人

最近开始接触mongodb,顺便用python的pymongo写了一个测试性能的脚本

[root@cloud ~]# cat /home/baishaohua/mongo_test.py 
#!/usr/bin/python
import pymongo
import time,datetime

conn=pymongo.Connection('192.168.1.8',27017) #建立连接
db=conn.test #进入test库
col=db.people #进入people集合

print "Test Write==>" #开始写测试
atime=time.time() #记录开始时间戳atime
doc = { "high" : 175, "six" : "true", "phone_num" : 1222222, "name" : "str(i)" }
for i in range(1,1200000): #循环顺序写入120w次
col.insert(doc)
btime=time.time() #记录结束时间戳
print "Writeexec time:"
print btime-atime #计算执行市场

print "Test Read==>"
atime=time.time()
doc = { "name" : "str(i)" }
for i in range(1,1200000): #循环顺序读取120w次
col.find(doc)
btime=time.time()
print "Read exec time:"
print btime-atime

print "Test Delete==>"
atime=time.time()
doc = { "name" : "str(i)" }
for i in range(1,1200000): #循环顺序删除120w次
col.remove(doc)
btime=time.time()
print "Delete exec time:"
print btime-atime

微信扫描二维码了解更多 ->

[运维博客]
[运维博客](http://nginxs.blog.51cto.com/

mongodbmongodb性能测试pymongo

Mongodb WiredTiger存储引擎特性

2016/03/03 20:59 于 数据分析 0

微信 微博 豆瓣 人人

            数据库的存储引擎组件,负责管理存储在内存和硬盘上的数据。MongoDB支持多个存储引擎,为特定的工作指派合适的存储引擎为您的用例可以显著提高应用程序的性能。

  MongoDB WiredTiger存储引擎是主要的组件负责管理数据。MongoDB提供各种存储引擎,允许您选择一个最适合您的应用程序。
  
WiredTiger存储引擎是Mongodb3.0新加的,在很普通的机器上就能超过2w的写频率,并发读写比以前提高了很多,mongodb3.2默认使用这个引擎。特性:

1、只支持64位系统

并发

2、支持文档级别的并发(多用户可能同时操作同集合内不同文档)

3、对于大多数读写操作,wiredtiger优化了控制并发。它的锁包含,全局锁,数据库锁,文档级别锁。当存储引擎检查到两个操作冲突操作时,其中一个写操作会默认进行一次重试。

一些涉及到多个库的短时全局操作,任然需要一个实例级别的全局锁。例如删除一个集合,仍然需要数据库锁。

快照和检查点

   wiredtiger使用多版本并发控制(MVCC),当开始一个操作时wiredtiger会给这个事物提供一个当前时间点的数据快照,内存中的快照数据提供一个一致性视图。

当数据写入硬盘时,wiredtiger将所有的数据以快照方式写入硬盘保证数据的一致。当前持久化的文件就是一个“检查点”,这个“检查点”需要确保和最新数据的一致性,这个“检查点”也可以唤作恢复点。

WiredTiger使用写前事务日志和检查点,以确保数据持久性。即使没有日志“检查点”也可以用于恢复数据。

     即使写入新的“检查点”,之前的“检查点”依然有效,所以当mongodb终止或者在创建新的“checkport”发生错误时,重启后依然可以保留最近一次有效的“检查点”的数据,直到新的“检查点”可访问以后mongodb才会释放“旧检查点”。

MongoDB配置WiredTiger创建"检查点"(即写快照数据到磁盘)每隔60秒或2 g的journal data写到磁盘。这样就意味着

服务器突然宕机的话,这部分内存数据是会丢失的。

Journaljournal 是一个日志,在发生问题时候帮助你恢复数据。有几个可配置选项使你在平衡性能和可靠性之间调试适用于您的特定用例。
所有的“检查点”之间的修改都有日志的记录,可以通过这些记录恢复之前修改的数据到最近的检查点。
所以你会看到日志进程会频繁的把信息写到硬盘。
wiredtiger journal 默认使用快速压缩库写入。你可以修改“storage.wiredTiger.engineConfig.journalCompressor”设置。

**注意**

wiredtiger的最小日志记录是128byte,如果一条日志小于等于128byte将不记录。

如果单机的情况下,不使用journal将会意味着出现问题将会丢失一部分数据。

压缩

WiredTiger引擎支持所有的集合和索引压缩存储。这是以消耗额外的CPU为代价的来节省存储空间.
WiredTiger默认使用snappy算法压缩,也可以使用zlib。
参数介绍:
storage.wiredTiger.collectionConfig.blockCompressor”zlib算法压缩。
storage.wiredTiger.indexConfig.prefixCompression”关闭索引压缩

内存使用

mongodb WiredTiger引擎和文件都需要在内存中缓存。
在mongodb3.2中变化较大,WiredTiger使用缓存将会更多,内存使用达到“60%-1G”或者1G。
而文件缓存则使用剩余的内存或者“WiredTiger”和其它进程释放的内存。

storage.wiredTiger.engineConfig.cacheSizeGB"

微信扫描二维码了解更多 ->

[运维博客]

mongodbmongodb WiredTigerWiredTiger存储引擎

管理