Mongodb 3节点 Rep set +sharding 配置
2016-07-25 18:37
786 查看
首先上图:
一. 简述:
简单介绍下,mongos提供应用请求的入口,多个mongos可以防止单点挂掉故障。
config保存所有配置信息。sharding即分片。
仲裁节点不存数据,主备节点存数据。
主节点增删改查功能,备节点不提供服务,也可以设置只读,分担主节点查询压力。(rs.slaveOk();)
每套sharding的 主,备,仲裁分在3个机器上,提高冗余性能。
二. 环境及步骤:
因mongodb版本问题,不敢选用太高的版本,选用的是2.6.5 linux64 ,系统为linux 64 redhat 6.7.
端口分配:
三台机器IP : 192.16
4000
8.1.84, 192.168.1.89, 192.168.1.90
mongos: 20000
mongod config: 21000
分片集端口: 27107,27018,27019
具体步骤:
1. check the iptables and getenforce(selinux)
2. 在每个机器上实现主机名解析 /etc/hosts 把3个节点的信息都放进去。
3. 服务器之间时间同步
4. 创建mongodb用户
5.补齐目录(mongos,config,sharding)
6.解压包并创建软连接
7.设置mongodb环境变量
8.启动配置服务器
9.启动mongos服务器
10.配置分片集:
11.定义副本集:
12.串联副本集:
登录mongos的端口进行串联
13.查看分片情况:
14.开启分片:
开启数据库分片:
开启数据库某个具体表分片:
15.加入密码验证 keyfile文件
假设现在有 admin和 test2个库,现在给每个库创建管理员和只读账户,一会可以验证权限。创建用户:
之后关闭数据库及mongod服务:
kill all mongos && kill all mongod
创建keyfile,并把keyfile拷贝到各个目录:
一. 简述:
简单介绍下,mongos提供应用请求的入口,多个mongos可以防止单点挂掉故障。
config保存所有配置信息。sharding即分片。
仲裁节点不存数据,主备节点存数据。
主节点增删改查功能,备节点不提供服务,也可以设置只读,分担主节点查询压力。(rs.slaveOk();)
每套sharding的 主,备,仲裁分在3个机器上,提高冗余性能。
二. 环境及步骤:
因mongodb版本问题,不敢选用太高的版本,选用的是2.6.5 linux64 ,系统为linux 64 redhat 6.7.
端口分配:
三台机器IP : 192.16
4000
8.1.84, 192.168.1.89, 192.168.1.90
mongos: 20000
mongod config: 21000
分片集端口: 27107,27018,27019
具体步骤:
1. check the iptables and getenforce(selinux)
2. 在每个机器上实现主机名解析 /etc/hosts 把3个节点的信息都放进去。
3. 服务器之间时间同步
4. 创建mongodb用户
groupadd -g 20001 mongodb useradd -u 20001 -g mongodb mongodb
5.补齐目录(mongos,config,sharding)
cd /data mkdir /data/mongodb cd mongodb mkdir mongos mkdir mongos/log mkdir config mkdir config/{data,log} mkdir shard1 mkdir shard2 mkdir shard3 mkdir shard1/{data,log} mkdir shard2/{data,log} mkdir shard3/{data,log} chown mongodb:mongodb /data/mongodb -R
6.解压包并创建软连接
tar xfvz mongodb-linux-x86_64-2.6.5.tgz -C /usr/local/ cd /usr/local mv mongodb-linux-x86_64-2.6.5/ mongodb/ ln -sv /usr/local/mongodb/ mongodb
7.设置mongodb环境变量
su - mongodb vi ~/.bash_profile export MONGODB_HOME=/usr/local/mongodb PATH=$PATH:$MONGODB_HOME/bin export PATH
8.启动配置服务器
mongod --configsvr --dbpath /data/mongodb/config/data --port 21000 --logpath /data/mongodb/config/log/config.log --fork
9.启动mongos服务器
mongos --configdb 192.168.1.84:21000,192.168.1.89:21000,192.168.1.90:21000 --port 20000 --logpath /data/mongodb/mongos/log/mongos.log --fork
10.配置分片集:
mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/mongodb/shard1/data --logpath /data/mongodb/shard1/log/shard1.log --fork --journal --logappend --syncdelay 30 --rest mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data/mongodb/shard2/data --logpath /data/mongodb/shard2/log/shard2.log --fork --journal --logappend --syncdelay 30 --rest mongod --shardsvr --replSet shard3 --port 27019 --dbpath /data/mongodb/shard3/data --logpath /data/mongodb/shard3/log/shard3.log --fork --journal --logappend --syncdelay 30 --rest
11.定义副本集:
192.168.1.84: mongo 192.168.1.84:27017/admin > config = {_id:"shard1",members:[ ... {_id:0,host:"192.168.1.84:27017",priority:1}, ... {_id:1,host:"192.168.1.89:27017",priority:2}, ... {_id:2,host:"192.168.1.90:27017",arbiterOnly:true} ... ]} > rs.initiate(config); 192.168.1.89: > config = {_id:"shard2",members:[ ... {_id:0,host:"192.168.1.84:27018",arbiterOnly:true}, ... {_id:1,host:"192.168.1.89:27018",priority:1}, ... {_id:2,host:"192.168.1.90:27018",priority:2} ... ]} > rs.initiate(config); 192.168.1.90 > config = {_id:"shard3",members:[ ... {_id:0,host:"192.168.1.84:27019",priority:2}, ... {_id:1,host:"192.168.1.89:27019",arbiterOnly:true}, ... {_id:2,host:"192.168.1.90:27019",priority:1} ... ]} rs.initiate(config);
12.串联副本集:
登录mongos的端口进行串联
mongo 192.168.1.84:20000/admin db.runCommand( { addshard :"shard1/192.168.1.84:27017,192.168.1.89:27017,192.168.1.90:27017"}); db.runCommand( { addshard :"shard1/192.168.1.84:27018,192.168.1.89:27018,192.168.1.90:27018"}); db.runCommand( { addshard :"shard1/192.168.1.84:27019,192.168.1.89:27019,192.168.1.90:27019"});
13.查看分片情况:
mongo 192.168.1.84:20000/admin db.runCommand({listshards : 1 });
14.开启分片:
开启数据库分片:
db.runCommand({enablesharding:"test"});
开启数据库某个具体表分片:
db.runCommand({shardcollection:"test.mtable1",key:{id:1}});
15.加入密码验证 keyfile文件
假设现在有 admin和 test2个库,现在给每个库创建管理员和只读账户,一会可以验证权限。创建用户:
db.createUser({user:"sa",pwd:"sa",roles:[{role:"root",db:"admin"}]}); db.createUser({user:"sa_rd",pwd:"sa_rd",roles:[{role:"read",db:"admin"}]}); db.createUser({user:"tadmin",pwd:"tadmin",roles:[{role:"dbOwner",db:"test"}]}); db.createUser({user:"t_rd",pwd:"t_rd",roles:[{role:"read",db:"test"}]});
之后关闭数据库及mongod服务:
kill all mongos && kill all mongod
创建keyfile,并把keyfile拷贝到各个目录:
[root@test~]# openssl rand -base64 753 >keyfile [root@test~]# chmod 600 keyfile [root@test~]# cat keyfile rsync -av keyfile /data/mongodb/config/data/ rsync -av keyfile /data/mongodb/mongos/ rsync -av keyfile /data/mongodb/shard1/data/ rsync -av keyfile /data/mongodb/shard2/data/ rsync -av keyfile /data/mongodb/shard3/data/ chown mongodb:mongodb /data/mongodb/ -R
16.以keyfile文件重启服务:
每个节点上都要跑:
开启配置服务mongod --configsvr --dbpath /data/mongodb/config/data --port 21000 --logpath /data/mongodb/config/log/config.log --fork --keyFile /data/mongodb/config/data/keyfile
开启mongos服务:mongos --configdb 192.168.1.84:21000,192.168.1.89:21000,192.168.1.90:21000 --port 20000 --logpath /data/mongodb/mongos/log/mongos.log --fork --keyFile /data/mongodb/config/data/keyfile
配置分片加keyfile:mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/mongodb/shard1/data --logpath /data/mongodb/shard1/log/shard1.log --fork --journal --logappend --syncdelay 30 --rest --keyFile /data/mongodb/shard1/data/keyfile mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data/mongodb/shard2/data --logpath /data/mongodb/shard2/log/shard2.log --fork --journal --logappend --syncdelay 30 --rest --keyFile /data/mongodb/shard2/data/keyfile mongod --shardsvr --replSet shard3 --port 27019 --dbpath /data/mongodb/shard3/data --logpath /data/mongodb/shard3/log/shard3.log --fork --journal --logappend --syncdelay 30 --rest --keyFile /data/mongodb/shard3/data/keyfile chmod 600 /data/mongodb/shard1/data/keyfile chmod 600 /data/mongodb/shard2/data/keyfile chmod 600 /data/mongodb/shard3/data/keyfile
17.验证权限。 用非管理员或者只读账号登录会把权限不足的错误
18.验证分片mongo 192.168.1.84:20000/test -utadmin -ptadmin for (var i = 1; i <= 100000; i++) db.mtable1.save({id:i,"test":"testval1"}); db.mtable1.stats();
参考文章:
http://www.tuicool.com/articles/b6Vzme
http://www.lanceyan.com/tech/arch/mongodb_shard1.html
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 如何在 Fedora 上安装 MongoDB 服务器
- PHP添加yaf xhprof mongodb 同理
- mongodb安装
- 如何在 Ubuntu 上安装 MongoDB
- 信息安全聚合 Sec-News 的重构之路
- Ruby on Rails框架程序连接MongoDB的教程
- perl操作MongoDB报错undefined symbol: HeUTF8解决方法
- C#中使用1.7版本驱动操作MongoDB简单例子
- 使用zabbix监控mongodb的方法
- Node.js的MongoDB驱动Mongoose基本使用教程
- MongoDB系列教程(四):设置用户访问权限
- ASP.NET MVC4使用MongoDB制作相册管理
- node.js连接mongoDB数据库 快速搭建自己的web服务
- php实现的mongodb操作类实例
- 解决mongodb在ubuntu下启动失败,提示couldn‘t remove fs lock errno:9 Bad file descriptor的错误
- 在PostgreSQL的基础上创建一个MongoDB的副本的教程
- 关于mongoose连接mongodb重复访问报错的解决办法
- java操作mongodb示例分享
- php对mongodb的扩展(初出茅庐)