数据库文件位置

dbpath=config/config3

#日志文件位置

logpath=config/logs/config3.log

#以追加方式写入日志

logappend=true

是否以守护进程方式运行

fork = true

bind_ip=0.0.0.0

port = 17015

#表示是一个配置服务器

configsvr=true

#配置服务器副本集名称

replSet=configsvr

可以看到其实配置都是一样的,只是绑定的端口,数据文件位置,日志文件路径不一样。另外我们还需要创建好 config1、config2、config3 以及 logs 文件夹。不然指定文件启动的时候会报错的说找不到指定目录的。

2、这样我们 config 节点就配置差不多了,当然等启动之后还需要修改配置,接下来我们启动他们

./bin/mongod -f config/config-17011.conf

./bin/mongod -f config/config-17013.conf

./bin/mongod -f config/config-17015.conf

3、我们随便进入一个config 节点吧

./bin/mongo --port 17011

4、切换到 admin 库 配置节点信息如下:正式环境注意改成 config 节点的链接信息。

use admin

var cfg ={“_id”:“configsvr”,

“members”:[

{“_id”:1,“host”:“127.0.0.1:17011”},

{“_id”:2,“host”:“127.0.0.1:17013”},

{“_id”:3,“host”:“127.0.0.1:17015”}]

};

rs.initiate(cfg)

可以看到初始化完成后,会变成多个节点,我们这里的config 是一主两从。主节点是 PRIMARY .

我们可以通过来查看节点的状态。

rs.status()

这样我们的 config 集群就已经搭建好了。

配置 shard 集群

上面要求有四个分片,每个分片有四个节点,一主两从一仲裁节点。我这里就详细讲解下其中一个分片的部署吧,其他分片都是一样的。

1、首先根目录下创建 shard 目录,创建 shard1-37011.conf、shard1-37013.conf、shard1-37015.conf、shard1-37017.conf 文件。我这里还是所有的节点都在一台机器上,正式环境不说每个节点在一台机器上,最起码每个分片是在不同的机器上的。

shard1-37011.conf

数据库文件位置

dbpath=shard/shard1/shard1-37011

远程访问

bind_ip=0.0.0.0

端口

port=37011

是否以守护进程方式运行

fork=true

#日志文件位置

logpath=shard/shard1/shard1-37011.log

#指定的节点名称

replSet=shard1

表示是一个分片服务器

shardsvr=true

shard1-37013.conf

数据库文件位置

dbpath=shard/shard1/shard1-37013

远程访问

bind_ip=0.0.0.0

端口

port=37013

是否以守护进程方式运行

fork=true

#日志文件位置

logpath=shard/shard1/shard1-37013.log

#指定的节点名称

replSet=shard1

表示是一个分片服务器

shardsvr=true

可以看到同一个分片上的不同节点的配置,就数据库文件位置,端口,日志文件路径不一样,其他的都是一样的。

不同分片上的节点,指定的节点名称是不一样的。如下:

shard2-47011.conf

数据库文件位置

dbpath=shard/shard2/shard2-47011

远程访问

bind_ip=0.0.0.0

端口

port=47011

是否以守护进程方式运行

fork=true

#日志文件位置

logpath=shard/shard2/shard2-47011.log

#指定的节点名称

replSet=shard2

表示是一个分片服务器

shardsvr=true

2、其他的分片节点的配置文件都差不多,大伙照着配置就可以啦。这样我们 shard 也初步配置好了,接下来我们启动他们。每个分片的节点需要联系起来,就和上面的 config 是一样的。

./bin/mongod -f shard/shard1-37011.conf

./bin/mongod -f shard/shard1-37013.conf

./bin/mongod -f shard/shard1-37015.conf

./bin/mongod -f shard/shard1-37017.conf

./bin/mongod -f shard/shard2-47011.conf

./bin/mongod -f shard/shard2-47013.conf

