1、下载安装mongodb
cd /home
mkdir mongodb
cd mongodb
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.2.11.tgz
export PATH=/home/mongodb/mongodb-linux-x86_64-rhel70-3.2.11/bin:$PATH
2、创建副本集
目录结构如下
加入配置mongodb.conf
node1,2,3为一副本集,node4,5,6为一副本集
#数据存放位置
dbpath=/home/var/mongodb/shares/shards/node1/data/db
#日志追加方式
logappend=true
#守护线程
fork=true
#ip
bind_ip=外网ip
#端口
port=27001
#副本集名称
replSet=haoset1
#日志路径
logpath=/home/var/mongodb/shares/shards/node1/log/mongodb.log
依次启动node1,2.....
![启动后](https://img-blog.csdn.net/20161124171907146)
连接mongodb,初始化副本集
mongo –host 139.199.159.53 –port 27001
rs.initiate({“_id”:”haoset1”,members:[{“_id”:1,”host”:”外网ip:27001”},{“_id”:2,”host”:”外网ip:27002”},{“_id”:3,”host”:”外网ip:27003” }]})
副本集配置完成
3、创建configserver
dbpath=/home/var/mongodb/shares/configsvr/config1/data/db
#cofigserver配置
configsvr=true
bind_ip=外网ip
port=28001
fork=true
logpath=/home/var/mongodb/shares/configsvr/config1/log/config.log
replSet=haoconfig
logappend=true
复制到config2,3并改变相应配置
依次启动config1,2,3
mongod --config config.conf
连接任意configserver
mongo --host 外网ip --port 28001
初始化副本集
rs.initiate({"_id":"haoconfig",members:[{"_id":1,"host":"外网ip :28001"},{"_id":2,"host":"外网ip :28002"},{"_id":3,"host":"外网ip :28003" }]})
![副本集状态](https://img-blog.csdn.net/20161124162330648)
至此,configserver副本集搭建完成
4、创建mongos
bind_ip=10.135.54.100
port=30000
fork=true
configdb=haoconfig/139.199.159.53:28001,139.199.159.53:28002,139.199.159.53:28003
logpath=/home/var/mongodb/shares/mongos/log/config.log
logappend=true
启动 mongos –config config.conf
添加分片
sh.addShard(“haoset1/外网ip:27001”)
sh.addShard(“haoset2/外网ip:27004”)
5、测试
mongos> show dbs
config 0.001GB
mongos> use mytest
switched to db mytest
mongos> sh.enableSharding("mytest")
{ "ok" : 1 }
mongos> sh.shardCollection("mytest.mycon",{name:"hashed"})
{ "collectionsharded" : "mytest.mycon", "ok" : 1 }
mongos> use mytest
switched to db mytest
mongos> for(var i=0;i<1000;i++)db.mycon.insert({name:"williamHao"+i,age:i})
WriteResult({ "nInserted" : 1 })
mongos>
效果如下
mongo --host 139.199.159.53 --port 27001
haoset1:PRIMARY> use mytest
switched to db mytest
haoset1:PRIMARY> db.mycon.find()
{ "_id" : ObjectId("5836b3fa9be7c9d62e91aaf2"), "name" : "williamHao4", "age" : 4 }
{ "_id" : ObjectId("5836b3fa9be7c9d62e91aaf6"), "name" : "williamHao8", "age" : 8 }
{ "_id" : ObjectId("5836b3fa9be7c9d62e91aaf7"), "name" : "williamHao9", "age" : 9 }
{ "_id" : ObjectId("5836b3fa9be7c9d62e91aaf8"), "name" : "williamHao10", "age" : 10 }
{ "_id" : ObjectId("5836b3fa9be7c9d62e91aafb"), "name" : "williamHao13", "age" : 13 }
{ "_id" : ObjectId("5836b3fa9be7c9d62e91aafc"), "name" : "williamHao14", "age" : 14 }
{ "_id" : ObjectId("5836b3fa9be7c9d62e91aafd"), "name" : "williamHao15", "age" : 15 }
Type "it" for more
6、与spring整合
mongodb.properties
mongo.config.host=139.199.159.53
mongo.config.port=30000
mongo.config.db1=mytest
mongodb.xml
加入
xmlns:mongo=”http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
<util:properties id="mongoConfiguration" location="classpath:mongodb/mongodb.properties"/>
<mongo:mongo id="mongo" host="#{mongoConfiguration['mongo.config.host']}" port="#{mongoConfiguration['mongo.config.port']}">
<mongo:options connections-per-host="100"
threads-allowed-to-block-for-connection-multiplier="50"
auto-connect-retry="true"/>
</mongo:mongo>
<!-- 自动扫描quick4j包 ,将带有注解的类 纳入spring容器管理 -->
<context:component-scan base-package="com.eliteams.quick4j.test.mongodbtest"></context:component-scan>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongo"/>
<constructor-arg name="databaseName" value="#{mongoConfiguration['mongo.config.db1']}"/>
</bean>
测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:mongodb/mongodb.xml")
public class MongodbTest {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 测试插入
*/
@Test
public void testInsert(){
for (int i = 0; i < 10; i++) {
JSONObject jo = new JSONObject();
jo.put("name","wanghao"+i);
jo.put("age",i);
mongoTemplate.insert(jo,"mycon");
}
for (int i = 0; i < 10; i++) {
JSONObject jo = new JSONObject();
jo.put("name","tuzhiwen"+i);
jo.put("age",i);
mongoTemplate.insert(jo,"mycon");
}
for (int i = 0; i < 10; i++) {
JSONObject jo = new JSONObject();
jo.put("name","yunxia"+i);
jo.put("age",i);
mongoTemplate.insert(jo,"mycon");
}
}
/**
* 测试读取
*/
@Test
public void testSelect(){
Criteria criatira = new Criteria();
criatira.andOperator(Criteria.where("name").regex(".*\\wanghao.*"));
List<JSONObject> list = mongoTemplate.find(new Query(criatira), JSONObject.class,"mycon");
for (int i = 0; i < list.size(); i++) {
System.out.println("name:"+list.get(i).getString("name")+",age"+list.get(i).getIntValue("age"));
}
}
/**
* 测试mapReduce
*/
@Test
public void TestMapReduce() {
DBCollection col = mongoTemplate.getCollection("mycon");
String mapStr = "function(){if(this.age=5) emit(this.age,this.name)}";
String reduceStr = "function(key,values){var count=0;values.forEach(function(){count+=1;});var result={names:values,sum:count};return result;}";
MapReduceOutput output = col.mapReduce(mapStr, reduceStr, "result",null);
DBCollection outcol = output.getOutputCollection();
DBCursor dbc = outcol.find();
StringBuffer sb = new StringBuffer();
while (dbc.hasNext()) {
DBObject dbo = dbc.next();
sb.append(dbo.toString());
System.out.println(dbo.toString());
}
//System.out.println(sb.toString());
}
/**
* 测试文件上传
*/
@Test
public void TestGridFsUpload() throws IOException {
FileInputStream fis = null;
try {
fis = new FileInputStream("C:\\Users\\Administrator\\Desktop\\area.sql");
DB db = mongoTemplate.getDb();
// 存储fs的根节点
GridFS gridFS = new GridFS(db, "testfile");
GridFSInputFile gfs = gridFS.createFile(fis);
gfs.put("filename", "test.sql");
gfs.save();
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
fis.close();
}
}
/**
* 测试文件下载
*/
@Test
public void TestGridFsDownLoad() throws IOException {
FileOutputStream fos = null;
try {
fos = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test.sql");
DB db = mongoTemplate.getDb();
// 存储fs的根节点
GridFS gridFS = new GridFS(db, "testfile");
GridFSDBFile gff = gridFS.findOne("test.sql");
InputStream is = gff.getInputStream();
byte[] buff = new byte[1024];
while(is.read(buff) != -1){
fos.write(buff);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
fos.close();
}
}
}