#环境交代:
系统:虚拟机centos6.5
mongo版本:mongodb-linux-x86_64-rhel62-3.6.2.tgz
下载地址:链接:https://pan.baidu.com/s/1bQQ_61imOwO26DQhp3p7aA
提取码:6v8q
集群节点:192.168.52.11,192.168.52.12,192.168.52.13
分片:192.168.52.11:27001,192.168.52.12:27001,192.168.52.13:27001
配置服务:192.168.52.11:21000,192.168.52.12:21000,192.168.52.13:21000
路由:192.168.52.11:20000,192.168.52.12:20000,192.168.52.13:20000
副本集:每个分片只有一个副本集,没有冗余备份。
#解压安装包
tar -xvf mongodb-linux-x86_64-rhel62-3.6.2.tgz
mv mongodb-linux-x86_64-rhel62-3.6.2.tgz /data/mongodb
#创建相关目录
以下两个目录每个节点都需要:
mkdir -p /data/mongodb/configSvr/{log,data,conf}
mkdir -p /data/mongodb/mongos/{log,data,conf}
#创建空白log文件
touch -f /data/mongodb/configSvr/log/conf.log
touch -f /data/mongodb/mongos/log/mongos.log
以下几个目录分别创建在各节点:
节点1建目录
mkdir -p /data/mongodb/shard1/{log,data,conf}
touch -f /data/mongodb/shard1/log/shard.log
节点2建目录
mkdir -p /data/mongodb/shard2/{log,data,conf}
touch -f /data/mongodb/shard2/log/shard.log
节点3建目录
mkdir -p /data/mongodb/shard3/{log,data,conf}
touch -f /data/mongodb/shard3/log/shard.log
#创建认证文件,然后拷贝到各节点的/data/mongodb/目录,设置权限600(注意:各个节点使用的是同一份认证文件!)
openssl rand -base64 745 > /data/mongodb/keyfile
想办法将认证文件复制到各个节点上。
设置每个节点认证文件的权限
chmod 600 /data/mongodb/keyfile
----------------------------------------------------------------配置服务
--所有节点配置服务器配置文件(keyFile配置先注释掉,不然要设计认证比较麻烦)
cat > /data/mongodb/configSvr/conf/conf.conf <<EOF
dbpath = /data/mongodb/configSvr/data/
logpath = /data/mongodb/configSvr/log/conf.log
logappend = true
bind_ip = 0.0.0.0
port = 21000
fork = true
#declare this is a config db of a cluster;
configsvr = true
replSet = configs
maxConns = 100
#keyFile = /data/mongodb/keyfile
EOF
--启动所有节点配置服务
cd /data/mongodb/bin/
./mongod -f /data/mongodb/configSvr/conf/conf.conf
--登陆任意一台配置服务
cd /data/mongodb/bin/
./mongo 192.168.52.11:21000
--初始化副本集
use admin
rs.initiate({_id : "configs",members : [{_id : 0, host : "192.168.52.11:21000" },{_id : 1, host : "192.168.52.12:21000" },{_id : 2, host : "192.168.52.13:21000" }]})
--查看初始化副本集是否初始化成功
rs.status()
----------------------------------------------------------------分片1
--分片1配置文件
cat > /data/mongodb/shard1/conf/shard.conf <<EOF
dbpath = /data/mongodb/shard1/data/
logpath = /data/mongodb/shard1/log/shard.log
logappend = true
bind_ip = 0.0.0.0
port = 27001
fork = true
replSet = shard1
#declare this is a shard db of a cluster;
shardsvr = true
maxConns = 100
#keyFile = /data/mongodb/keyfile
EOF
cd /data/mongodb/bin/
./mongod -f /data/mongodb/shard1/conf/shard.conf
cd /data/mongodb/bin/
./mongo --port 27001
use admin
rs.initiate({_id : "shard1",members : [{_id : 0, host : "192.168.52.11:27001" }]});
rs.status()
----------------------------------------------------------------分片2
cat > /data/mongodb/shard2/conf/shard.conf <<EOF
dbpath = /data/mongodb/shard2/data/
logpath = /data/mongodb/shard2/log/shard.log
logappend = true
bind_ip = 0.0.0.0
port = 27001
fork = true
replSet = shard2
#declare this is a shard db of a cluster;
shardsvr = true
maxConns = 100
#keyFile=/data/mongodb/keyfile
EOF
cd /data/mongodb/bin/
./mongod -f /data/mongodb/shard2/conf/shard.conf
cd /data/mongodb/bin/
./mongo --port 27001
use admin
rs.initiate({_id : "shard2",members : [{_id : 0, host : "192.168.52.12:27001" }]});
rs.status()
----------------------------------------------------------------分片3
cat > /data/mongodb/shard3/conf/shard.conf <<EOF
dbpath = /data/mongodb/shard3/data/
logpath = /data/mongodb/shard3/log/shard.log
logappend = true
bind_ip = 0.0.0.0
port = 27001
fork = true
replSet = shard3
#declare this is a shard db of a cluster;
shardsvr = true
maxConns = 100
#keyFile = /data/mongodb/keyfile
EOF
cd /data/mongodb/bin/
./mongod -f /data/mongodb/shard3/conf/shard.conf
cd /data/mongodb/bin/
./mongo --port 27001
use admin
rs.initiate({_id : "shard3",members : [{_id : 0, host : "192.168.52.13:27001" }]})
rs.status()
---------------------------------------------------------------- 路由
cat > /data/mongodb/mongos/conf/mongos.conf <<EOF
logpath = /data/mongodb/mongos/log/mongos.log
logappend = true
bind_ip = 0.0.0.0
port = 20000
fork = true
configdb = configs/192.168.52.11:21000,192.168.52.12:21000,192.168.52.13:21000
maxConns = 100
#keyFile = /data/mongodb/keyfile
EOF
cd /data/mongodb/bin/
./mongos -f /data/mongodb/mongos/conf/mongos.conf
---------------------------------------------------------------- 创建用户(创建用户一定是在路由上创建)
cd /data/mongodb/bin
./mongo --port 20000
use admin
db.createUser({user:"root",pwd:"root",roles:[{role:"root",db :"admin"}]})
db.auth({user:"root",pwd:"root"})
use test
db.createUser({user:"test",pwd:"test",roles:[{role:"readWrite",db :"test"}]})
db.auth({user:"test",pwd:"test"})
---------------------------------------------------------------- 重启集群,放开认证文件
停止所有mongo服务:
killall mongos
killall mongod
放开认证文件配置
#keyFile = /data/mongodb/keyfile
按照顺序启动集群:
启动所有配置服务
启动所有分片服务
启动所有路由服务
---------------------------------------------------------------- 启用分片
cd /data/mongodb/bin
./mongo --port 20000
use admin
db.auth({user:"root",pwd:"root"})
sh.addShard("shard1/192.168.52.11:27001");
sh.addShard("shard2/192.168.52.12:27001");
sh.addShard("shard3/192.168.52.13:27001");
查看分片
sh.status()
---------------------------------------------------------------- 指定数据库和集合分片策略
use admin
db.auth({user:"root",pwd:"root"})
db.runCommand( { enablesharding :"test"});
db.runCommand( { shardcollection : "test.table1",key : {id: "hashed"} } )
---------------------------------------------------------------- 测试验证
use test
db.auth({user:"test",pwd:"test"})
for (var i = 1; i <= 10000; i++) db.table1.save({id:i,"test1":"testval1"});
db.table1.find().count()
db.table1.stats()
至此分片集群无副本环境已经搭建完成!
-------------------------------------------------------------------------------------------------------------------------------------------------------
另外,关于均衡器的问题,集群搭建完成后,均衡器默认是开启的,如果觉得用不到,或者嫌占用资源,可以停掉。
use admin
db.auth({user:"root",pwd:"root"})
use config
查看均衡器状态
sh.getBalancerState()
查看均衡器当前是否工作
sh.status()
设置均衡器状态:
开启/关闭 balancer
sh.setBalancerState(true)
sh.setBalancerState(false)
如果需要均衡器,可以考虑设置均衡器运行时间窗口。网上这方便的帖子很多,在此不作赘述。
本文可能有不少不足之处,还请路过的客官不吝赐教。^_^