各位扥扥早,包子油条豆浆带一份!
起立!
好了废话不多说了,如果有用请转发出去。
介绍:
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
IP分配:
Mongodb安装
1.关闭相关服务(三台都执行)
#关闭SELINUX
vi etc/selinux/config
把SELINUX=enrforing修改为SELINUX=disabled,然后重启
#临时关闭执行:
setenforce 0复制
2.关闭防火墙(三台都执行)
service iptables stop
chkconfig iptables off复制
3.获取mongodb3.0.2软件包(三台都执行)
mkdir -p main/mongodbtest
cd main/mongodbtest
yum -y install wget
wget http://image.wohenniucha.com/upload/2018/05/mongodb-linux-x86_64-3.0.2.gz
tar zxf mongodb-linux-x86_64-3.0.2.gz复制
4.配置搭建环境(三台都执行)
mkdir -p main/mongodbtest/mongos/log
mkdir -p main/mongodbtest/config/data
mkdir -p main/mongodbtest/config/log
mkdir -p main/mongodbtest/mongos/log
mkdir -p main/mongodbtest/shard1/data
mkdir -p main/mongodbtest/shard1/log
mkdir -p main/mongodbtest/shard2/data
mkdir -p main/mongodbtest/shard2/log
mkdir -p main/mongodbtest/shard3/data
mkdir -p main/mongodbtest/shard3/log复制
5.其他配置
核对3台服务器的系统时间是否正确
::::若在时间不对之前启动的mongodb,那么需要重新启动mongodb或者重启服务器,否则在启动mongos时会提示无法启动成功
添加如下内容到vi etc/security/limits.conf文件末尾,然后重启服务器生效
* soft nproc 65535
* hard nproc 65535
启动mongodb前执行一下命令,否则日志文件里会有警告
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled复制
6.如果是一台mongodb服务器则按照如下方式启动即可
#单机mongodb启动命令
main/mongodbtest/mongodb-linux-x86_64-3.0.2/bin/mongod --dbpath main/mongodbtest/config/data --port 21000 --logpath main/mongodbtest/config/log/config.log --fork
复制
7.集群mongodb服务器启动命令
#启动配置服务器(三台都执行)
main/mongodbtest/mongodb-linux-x86_64-3.0.2/bin/mongod --configsvr --dbpath main/mongodbtest/config/data --port 21000 --logpath main/mongodbtest/config/log/config.log --fork
复制
#启动mongos服务(三台都执行)
main/mongodbtest/mongodb-linux-x86_64-3.0.2/bin/mongos --configdb 192.168.100.67:21000,192.168.100.66:21000,192.168.100.63:21000 --port 20000 --logpath main/mongodbtest/mongos/log/mongos.log --fork
复制
注意:
在启动mongos时若报错:
ERROR: child process failed, exited with error number 1
查看日志文件/main/mongodbtest/mongos/log/mongos.log
2016-01-07T09:10:45.325+0800 I NETWORK [mongosMain] scoped connection to 172.18.8.33:21000,172.18.8.51:21000,172.18.8.71:21000 not being returned to the pool
2016-01-07T09:10:45.342+0800 E - [mongosMain] error upgrading config database to v6 :: caused by :: DistributedClockSkewed clock skew of the cluster 172.18.8.33:21000,172.18.8.51:21000,172.18.8.71:21000 is too far out of bounds to allow distributed locking.
是因为3台服务器的时间不一致导致,手动修改时间到当前时间即可。复制
#配置各个分片的副本集(三台都执行)
/main/mongodbtest/mongodb-linux-x86_64-3.0.2/bin/mongod --shardsvr --replSet shard1 --port 22001 --dbpath main/mongodbtest/shard1/data --logpath main/mongodbtest/shard1/log/shard1.log --fork --oplogSize 10
/main/mongodbtest/mongodb-linux-x86_64-3.0.2/bin/mongod --shardsvr --replSet shard2 --port 22002 --dbpath main/mongodbtest/shard2/data --logpath main/mongodbtest/shard2/log/shard2.log --fork --oplogSize 10
/main/mongodbtest/mongodb-linux-x86_64-3.0.2/bin/mongod --shardsvr --replSet shard3 --port 22003 --dbpath main/mongodbtest/shard3/data --logpath main/mongodbtest/shard3/log/shard3.log --fork --oplogSize 10复制
注意:
为了快速启动并节约测试环境存储空间,这里加上 nojournal 是为了关闭日志信息,在我们的测试环境不需要初始化这么大的redo日志。同样设置 oplogsize是为了降低 local 文件的大小,oplog是一个固定长度的 capped collection,它存在于”local”数据库中,用于记录Replica Sets操作日志。注意,这里的设置是为了测试
复制
8.初始化配置副本集(单机不用执行)
#在172.16.100.66上输入以下命令:
main/mongodbtest/mongodb-linux-x86_64-3.0.2/bin/mongo 127.0.0.1:22001
使用admin数据库
>use admin
定义副本集1配置
>config = { _id:"shard1", members:[
{_id:0,host:"192.168.100.67:22001",arbiterOnly:true},
{_id:1,host:"192.168.100.66:22001"},
{_id:2,host:"192.168.100.63:22001"}
]
}
#初始化副本集配置
>rs.initiate(config);
>exit复制
#在172.16.100.67上输入:
#定义副本集2配置
# main/mongodbtest/mongodb-linux-x86_64-3.0.2/bin/mongo 127.0.0.1:22002
>use admin
>config = { _id:"shard2", members:[
{_id:0,host:"192.168.100.67:22002"},
{_id:1,host:"192.168.100.66:22002",arbiterOnly:true},
{_id:2,host:"192.168.100.63:22002"}
]
}
#初始化副本集配置
>rs.initiate(config);
>exit复制
#在172.16.100.67上输入:
#设置副本集3配置
# main/mongodbtest/mongodb-linux-x86_64-3.0.2/bin/mongo 127.0.0.1:22003
>use admin
>config = { _id:"shard3", members:[
{_id:0,host:"192.168.100.67:22003"},
{_id:1,host:"192.168.100.66:22003"},
{_id:2,host:"192.168.100.63:22003",arbiterOnly:true}
]
}
#初始化副本集配置
>rs.initiate(config);
>exit复制
注意:
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到 mongos 路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
复制
9.分片配置
#连接到mongos
main/mongodbtest/mongodb-linux-x86_64-3.0.2/bin/mongo 127.0.0.1:20000
>use admin
#串联路由服务器与分配副本集1
>db.runCommand( { addshard : "shard1/192.168.100.67:22001,192.168.100.66:22001,192.168.100.63:22001"});
#串联路由服务器与分配副本集2
>db.runCommand( { addshard : "shard2/192.168.100.67:22002,192.168.100.66:22002,192.168.100.63:22002"});
#串联路由服务器与分配副本集3
>db.runCommand( { addshard : "shard3/192.168.100.67:22003,192.168.100.66:22003,192.168.100.63:22003"});
#指定testdb分片生效
>db.runCommand( { enablesharding :"testdb"});
#指定数据库里需要分片的集合和片键
>db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )
#查看分片服务器的配置
>use admin
>db.runCommand( { listshards : 1 } );
>exit复制
10.测试均匀分片
连接mongos服务器
/main/mongodbtest/mongodb-linux-x86_64-3.0.2/bin/mongo 127.0.0.1:20000
>use testdb;
#插入测试数据
>for (var i = 1; i <= 500000; i++) db.table1.save({id:i,"test1":"testval1"});
#查看分片情况如下
>db.table1.stats();复制
11.其他命令
移除分片:
示例:db.runCommand({"removeshard":"192.168.32.13:27020"})
db.runCommand( { removeshard: "shard2" } )
db.runCommand( { removeshard:} )
结束mongodb
想结束mongodb,可以killall mongod,或者./mongo在控制台中,use admin ,然后db.shutdownServer()来结束mongodb服务器。直接kill -9会使mongo非正常退出,可能会造成数据损坏问题。复制
到了演示最后了,不知道是否帮助到各位?
如果扥扥们有什么问题,可以文章留言。
有事留言,无事点赞,有用转发!
文章转载自运维先生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。