./bin/mongod -f shard/shard2-47015.conf

./bin/mongod -f shard/shard2-47017.conf

./bin/mongod -f shard/shard3-57011.conf

./bin/mongod -f shard/shard3-57013.conf

./bin/mongod -f shard/shard3-57015.conf

./bin/mongod -f shard/shard3-57017.conf

./bin/mongod -f shard/shard4-58011.conf

./bin/mongod -f shard/shard4-58013.conf

./bin/mongod -f shard/shard4-58015.conf

./bin/mongod -f shard/shard4-58017.conf

我们以启动一个分片为例吧,其他的分片都是一样哒。

3、进行初始化,我们进入其中一个分片为例

./bin/mongo --port 37011

var cfg ={

“_id”:“shard1”,

“protocolVersion” : 1,

“members”:[

{“_id”:1,“host”:“127.0.0.1:37011”},

{“_id”:2,“host”:“127.0.0.1:37013”},

{“_id”:3,“host”:“127.0.0.1:37015”},

]};

rs.initiate(cfg)

4、我们还有一个37017的节点没有挂上去,是用来做仲裁节点的,我们需要到主节点上执行如下:

rs.addArb(“127.0.0.1:37017”)

我们可以通过下面命令查看节点的状态

rs.status()

可以看到我们 37017 节点的角色为ARBITER 。说明我们配置成功啦。

其他分片的配置也是一样的,这里我们就不具体操作了,就把每个分片的操作贴出来吧。

分片2:

var cfg ={

“_id”:“shard2”,

“protocolVersion” : 1,

“members”:[

{“_id”:1,“host”:“127.0.0.1:47011”},

{“_id”:2,“host”:“127.0.0.1:47013”},

{“_id”:3,“host”:“127.0.0.1:47015”},

]};

rs.initiate(cfg)

rs.addArb(“127.0.0.1:47017”)

分片3:

var cfg ={

“_id”:“shard3”,

“protocolVersion” : 1,

“members”:[

{“_id”:1,“host”:“127.0.0.1:57011”},

{“_id”:2,“host”:“127.0.0.1:57013”},

{“_id”:3,“host”:“127.0.0.1:57015”},

]};

rs.initiate(cfg)

rs.addArb(“127.0.0.1:57017”)

分片4:

var cfg ={

“_id”:“shard4”,

“protocolVersion” : 1,

“members”:[

{“_id”:1,“host”:“127.0.0.1:58011”},

{“_id”:2,“host”:“127.0.0.1:58013”},

{“_id”:3,“host”:“127.0.0.1:58015”},

]};

rs.initiate(cfg)

rs.addArb(“127.0.0.1:58017”)

好了,到此为止我们的配置集群和分片集群都搭建好啦,接下来我配置路由节点。

配置路由节点

1、配置路由节点,也差不多一样的思路,根目录下创建 route目录,然后创建 route-27017.conf

route-27017.conf 内容如下:

端口

port=27017

远程访问

bind_ip=0.0.0.0

后台启动

fork=true

日志路径

logpath=route/logs/route.log

#配置的节点信息

configdb=configsvr/127.0.0.1:17011,127.0.0.1:17013,127.0.0.1:17015

这里注意的是 configdb 配置的是我们配置节点的连接信息,如果是不同服务器记得改成对应的ip 。还又一点需要注意,上面这些依赖的目录啊,都需要我们手动创建好才行,不然到时候我们启动会报错的。

2、接下来我们启动 路由。

./bin/mongos -f route/route-27017.conf

这里需要注意的是启动 路由的命令是 mongos 。

3、启动成功后我们进入路由。

./bin/mongo --port 27017

我们进来后,可以看看初始的路由状态。

4、接下来我们需要将我们的分片集群添加到路由中。

sh.addShard(“shard1/127.0.0.1:37011,127.0.0.1:37013,127.0.0.1:37015,127.0.0.1:37017”);

