sysbench是开源的跨平台多线程基准测试工具,主要用于评估测试各种不同系统参数下的CPU、内存、I/O和数据库负载情况。目前sysbench主要支持 MySQL,pgsql,oracle 这3种数据库。本文使用sysbench简单对Percona server5.6.19进行一系列的测试。具体的参数设置,应根据实际环境来进行必要调整。 Continue reading
使用fio进行I/O性能测试
fio是一个非常灵活的I/O测试工具,支持多线程或进程模拟等I/O操作来进行压力测试,project官网为fio
(1). 安装fio首先要安装异步的I/O支持libaio.x86_64(Linux-native asynchronous I/O access library):
yum install libaio libaio-devel
应用使用IO通常有二种方式:同步和异步。 同步的IO一次只能发出一个IO请求,等待内核完成才返回,这样对于单个线程iodepth总是小于1,但是可以透过多个线程并发执行来解决,通常我们会用16-32根线程同时工作把iodepth塞满。 异步的话就是用类似libaio这样的linux native aio一次提交一批,然后等待一批的完成,减少交互的次数,会更有效率。(摘自参考2) Continue reading
Percona Server 5.6源码编译
Percona现在没有对el7提供稳定的二进制发行包,所以今天小测一下mysql的源码编译,使用的源码为Percona Server 5.6.19-67,环境为CentOS 7.0。
1. 编译依赖
MySQL的编译依赖下面程序:
g++ MySQL从5.6开始需要使用g++来编译源码。
cmake MySQL从5.5开始,需要使用cmake 2.8+进行工程管理。
bison MySQL的语法解析器用于自动生成语法分析器程序,Bison把LALR形式的上下文无关文法描述转换为可做语法分析的C或C++程序
ncurses-devel 它提供了API,可以允许程序员编写独立于终端的基于文本的用户界面
libaio libaio是Linux下的一个异步非阻塞接口,它提供了以异步非阻塞方式来读写文件的方式,读写效率比较高。
zlib MySQL压缩支持
libxml 用于XML输入输出方式的支持,MySQL的可选功能依赖这个包。
openssl 使用openssl 安全socket方式进行通信
使用yum来安装:
1 |
yum install gcc-c++ make cmake bison bison-devel ncurses-devel libaio-devel openssl libxml2 |
编译spark-1.0.1源代码
截至到当前为止,spark最新版本为1.0.1。本文测试环境的操作系统是CentOS 7.0 x86_64,jdk为1.7.0_51。编译spark和编译hadoop类似,是一个很简单的过程。
1. 下载spark源代码
1 |
wget http://d3kbcqa49mib13.cloudfront.net/spark-1.0.1.tgz |
2. 安装maven或sbt
(1). java-devel是必须要安装的包
1 |
yum -y install java-devel |
(2). 安装maven
1 |
yum -y install maven |
检查maven
1 2 3 4 5 6 7 |
# mvn -v Apache Maven 3.0.5 (Red Hat 3.0.5-16) Maven home: /usr/share/maven Java version: 1.7.0_55, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.55-2.4.7.2.el7_0.x86_64/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-123.4.2.el7.x86_64", arch: "amd64", family: "unix" |
MongoDB Shard
分片(Sharding)是一种将海量的数据水平扩展的数据库集群系统。而在MongoDB提供了auto-sharding的功能,通过简单的配置就可以构建一个分布式 MongoDB 分片集群。MongoDB 的数据分块称为 chunk。每个 chunk 都是 Collection 中一段连续的数据记录,通常最大尺寸是 200MB,超出则生成新的数据块。对于数据的分片基于chunk来实现。
一个分片集群包含下面组成(搭建高可用MongoDB集群(四):分片这位大牛已经把高可用shard集群(mongos with replica set)的原理和搭建过程写的很清楚,这里我很无耻的拿来直接实战搞起:),架构上略有不同。
一共使用4台主机,配置了三个configdb。数据三个shard,每个shard为一个3节点的replica set都作为复制节点。如上图所示。这个架构从实际上来说还是有很多问题,这里就不在深究了。 Continue reading
使用GPG进行加密和签名
GNU Privacy Guard (GnuPG or GPG)是一个GPL许可证的软件加密工具,和PGP比较类似。
与许多非对称加密方法一样,GPG和PGP使用一个密钥对——公钥和私钥——来加密数据。公钥可被广泛传播,甚至保存在公共密匙数据库中以被其他用户查阅。私钥属于私密信息,不会泄漏给其他人。公匙和私匙相互作用对数据进行加密及解密。被公匙加密的数据只能被私匙解密,被私匙加密的数据也只能被一个公匙解密。这样就可以实现双重认证。
当用户想发送关键信息给其他人时,首先用户使用他的私匙来加密信息,然后发送给有公钥的其他人。因为只有使用发送者的公钥才能对接收信息进行解密,这样接收者就能确信信息的确来自某个人。Redhat的RPM软件包签名 就是使用一组 GPG 密钥对来验证软件包的合法性。
下面实际演练一下GPG中生成并管理密钥对、加密和解密、签名和验证等操作。 Continue reading
使用createrepo配置本地ambari/HDP源
企业内部的hadoop平台一般是不可能连接外部网络。所以需要搭建一个本地的yum repository。下面是简单的配置流程,不足之处欢迎拍砖。
1. 配置hdp的源
wget -nv http://public-repo-1.hortonworks.com/HDP/centos6/2.x/GA/2.1-latest/hdp.repo -O /etc/yum.repos.d/hdp.repo
配置ambari源:
wget -nv http://public-repo-1.hortonworks.com/ambari/centos6/1.x/updates/1.6.0/ambari.repo -O /etc/yum.repos.d/hdp.repo
Continue reading
MongoDB Two-phase Commit
先恶补一下分布式事务中事务的各类提交机制:(关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究)
NoSQL并没有关系数据库那么严格的事务机制,所以在NoSQL中能否很好的实现事务功能体现了开发人员的功力。两段式提交保证了分布式XA规范的分布式事务的原子性。两段指prepare阶段和commit阶段:
Continue reading
MongoDB Replica Set
一个replica set可以看作一个带故障转移的Master-Slave复制集群,它在primary节点失效后(或者secondaries不能访问primary时)会自动选举secondary节点成为master。replica set需要保证实例之间相互了解生存状态,所以需要n*(n-1)*2条心跳检测链路。在集群有一定规模时增加了网络的负担。如果使用开发语言的Driver指定了replica set中的一些server,那么driver会自动引入replica set中所有的server并自动在primary失效后故障转移到其他节点。
Replica Set Members
Replica set最多可以有12个成员,但是只有7个成员能同时投票。成员的角色分为:
Primary 同master节点,可以执行write操作。
Secondary 同Slave节点,接收并复制Primary节点的操作。可以进行一些其他配置:如设置为Non-Voting或优先级
Arbiter 不进行数据复制,只在primary失效后参与投票。
Continue reading
MongoDB Master/Slave复制
Master-Slave replication主从复制是最常用的一种高可用模式,常用于备份、故障转移(failover)、读扩展等模式,同样被MongoDB支持,但大多数情况已经被Replica Sets取代。 MongoDB的主从复制配置起来非常简单:
在Master节点,以--master
命令行选项或在参数上加上master,并指定日志大小(64MB)。
1 2 3 4 5 6 7 |
[root@ubt1] vim /etc/mongo.conf master=true oplogSize=64 #port = 27017 start master server # 启动master mongod [root@ubt1] mongod -f /etc/mongo.conf |