Chinaunix首页 | 论坛 | 博客
  • 博客访问: 141741
  • 博文数量: 34
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-27 20:04
文章分类

全部博文(34)

文章存档

2018年(1)

2017年(23)

2016年(10)

我的朋友

分类: 系统运维

2017-06-14 15:15:35

首先上图:

. 简述:

简单介绍下,mongos提供应用请求的入口,多个mongos可以防止单点挂掉故障。
config
保存所有配置信息。sharding即分片。
仲裁节点不存数据,主备节点存数据。
主节点增删改查功能,备节点不提供服务,也可以设置只读,分担主节点查询压力。(rs.slaveOk();
每套sharding的 主,备,仲裁分在3个机器上,提高冗余性能。

. 环境及步骤:

版本问题,不敢选用太高的版本,选用的是2.6.5 linux64 ,系统为 64 redhat 6.7.

端口分配:
三台机器IP 192.168.1.84 192.168.1.89 192.168.1.90
mongos: 20000
mongod config: 21000
分片集端口: 271072701827019

具体步骤:
1. check the iptables and getenforce(selinux)
2.
在每个机器上实现主机名解析 /etc/hosts 3个节点的信息都放进去。
3.
服务器之间时间同步
4.
创建用户

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 :"shard2/192.168.1.84:27018,192.168.1.89:27018,192.168.1.90:27018"});

 

db.runCommand( { addshard :"shard3/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个库,现在给每个库创建管理员和只读账户,一会可以验证权限。创建用户:
use admin

db.createUser({user:"sa",pwd:"sa",roles:[{role:"root",db:"admin"}]});

db.createUser({user:"sa_rd",pwd:"sa_rd",roles:[{role:"read",db:"admin"}]});


use test 

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();


阅读(1883) | 评论(0) | 转发(0) |
0

上一篇:mysql5.7 MGR集群搭建

下一篇:fabric脚本

给主人留下些什么吧!~~