sh.addShard(“shard2/127.0.0.1:47011,127.0.0.1:47013,127.0.0.1:47015,127.0.0.1:47017”);

sh.addShard(“shard3/127.0.0.1:57011,127.0.0.1:57013,127.0.0.1:57015,127.0.0.1:57017”);

sh.addShard(“shard4/127.0.0.1:58011,127.0.0.1:58013,127.0.0.1:58015,127.0.0.1:58017”);

接下来我们再看看路由的状态。发现添加了分片的信息。看是你可以发现我们的每个分片中的仲裁节点其实配路由剔除了的,因为仲裁节点不存储数据,只起到监控作用。

5、接下来,我们需要开启数据库和集合的分片。

#为数据库开启分片功能

sh.enableSharding(“test_user”)

#为指定集合开启分片功能

sh.shardCollection(“test_user.test_user_datas”,{“name”:“hashed”})

这样我们的路由的配置就基本完成啦,如果不加权限校验的话,我们现在就可以使用了,但是在正式环境,还是需要增加权限控制的,所以我们这里接下来做权限控制。

权限控制

1、创建管理员用户和普通用户。我们还是在路由节点中先创建管理员账户和我们测试的账户。

use admin

db.createUser({user:“root”,pwd:“123456”,roles:[{role:“root”,db:“admin”}]})

db.createUser({user:“zlf”,pwd:“123”,roles:[{role:“readWrite”,db:“test_user”}]})

use test_user

db.createUser({user:“test”,pwd:“123abc”,roles:[{role:“readWrite”,db:“test_user”}]})

补充用户操作:

查看全局用户

db.system.users.find().pretty()

查看当前库用户

show users

删除用户

db.dropUser(“用户名”)

修改密码

db.changeUserPassword( ‘root’ , ‘rootNew’ );

#添加角色

db.grantRolesToUser( ‘用户名’ , [{ role: ‘角色名’ , db: ‘数据库名’}])

2、创建完用户之后,需要关闭所有的节点,并增加配置。

可以看到有这么多进程,一个个的关很不方便,所以下载一个插件可以。

#安装psmisc

yum install psmisc

#安装完之后可以使用killall 命令 快速关闭多个进程

killall mongod

killall mongos

killall mongo

3、生成密钥文件 并修改权限

openssl rand -base64 756 > data/mongodb/testKeyFile.file

chmod 600 data/mongodb/keyfile/testKeyFile.file

4、配置节点集群和分片节点集群开启权限认证和秘钥文件

auth=true

keyFile=data/mongodb/testKeyFile.file

这里我们所有都配置文件中都需要加上记得。

5、路由配置增加安全认证

keyFile=data/mongodb/testKeyFile.file

6、启动所有节点。上面我们以及配置好了这些节点的配置文件,那么我们这里就来启动他们。这里我为了避免一个个的启动,这里我些了一个shell 脚本,依次启动他们,先启动 config,然后启动 shard ,最后启动路由。但是正式环境上,因为部署在不同的服务器上,估计的一个个的启动了。

在跟目录下创建一个 startup.sh 脚本,并增加可执行权限。

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

h=true

keyFile=data/mongodb/testKeyFile.file

这里我们所有都配置文件中都需要加上记得。

5、路由配置增加安全认证

keyFile=data/mongodb/testKeyFile.file

6、启动所有节点。上面我们以及配置好了这些节点的配置文件,那么我们这里就来启动他们。这里我为了避免一个个的启动,这里我些了一个shell 脚本,依次启动他们,先启动 config,然后启动 shard ,最后启动路由。但是正式环境上,因为部署在不同的服务器上,估计的一个个的启动了。

在跟目录下创建一个 startup.sh 脚本,并增加可执行权限。

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

[外链图片转存中…(img-rPXsZg0V-1714418138063)]

还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

[外链图片转存中…(img-9lztJAgZ-1714418138064)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: