mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全
这个系列大致想跟大家分享以下篇章:
2、mongo 3.4分片集群系列之二:搭建分片集群--哈希分片
3、mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全
4、mongo 3.4分片集群系列之四:搭建分片集群--哈希分片 + 安全 + 区域
这一篇也是实践篇。
主要要讲两大部分:
一是在现有的,已经搭建好的哈希分片集群上,加上内部认证和用户访问控制(也就是继“mongo 3.4分片集群系列之二:搭建分片集群--哈希分片”搭建的分片集群,增加安全机制)。
二是在搭建的时候,搭建分片集群和安全一起做,也就是从无集群到有集群的过程。
这里说的安全机制,只是简单的通过密钥文件做内部认证,和用户访问控制。
一、 在现有的分片集群上,添加安全机制。
1、 创建和分发密钥文件
# cd /etc/
# sudo openssl rand –base64 755 > mongo_keyfile
# sudo chmod 400 mongo_keyfile
mongo_keyfile是我指定的密钥文件名,可以按需更改;
修改权限,一定要做,否则之后会出现很多不知名的错误。
这里要先将192.168.209.155上的mongo_keyfile文件拿到192.168.209.156上
#sudo rsync –arvz –P bear@192.168.209.155:/etc/mongo_keyfile /etc/
拷贝过来后,注意检查权限是不是400,如图

2、 配置分片集群管理用户和数据库用户(在192.168.209.155上操作)
(1) 分片集群管理用户
mongos和配置服务器的集群管理员用户是可以通用的,但是分片要创建自己的本地管理员用户。
连接到mongos
# mongo --port 6666
输入以下命令:(这里只是为了方便理解,其实命令行打成一行即可)
use admin;
db.createUser(
{
user: "admin",
pwd: "adminbear",
roles: [
{ role: "root", db: "admin" },
{ role: "clusterAdmin", db: "admin" },
{ role: "userAdmin", db: "admin" }
]
}
);
其中,user用户名和pwd密码,可按需更改。由于角色分配的时候,分配root最高权限给了admin,所以admin既是集群的最高管理员用户,又是所有数据库的最高管理员用户
(2) 数据库用户
以下是为数据库名DatabaseName,创建数据库用户。
输入以下命令:(这里只是为了方便理解,其实命令行打成一行即可)
use DatabaseName;
db.createUser(
{
user: "bear",
pwd: "bear",
roles: [
{ role: "readWrite", db: "DatabaseName" }
]
}
);
其中,user用户名和pwd密码,可按需更改。
exit;
退出当前的进程
3、 过渡每一个mongos实例来强制验证(不停机)
(1) 第一个Mongos路由 mongo_router1(在192.168.209.155上操作)
1) 新建一个配置文件
# sudo vim /etc/mongo_router1_tmp.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
net:
port: 6666
sharding:
configDB: mongo_config/192.168.209.155:6000,192.168.209.155:6001,192.168.209.155:6002
security:
transitionToAuth: true
keyFile: /etc/mongo_keyfile
如下图:

2) 关闭mongos实例
连接到mongos
# mongo --port 6666 –u admin –p adminbear --authenticationDatabase admin
use admin;
db.shutdownServer();
exit;
3) 用新的配置文件重新mongos实例
# mongos --config /etc/mongo_router1_tmp.conf &
(2) 第二个Mongos路由 mongo_router2(在192.168.209.156上操作)
1) 新建一个配置文件
# sudo vim /etc/mongo_router2_tmp.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
net:
port: 6666
sharding:
configDB: mongo_config/192.168.209.155:6000,192.168.209.155:6001,192.168.209.155:6002
security:
transitionToAuth: true
keyFile: /etc/mongo_keyfile
如下图:

2) 关闭mongos实例
连接到mongos
# mongo --port 6666 –u admin –p adminbear --authenticationDatabase admin
use admin;
db.shutdownServer();
exit;
3) 用新的配置文件重新mongos实例
# mongos --config /etc/mongo_router2_tmp.conf &
4、 过渡每一个配置服务器的副本集成员实例来强制验证(不停机)(在192.168.209.155上操作)
这里配置服务器的主节点是mongo_config1
(1) 第二个配置服务器 mongo_config2
1) 复制密钥文件到指定目录/mongo_config2/
# sudo cp /etc/mongo_keyfile /mongo_config2/
2) 新建一个配置文件
# sudo vim /mongo_config2/mongo_config2_tmp.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_config2/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_config2/log/mongo_config2.log
net:
port: 6001
sharding:
clusterRole: configsvr
replication:
replSetName: mongo_config
security:
transitionToAuth: true
keyFile: /mongo_config2/mongo_keyfile
如下图:

3) 关闭mongod实例
连接到mongod
# mongo --port 6001 –u admin –p adminbear --authenticationDatabase admin
use admin;
db.shutdownServer();
exit;
4) 用新的配置文件重新mongod实例
# mongod --fork --config /mongo_config2/mongo_config2_tmp.conf
(2) 第三个配置服务器 mongo_config3
1) 复制密钥文件到指定目录/mongo_config3/
# sudo cp /etc/mongo_keyfile /mongo_config3/
2) 新建一个配置文件
# sudo vim /mongo_config3/mongo_config3_tmp.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_config3/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_config3/log/mongo_config3.log
net:
port: 6002
sharding:
clusterRole: configsvr
replication:
replSetName: mongo_config
security:
transitionToAuth: true
keyFile: /mongo_config3/mongo_keyfile
如下图:

3) 关闭mongod实例
连接到mongod
# mongo --port 6002 –u admin –p adminbear --authenticationDatabase admin
use admin;
db.shutdownServer();
exit;
4) 用新的配置文件重新mongod实例
# mongod --fork --config /mongo_config3/mongo_config3_tmp.conf
(3) 第一个配置服务器 mongo_config1
1) 复制密钥文件到指定目录/mongo_config1/
# sudo cp /etc/mongo_keyfile /mongo_config1/
2) 新建一个配置文件
# sudo vim /mongo_config1/mongo_config1_tmp.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_config1/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_config1/log/mongo_config1.log
net:
port: 6000
sharding:
clusterRole: configsvr
replication:
replSetName: mongo_config
security:
transitionToAuth: true
keyFile: /mongo_config1/mongo_keyfile
如下图:

3) 降级主节点
连接到mongod
# mongo --port 6000 –u admin –p adminbear --authenticationDatabase admin
rs.stepDown();
4) 关闭mongod实例
use admin;
db.shutdownServer();
exit;
5) 用新的配置文件重新mongod实例
# mongod --fork --config /mongo_config1/mongo_config1_tmp.conf
5、 过渡每一个分片实例来强制验证(停机)
(1) 第一个分片 mongo_shard1(在192.168.209.155上操作)
1) 创建分片本地管理员
连接到mongod
# mongo --port 6100
输入以下命令:(这里只是为了方便理解,其实命令行打成一行即可)
use admin;
db.createUser(
{
user: "adminShard1",
pwd: "adminbear",
roles: [
{ role: "clusterAdmin", db: "admin" },
{ role: "userAdmin", db: "admin" }
]
}
);
其中,user用户名和pwd密码,可按需更改。
2) 复制密钥文件到指定目录/mongo_shard1/
# sudo cp /etc/mongo_keyfile /mongo_shard1/
3) 新建一个配置文件
# sudo vim /mongo_shard1/mongo_shard1_tmp.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_shard1/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_shard1/log/mongo_shard1.log
net:
port: 6100
sharding:
clusterRole: shardsvr
security:
transitionToAuth: true
keyFile: /mongo_shard1/mongo_keyfile
如下图:

4) 关闭mongod实例
连接到mongod
# mongo --port 6100 –u adminShard1 –p adminbear --authenticationDatabase admin
use admin;
db.shutdownServer();
exit;
5) 用新的配置文件重新mongod实例
# mongod --fork --config /mongo_shard1/mongo_shard1_tmp.conf
(2) 第二个分片 mongo_shard2(在192.168.209.156上操作)
1) 创建分片本地管理员
连接到mongod
# mongo --port 6100
输入以下命令:(这里只是为了方便理解,其实命令行打成一行即可)
use admin;
db.createUser(
{
user: "adminShard2",
pwd: "adminbear",
roles: [
{ role: "clusterAdmin", db: "admin" },
{ role: "userAdmin", db: "admin" }
]
}
);
其中,user用户名和pwd密码,可按需更改。
2) 复制密钥文件到指定目录/mongo_shard2/
# sudo cp /etc/mongo_keyfile /mongo_shard2/
3) 新建一个配置文件
# sudo vim /mongo_shard2/mongo_shard2_tmp.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_shard2/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_shard2/log/mongo_shard2.log
net:
port: 6100
sharding:
clusterRole: shardsvr
security:
transitionToAuth: true
keyFile: /mongo_shard2/mongo_keyfile
如下图:

4) 关闭mongod实例
连接到mongod
# mongo --port 6100 –u adminShard2 –p adminbear --authenticationDatabase admin
use admin;
db.shutdownServer();
exit;
5) 用新的配置文件重新mongod实例
# mongod --fork --config /mongo_shard2/mongo_shard2_tmp.conf
6、 强制每一个mongos实例来强制验证(不停机)
(1) 第一个Mongos路由 mongo_router1(在192.168.209.155上操作)
1) 新建一个配置文件
# sudo vim /etc/mongo_router1_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
net:
port: 6666
sharding:
configDB: mongo_config/192.168.209.155:6000,192.168.209.155:6001,192.168.209.155:6002
security:
keyFile: /etc/mongo_keyfile
如下图:

2) 关闭mongos实例
连接到mongos
# mongo --port 6666 –u admin –p adminbear --authenticationDatabase admin
use admin;
db.shutdownServer();
exit;
3) 用新的配置文件重新mongos实例
# mongos --config /etc/mongo_router1_secure.conf &
(2) 第二个Mongos路由 mongo_router2(在192.168.209.156上操作)
1) 新建一个配置文件
# sudo vim /etc/mongo_router2_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
net:
port: 6666
sharding:
configDB: mongo_config/192.168.209.155:6000,192.168.209.155:6001,192.168.209.155:6002
security:
keyFile: /etc/mongo_keyfile
如下图:

2) 关闭mongos实例
连接到mongos
# mongo --port 6666 –u admin –p adminbear --authenticationDatabase admin
use admin;
db.shutdownServer();
exit;
3) 用新的配置文件重新mongos实例
# mongos --config /etc/mongo_router2_secure.conf &
7、 强制每一个配置服务器的副本集成员实例来强制验证(不停机)(在192.168.209.155上操作)
这里配置服务器的主节点是mongo_config1
(1) 第二个配置服务器 mongo_config2
1) 新建一个配置文件
# sudo vim /mongo_config2/mongo_config2_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_config2/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_config2/log/mongo_config2.log
net:
port: 6001
sharding:
clusterRole: configsvr
replication:
replSetName: mongo_config
security:
keyFile: /etc/mongo_keyfile
如下图:

2) 关闭mongod实例
连接到mongod
# mongo --port 6001 –u admin –p adminbear --authenticationDatabase admin
use admin;
db.shutdownServer();
exit;
3) 用新的配置文件重新mongod实例
# mongod --fork --config /mongo_config2/mongo_config2_secure.conf
(2) 第三个配置服务器 mongo_config3
1) 新建一个配置文件
# sudo vim /mongo_config3/mongo_config3_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_config3/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_config3/log/mongo_config3.log
net:
port: 6002
sharding:
clusterRole: configsvr
replication:
replSetName: mongo_config
security:
keyFile: /etc/mongo_keyfile
如下图:

2) 关闭mongod实例
连接到mongod
# mongo --port 6002 –u admin –p adminbear --authenticationDatabase admin
use admin;
db.shutdownServer();
exit;
3) 用新的配置文件重新mongod实例
# mongod --fork --config /mongo_config3/mongo_config3_secure.conf
(3) 第一个配置服务器 mongo_config1
1) 新建一个配置文件
# sudo vim /mongo_config1/mongo_config1_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_config1/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_config1/log/mongo_config1.log
net:
port: 6000
sharding:
clusterRole: configsvr
replication:
replSetName: mongo_config
security:
keyFile: /etc/mongo_keyfile
如下图:

2) 降级主节点
连接到mongod
# mongo --port 6000 –u admin –p adminbear --authenticationDatabase admin
rs.stepDown();
3) 关闭mongod实例
use admin;
db.shutdownServer();
exit;
4) 用新的配置文件重新mongod实例
# mongod --fork --config /mongo_config1/mongo_config1_secure.conf
8、 强制每一个分片实例来强制验证(停机)
(1) 第一个分片 mongo_shard1(在192.168.209.155上操作)
1) 新建一个配置文件
# sudo vim /mongo_shard1/mongo_shard1_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_shard1/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_shard1/log/mongo_shard1.log
net:
port: 6100
sharding:
clusterRole: shardsvr
security:
keyFile: /mongo_shard1/mongo_keyfile
如下图:

2) 关闭mongod实例
连接到mongod
# mongo --port 6100 –u adminShard1 –p adminbear --authenticationDatabase admin
use admin;
db.shutdownServer();
exit;
3) 用新的配置文件重新mongod实例
# mongod --fork --config /mongo_shard1/mongo_shard1_secure.conf
(2) 第二个分片 mongo_shard2(在192.168.209.156上操作)
1) 新建一个配置文件
# sudo vim /mongo_shard2/mongo_shard2_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_shard2/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_shard2/log/mongo_shard2.log
net:
port: 6100
sharding:
clusterRole: shardsvr
security:
keyFile: /mongo_shard2/mongo_keyfile
如下图:

2) 关闭mongod实例
连接到mongod
# mongo --port 6100 –u adminShard2 –p adminbear --authenticationDatabase admin
use admin;
db.shutdownServer();
exit;
3) 用新的配置文件重新mongod实例
# mongod --fork --config /mongo_shard2/mongo_shard2_secure.conf
---------------------------------------第一部分 over ------------------------------------------------------
二、 搭建分片集群和安全机制
(大致的流程与“mongo 3.4分片集群系列之二:搭建分片集群--哈希分片”差不多,有区别的我会用红色字体标注)
1、说说分片集群的架构
这里要搭建的分片集群架构如下:
2个mongos,1个三个成员的副本集配置服务器,2个单实例的分片。图示如下:

简单介绍一下MongoDB分片集群由以下组件组成:
2、分片前注意事项
关于分片集群的一些注意点,请参阅:mongo 3.4分片集群系列之一:浅谈分片集群 ,其中第4点,分片前考虑事项。
好啦。慎重考虑完分片前考虑事项的话,接下来就进入实践吧~~~
3、搭建哈希分片集群
下面是参照官网的 https://docs.mongodb.com/manual/tutorial/deploy-sharded-cluster-ranged-sharding/
3.1、搭建前准备:
物理环境:
我这边是用两个虚拟机模仿两台服务器的(真实服务器也按照这个方法实践,可以行得通)。
IP分别为192.168.209.155和192.168.209.156。其中,这两个IP之间必须互通。即192.168.209.155可以ping通192.168.209.156,192.168.209.156也可以ping通192.168.209.155。
配置大致如下:(此操作是建立在mongo3.4版本)
|
名称 |
主机 |
端口 |
副本集 |
Data路径 |
Log路径 |
|
Router1 |
192.168.209.155 |
6666 |
|||
|
Router2 |
192.168.209.156 |
6666 |
|||
|
Config1 |
192.168.209.155 |
6000 |
mongo_config |
/mongo_config1/data |
/mongo_config1/log |
|
Config2 |
6001 |
/mongo_config2/data |
/mongo_config2/log |
||
|
Config3 |
6002 |
/mongo_config3/data |
/mongo_config3/log |
||
|
Shard1 |
192.168.209.155 |
6100 |
/mongo_shard1/data |
/mongo_shard1/log |
|
|
Shard2 |
192.168.209.156 |
6100 |
/mongo_shard2/data |
/mongo_shard2/log |
接下来就来搭建哈希分片集群咯~~~
3.2前添加、创建密钥文件,以及修改权限
# cd /etc/
# sudo openssl rand –base64 755 > mongo_keyfile
# sudo chmod 400 mongo_keyfile
mongo_keyfile是我指定的密钥文件名,可以按需更改;
修改权限,一定要做,否则之后会出现很多不知名的错误。
这里要先将192.168.209.155上的mongo_keyfile文件拿到192.168.209.156上
#sudo rsync –arvz –P bear@192.168.209.155:/etc/mongo_keyfile /etc/
拷贝过来后,注意检查权限是不是400,如图

3.2、创建配置服务器副本集
部署具有三个成员的配置服务器副本集。
(1) mongo_config1 (在192.168.209.155上操作)
1) 创建数据路径文件夹和日志路径文件夹
# sudo mkdir –p /mongo_config1/data
# sudo mkdir –p /mongo_config1/log
2) 复制密钥文件到指定目录/mongo_config1
# sudo cp /etc/mongo_keyfile /mongo_config1/
3) 创建配置文件
# sudo vim /mongo_config1/mongo_config1_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_config1/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_config1/log/mongo_config1.log
net:
port: 6000
sharding:
clusterRole: configsvr
replication:
replSetName: mongo_config
security:
keyFile: /mongo_config1/mongo_keyfile
如下图:

