数据库文件位置
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面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录
推荐链接
发表评论