项目中第一次使用Mongodb,难免会遇到一些问题,由其是集群环境搭建,足足耗费了两天时间,所以写在博客记录下来,以免时间久了忘记了.
本次测试环境搭建结构图如下:
条件有限,在正式环境安装前,先在测试环境搭建测试一下,可是只有一台服务器,好不容易找同事借了一台电脑,装了两个虚拟机,203,204这两台,好了,不多说了,开始干活
第一步,创建用户,安装软件
用户为:iport
软件版本为:mongodb-linux-x86_64-2.4.5.tgz
操作系统为:Centos5.6-x86_64
安装目录为:/home/iport/apps/mongodb-linux-x86_64-2.4.5
具体怎么弄,此处略去一百字............
第二步,创建一个SecurityKey
执行如下命令,创建一个mongo.key文件,最后mongo安全认证时会用到这个文件,所有服务器上文件内容要一样....
[iport@localhost ~]$ openssl rand -base64 741 > mongo.key
[iport@localhost ~]$ chmod 0600 mongo.key
复制mongo.key到所有服务器上的/home/iport/apps/mongodb-linux-x86_64-2.4.5/目录上
第三步,安装MongoDB实例
------------------------------------------------172.16.2.203上的操作-----------------------------------------------------------
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p data/rs1-1
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p log/rs1-1
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p data/rs2-1
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p log/rs2-1
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p data/config
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p log/config
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p log/mongos
--进入bin目录
[iport@localhost mongodb-linux-x86_64-2.4.5]$ cd bin/
--启动mongodb rs1-1
[iport@localhost bin]$ ./mongod --fork --journal --maxConns 20000 --nohttpinterface --shardsvr --replSet rs1 --port 27019 --dbpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/data/rs1-1 --logpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/log/rs1-1/mongodb.log --keyFile='/home/iport/apps/mongodb-linux-x86_64-2.4.5/mongo.key'
--启动mongodb rs2-1
[iport@localhost bin]$ ./mongod --fork --journal --maxConns 20000 --nohttpinterface --shardsvr --replSet rs2 --port 27020 --dbpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/data/rs2-1 --logpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/log/rs2-1/mongodb.log --keyFile='/home/iport/apps/mongodb-linux-x86_64-2.4.5/mongo.key'
--启动mongo config服务
[iport@localhost bin]$ ./mongod --fork --configsvr --nohttpinterface --port 30000 --dbpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/data/config --logpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/log/config/mongodb.log --keyFile='/home/iport/apps/mongodb-linux-x86_64-2.4.5/mongo.key'
------------------------------------------------172.16.2.204-----------------------------------------------------------
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p data/rs1-2
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p log/rs1-2
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p data/rs2-2
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p log/rs2-2
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p data/config
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p log/config
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p log/mongos
--进入bin目录
[iport@localhost mongodb-linux-x86_64-2.4.5]$ cd bin/
--启动mongodb rs1-2
[iport@localhost bin]$ ./mongod --fork --journal --maxConns 20000 --nohttpinterface --shardsvr --replSet rs1 --port 27019 --dbpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/data/rs1-2 --logpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/log/rs1-2/mongodb.log --keyFile='/home/iport/apps/mongodb-linux-x86_64-2.4.5/mongo.key'
--启动mongodb rs2-2
[iport@localhost bin]$ ./mongod --fork --journal --maxConns 20000 --nohttpinterface --shardsvr --replSet rs2 --port 27020 --dbpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/data/rs2-2 --logpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/log/rs2-2/mongodb.log --keyFile='/home/iport/apps/mongodb-linux-x86_64-2.4.5/mongo.key'
--启动mongo config
[iport@localhost bin]$ ./mongod --fork --configsvr --nohttpinterface --port 30000 --dbpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/data/config --logpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/log/config/mongodb.log --keyFile='/home/iport/apps/mongodb-linux-x86_64-2.4.5/mongo.key'
------------------------------------------------172.16.0.119-----------------------------------------------------------
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p data/rs1-3
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p log/rs1-3
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p data/rs2-3
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p log/rs2-3
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p data/config
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p log/config
[iport@localhost mongodb-linux-x86_64-2.4.5]$ mkdir -p log/mongos
--进入bin目录
[iport@localhost mongodb-linux-x86_64-2.4.5]$ cd bin/
--启动mongodb rs1-3
[iport@localhost bin]$ ./mongod --fork --journal --maxConns 20000 --nohttpinterface --shardsvr --replSet rs1 --port 27019 --dbpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/data/rs1-3 --logpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/log/rs1-3/mongodb.log --keyFile='/home/iport/apps/mongodb-linux-x86_64-2.4.5/mongo.key'
--启动mongodb rs2-3
[iport@localhost bin]$ ./mongod --fork --journal --maxConns 20000 --nohttpinterface --shardsvr --replSet rs2 --port 27020 --dbpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/data/rs2-3 --logpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/log/rs2-3/mongodb.log --keyFile='/home/iport/apps/mongodb-linux-x86_64-2.4.5/mongo.key'
--启动mongo config
[iport@localhost bin]$ ./mongod --fork --configsvr --nohttpinterface --port 30000 --dbpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/data/config --logpath /home/iport/apps/mongodb-linux-x86_64-2.4.5/log/config/mongodb.log --keyFile='/home/iport/apps/mongodb-linux-x86_64-2.4.5/mongo.key'
第四步,配置mongos
三台服务上分别执行如下命令,启动mongos实例
[iport@localhost bin]$ ./mongos --fork --configdb 172.16.0.119:30000,172.16.2.203:30000,172.16.2.204:30000 --port 40000 --logpath '/home/iport/apps/mongodb-linux-x86_64-2.4.5/log/mongos/mongos.log' --keyFile='/home/iport/apps/mongodb-linux-x86_64-2.4.5/mongo.key'
第五步,配置replset
在任何一台服务器上用mongo命令连接本地mongodb实例(通过localhost),创建两个replset,rs1和rs2
[iport@localhost bin]$ ./mongo localhost:27019/admin
> config = {_id: 'rs1', members: [{_id: 0, host: '172.16.0.119:27019'},{_id: 1, host: '172.16.2.203:27019'},{_id: 2, host: '172.16.2.204:27019'}]}
> rs.initiate(config);
[iport@localhost bin]$ ./mongo localhost:27020/admin
> config = {_id: 'rs2', members: [{_id: 0, host: '172.16.0.119:27020'},{_id: 1, host: '172.16.2.203:27020'},{_id: 2, host: '172.16.2.204:27020'}]}
> rs.initiate(config);
第七步,配置NTP
配置其中一台为ntpd服务器,其余几台定时同步时间,mongodb各服务器之间时间必须同步,ntp时间同步方式,参考百度,此处略去两百字.......
第八步,添加数据库,用户,启用分片功能
连接任一台mongos(通过localhost连接),执行命令: ./mongo localhost:40000/admin
在mongo控制台执行如下命令:
>db.addUser({user:"clusterAdmin",pwd:"pwd",roles:["clusterAdmin","userAdminAnyDatabase","readWriteAnyDatabase"]});
>sh.addShard("rs1/172.16.0.119:27019,172.16.2.203:27019,172.16.2.204:27019");
>sh.addShard("rs2/172.16.0.119:27020,172.16.2.203:27020,172.16.2.204:27020");
--创建测试数据库,及测试collection,并分片
>use wx_iop;
>db.createCollection("packet");
>db.createCollection("access_records");
--创建测试数据库用户
>db.addUser( { user: "wx_iop_mongo",pwd: "wx_iop_mongo",roles: [ "readWrite", "dbAdmin" ]});
--创建索引
>db.access_records.ensureIndex( {"meta.year":1,"meta.month":1,"meta.day":1,"meta.date":1,"meta.apiName":1,"meta.appKey":1}, { unique: true,name:"metaIdx" } );
--开启数据库分片功能
>sh.enableSharding("wx_iop");
--开启collection分片功能
>sh.shardCollection("wx_iop.packet",{"_id":"hashed"});
>sh.shardCollection("wx_iop.access_records",{"meta.year":1,"meta.month":1,"meta.day":1,"meta.date":1,"meta.apiName":1,"meta.appKey":1});