部署条件
两台服务器A,B(A与B能互相ping通)
mongo版本3.4
部署结构
1个路由mongos节点(服务器A,27018端口)
3个元配置config节点为副本集(服务器A,20000/21000/24000端口)
2个分片shard节点(服务器A和B,27050端口)
步骤说明
安装mongo
把mongo_20000.conf、mongo_21000.conf、mongo_24000.conf、mongo_27050.conf、mongo_27018.conf 5个配置文件放至A服务器/etc下,A服务器根目录下创建/sensing/cluster文件夹,把mongodb-linux-x86_64-rhel70-v3.4-latest.tgz压缩文件和install_mongo_cluster.sh、start_mongo_cluster.sh脚本放至cluster文件夹下,执行脚本
cd /sensing/cluster
sh install_mongo_cluster.sh
把服务器B中的mongo_27050.conf配置文件放到B服务器/etc下,B服务器根目录下创建/sensing/cluster文件夹,把mongodb-linux-x86_64-rhel70-v3.4-latest.tgz和install_mongo_shard.sh、start_mongo_shard.sh放至cluster文件夹下,执行脚本
cd /sensing/cluster
sh install_mongo_shard.sh
启动mongo
首先启动A服务器配置节点,执行脚本
cd /sensing/cluster
sh start_mongo_cluster.sh
成功后查看4个mongo进程是否存在,如果存在继续向下执行配置副本集:<ip要改为对应服务器ip>
cd /sensing/cluster/config/mongodb-20000/bin
./mongo --host ip --port 20000
> use admin
> var config = {_id:'config',members:[{_id:0,host:'ip:20000'},{_id:1,host:'ip:21000'},{_id:2,host:'ip:24000'}]}
> rs.initiate(config)
等待10s左右
出现”config:PRIMARY>”输入exit退出,副本集配置并启动完成。
接着配置A服务器分片节点:
cd /sensing/cluster/shard/mongodb-27050/bin
./mongo --host ip --port 27050
> use admin
> var config = {_id:'shard1',members:[{_id:0,host:'ip:27050'}]}
> rs.initiate(config)
等待10s左右,回车出现”shard1:PRIMARY>”输入exit退出,A服务器分片节点配置并启动完成。
配置B服务器分片节点,执行脚本
cd /sensing/cluster
sh start_mongo_shard.sh
使用
ps -ef | grep mongo
命令查看进程是否存在,如果存在配置B服务器分片节点:
cd /sensing/cluster/shard/mongodb-27050/bin
./mongo --host ip --port 27050
> use admin
> var config = {_id:'shard2',members:[{_id:0,host:'ip:27050'}]}
> rs.initiate(config)
等待10s左右,回车出现”shard2:PRIMARY>”输入exit退出,B服务器分片节点配置并启动完成。
最后配置A服务器路由节点:
cd /sensing/cluster/route/mongodb-27018/bin
./mongos -f /etc/mongo_27018.conf
进入路由节点
cd /sensing/cluster/route/mongodb-27018/bin
./mongo --host ip --port 27018
mongos> use admin
mongos> sh.addShard("shard1/ip:27050") [注:A服务器ip]
mongos> sh.addShard("shard2/ip:27050") [注:B服务器ip]
mongos> sh.status()
接着配置数据库和集合:
mongos> sh.enableSharding("bigdata")
mongos> sh.shardCollection("bigdata.faceCapture",{"fcap_id":"hashed"})
mongos> use bigdata
mongos> db.faceCapture.ensureIndex({ "fcap_time" : -1,"fcap_id" : -1, "fcap_dcid" : 1 })
至此不加认证的集群部署完成
集群认证
创建集群用户
进入A服务器路由节点:
cd /sensing/cluster/route/mongodb-27018/bin
./mongo --host ip --port 27018
mongos> use admin
mongos> db.createUser({user : "shenxing", pwd : "shenxing", roles : [{role : "root", db : "admin"}]})
mongos> use bigdata
mongos> db.createUser({ user:"shenxing", pwd:"shenxing",roles:[{role:"dbOwner", db:"bigdata"},{ role:"clusterAdmin", db:"admin" } ]})
上述的两个用户,需要在每个结点(每个分片结点,每个路由结点)上都要创建
开启集群认证
首先关闭mongo进程,关闭顺序为路由节点 -> 配置节点 -> 分片节点的顺序,依次关闭各节点的进程
kill -9 进程号
把密钥文件keyfile.dat放至A服务器和B服务器/etc文件夹各一份,执行
chmod 600 keyfile.dat
把权限设置为600;
在每个节点(路由节点,元配置节点,分片节点)的配置文件中加入keyFile的配置项
keyFile=/etc/keyfile.dat
在每个元配置节点和分片节点(即除了mongos结点)的配置文件中加入auth=true的配置项
auth=true
重启集群
执行A服务器
start_mongo_cluster.sh
执行B服务器
start_mongo_shard.sh
启动A服务器路由节点
cd /sensing/cluster/route/mongodb-27018/bin
./mongos -f /etc/mongo_27018.conf
启动完毕
验证集群的认证
进入路由节点
cd /sensing/cluster/route/mongodb-27018/bin
./mongo --host ip --port 27018
mongos> use bigdata
mongos> db.auth(“shenxing”,”shenxing”)
验证认证完毕
配置文件请下载本人资源《mongo集群 -说明文档》