4) 启动mongod实例
# mongod --fork --config /mongo_config1/mongo_config1_secure.conf
--fork 是以线程方式启动mongod服务
--config 指定配置文件路径
(2) mongo_config2(在192.168.209.155上操作)
1) 创建数据路径文件夹和日志路径文件夹
# sudo mkdir –p /mongo_config2/data
# sudo mkdir –p /mongo_config2/log
2) 复制密钥文件到指定目录/mongo_config2
# sudo cp /etc/mongo_keyfile /mongo_config2/
3) 创建配置文件
# sudo vim /mongo_config2/mongo_config2_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_config2/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_config2/log/mongo_config2.log
net:
port: 6001
sharding:
clusterRole: configsvr
replication:
replSetName: mongo_config
security:
keyFile: /mongo_config2/mongo_keyfile
如下图:
4) 启动mongod实例
# mongod --fork --config /mongo_config2/mongo_config2_secure.conf
--fork 是以线程方式启动mongod服务
--config 指定配置文件路径
(3) mongo_config3 (在192.168.209.155上操作)
1) 创建数据路径文件夹和日志路径文件夹
# sudo mkdir –p /mongo_config3/data
# sudo mkdir –p /mongo_config3/log
2) 复制密钥文件到指定目录/mongo_config3
# sudo cp /etc/mongo_keyfile /mongo_config3/
3) 创建配置文件
# sudo vim /mongo_config3/mongo_config3_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_config3/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_config3/log/mongo_config3.log
net:
port: 6002
sharding:
clusterRole: configsvr
replication:
replSetName: mongo_config
security:
keyFile: /mongo_config3/mongo_keyfile
如下图:

4) 启动mongod实例
# mongod --fork --config /mongo_config3/mongo_config3_secure.conf
--fork 是以线程方式启动mongod服务
--config 指定配置文件路径
(4) 初始化副本集mongo_config(在192.168.209.155上操作)
1) 连接任意一个mongod实例
# sudo mongod --port 6000
2) 初始化副本集
输入以下命令:(这里只是为了方便理解,其实命令行打成一行即可)
rs.initiate(
{
_id: "mongo_config",
configsvr: true,
members: [
{ _id : 0, host : "192.168.209.155:6000" },
{ _id : 1, host : "192.168.209.155:6001" },
{ _id : 2, host : "192.168.209.155:6002" }
]
}
)
_id:必须匹配传递给mongod 的--replSet参数。
members:是一个数组,每个副本集成员都需要一个文档。
configsvr:必须设置true。
3.3、创建分片
(1) mongo_shard1 (在192.168.209.155上操作)
1) 复制密钥文件到指定目录/mongo_shard1
# sudo cp /etc/mongo_keyfile /mongo_shard1/
2) 为mongo_shard1创建配置文件
# sudo vim /mongo_shard1/mongo_shard1_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_shard1/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_shard1/log/mongo_shard1.log
net:
port: 6100
sharding:
clusterRole: shardsvr
security:
keyFile: /mongo_shard1/mongo_keyfile
如下图:

3) 启动mongod实例
# mongod --fork --config /mongo_shard1/mongo_shard1_secure.conf
(2) mongo_shard2(在192.168.209.156上操作)
1) 复制密钥文件到指定目录/mongo_shard2
# sudo cp /etc/mongo_keyfile /mongo_shard2/
2) 为mongo_shard2创建配置文件
# sudo vim /mongo_shard2/mongo_shard2_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
storage:
dbPath: “/mongo_shard2/data”
indexBuildRetry: false
systemLog:
destination: file
path: “/mongo_shard2/log/mongo_shard2.log
net:
port: 6101
sharding:
clusterRole: shardsvr
security:
keyFile: /mongo_shard2/mongo_keyfile
如下图:

3) 启动mongod实例
# mongod --fork --config /mongo_shard2/mongo_shard2_secure.conf
3.3、创建路由
(1) mongo_router1(在192.168.209.155上操作)
1) 为mongo_router1创建配置文件
# sudo vim /etc/mongo_router1_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
net:
port: 6666
sharding:
configDB: mongo_config/192.168.209.155:6000,192.168.209.155:6001,192.168.209.155:6002
security:
keyFile: /etc/mongo_keyfile
如下图:

2) 启动mongos实例
# mongos --config /etc/mongo_router1_secure.conf
(2) mongo_router2(在192.168.209.156上操作)
1) 为mongo_router2创建配置文件
# sudo vim /etc/mongo_router2_secure.conf
文件中的配置如下:(所有空位都是空格,不是TAB键哦,大小写是严格区分的)
net:
port: 6666
sharding:
configDB: mongo_config/192.168.209.155:6000,192.168.209.155:6001,192.168.209.155:6002
security:
keyFile: /etc/mongo_keyfile
如下图:

2) 启动mongos实例
# mongos --config /etc/mongo_router2_secure.conf
-----------以上是内部认证,以下是用户访问控制----------
内部认证:是指要加入集群的组件要有指定密钥文件才能加入集群;组件包括mongos路由,配置服务器,分片
用户访问控制:是指应用程序连接集群,要验证的用户和密码
3.4、添加分片到集群
(1) 连接任意一个mongos,这里连接mongo_router1(在192.168.209.155上操作)
# mongo --port 6666
(2) 添加分片
1) 添加第一个分片mongo_shard1
sh.addShard(“192.168.209.155:6100”);
2) 添加第二个分片mongo_shard2
sh.addShard(“192.168.209.156:6100”);
3.5前添加、创建用户
(1) 集群管理员用户
mongos和配置服务器的集群管理员用户是可以通用的,但是分片要创建自己的本地管理员用户。
1) 创建集群管理员用户(直接在3.4的窗口中运行即可)
输入以下命令:(这里只是为了方便理解,其实命令行打成一行即可)
use admin;
db.createUser(
{
user: "admin",
pwd: "adminbear",
roles: [
{ role: "root", db: "admin" },
{ role: "clusterAdmin", db: "admin" },
{ role: "userAdmin", db: "admin" }
]
}
);
其中,user用户名和pwd密码,可按需更改。由于角色分配的时候,分配root最高权限给了admin,所以admin既是集群的最高管理员用户,又是所有数据库的最高管理员用户
exit;
退出当前的进程
2) 创建第一个分片mongo_shard1管理员用户(在192.168.209.155上操作)
连接到第一个分片mongo_shard1
# mongo --port 6100
输入以下命令:(这里只是为了方便理解,其实命令行打成一行即可)
use admin;
db.createUser(
{
user: "adminShard1",
pwd: "adminbear",
roles: [
{ role: "clusterAdmin", db: "admin" },
{ role: "userAdmin", db: "admin" }
]
}
);
其中,user用户名和pwd密码,可按需更改。
exit;
退出当前的进程
3) 创建第二个分片mongo_shard2管理员用户(在192.168.209.155上操作)
连接到第二个分片mongo_shard2
# mongo --host 192.168.209.156 --port 6100
输入以下命令:(这里只是为了方便理解,其实命令行打成一行即可)
use admin;
db.createUser(
{
user: "adminShard2",
pwd: "adminbear",
roles: [
{ role: "clusterAdmin", db: "admin" },
{ role: "userAdmin", db: "admin" }
]
}
);
其中,user用户名和pwd密码,可按需更改。
exit;
退出当前的进程
(2) 数据库用户(应用程序用户)(在192.168.209.155上操作)
连接到mongos路由 mongo_router1
# mongo --port 6666 –u admin –p adminbear –authenticationDatabase admin
超级用户已经在之前创建集群管理员用户时,同时赋予权限了。这里不再述说。
以下是为数据库名DatabaseName,创建数据库用户。
输入以下命令:(这里只是为了方便理解,其实命令行打成一行即可)
use DatabaseName;
db.createUser(
{
user: "bear",
pwd: "bear",
roles: [
{ role: "readWrite", db: "DatabaseName" }
]
}
);
其中,user用户名和pwd密码,可按需更改。
3.5、为数据库启用分片(直接接着以上的窗口中运行即可)
sh.enableSharding(“databaseName”);
其中databaseName,为要分片的数据库。
3.6、使用哈希分片分片集合(直接在3.5的窗口中运行即可)
这里有两种情况,一种是空集合,另一种是有数据的集合,但对于这两种情况都建议用以下方法。
(1) 对于确定作为分片键的字段,建立哈希索引
use databaseName;
db.collectionName.createIndex(Name:”hashed”);
其中,databaseName是3.5启用的分片数据库名称;collectionName是要分片的集合;Name是作为分片键的字段。
(2) 哈希分片
sh.shardCollection(“databaseName.collectionName”,{Name:”hashed”})
其中,databaseName是3.5启用的分片数据库名称;collectionName是要分片的集合;Name是作为分片键的字段。
---------------------------------------第二部分 over ------------------------------------------------------
--------------------------------------- over -----------------------------------------------------------------
以上资料,大部分是参考官网的资料,在此表示感谢。
https://docs.mongodb.com/manual/tutorial/deploy-sharded-cluster-ranged-sharding/
mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全的更多相关文章
- Elasticsearch使用系列-Docker搭建Elasticsearch集群
Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 Elasticsearch使用系列-基本查询和聚合查询+sql插件 Elas ...
- MongoDB系列—— Window 搭建Mongodb 集群
Mongodb的集群方式的搭建有三种:Replica Set / Sharding / Master-Slaver.这里只说明最简单的集群搭建方式(Replica Set) Replica Set M ...
- MongoDB副本集配置系列五:副本集的在线迁移
MongoDB副本集的在线迁移 查看当前集群的状态: { "setName" : "gechongrepl", "setVersion" : ...
- 剖析Elasticsearch集群系列之三:近实时搜索、深层分页问题和搜索相关性权衡之道
转载:http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part03 近实时搜索 虽然Elasticsearch ...
- MongoDB系列之三(副本集配置)
今天我测试了一下MongoDB的副本集的配置. 首先从概念上说一下MongoDB副本集和主从复制的区别.其实副本集(Replica Set)是主从复制的高级形式.高级在哪里呢?主动复制实现了数据备份+ ...
- MongoDB副本集配置系列三:副本集的认证方式
1:副本集配置参考这篇博客: http://www.cnblogs.com/xiaoit/p/4478951.html 2:副本集的认证 假设有两台机器已经配置好了副本集(副本集罪一般最少3台机器,这 ...
- mongo 3.4分片集群系列之八:分片管理
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
- mongo 3.4分片集群系列之七:配置数据库管理
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
- mongo 3.4分片集群系列之六:详解配置数据库
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
随机推荐
- 【CV知识学习】early stop、regularation、fine-tuning and some other trick to be known
深度学习有不少的trick,而且这些trick有时还挺管用的,所以,了解一些trick还是必要的.上篇说的normalization.initialization就是trick的一种,下面再总结一下自 ...
- Android和MVC
Activity和Android的mvc模式 http://blog.csdn.net/dengshengjin2234/article/details/8502097 //android涉及到的 ...
- LeetCode_Mysql_Second Highest Salary
176. Second Highest Salary 1. 问题描写叙述: 写一个sql语句从 Employee 表里获取第二高位的工资. 2. 解决思路: 这道题非常easy,就当热身了.首先用ma ...
- web 开发之js---js 中的数组操作
js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^var arr = new Array();arr[0] = "aaa";arr[1] ...
- gdb 8.0.1连接qemu时,出现“Remote 'g' packet reply is too long”
1 原因 “Note that other tutorials also add a "-S" parameter so QEMU starts the kernel stoppe ...
- Python extensions for Windows
Python extensions for Windows pywin32 214 Python extensions for Windows Maintainer: Mark Hammond Hom ...
- Spring 的Bean管理的常用注解
属性注入的注解(使用注解注入的方式,可以不用提供set方法) @Value 用于注入普通类型 @Autowired 自动装配 :默认按类型进行装配 按名称注入 @Qualifier 强制使用名称注入 ...
- Robot Framework 怎样写好Test Case
1.介绍 这是一个关于如何用Robot Framework写好Test Case的高层次的指导准则 怎样实际的与系统进行交互不在此文档范围内 最重要的准则是使测试用例尽可能的让熟悉此领域的人觉得简单易 ...
- luogu 2627 修建草坪
题目大意: 一个数列,取出一些数使得它们的总和最大且没有k个连续 思路: 首先我们可以找到一个nk的dp dp方程:dp[i]=dp[i-1]+sum[i]-sum[j] (sum[j]尽量小) 然后 ...
- 再读headfirst-原则与模式摘录
原则 1.找到原则中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起 2.针对接口编程,而不是针对实现编程 3.多用组合,少用继承 4.依赖倒置原则:要依赖抽象,不要依赖具体类(不 ...