创建带有权限验证的mongodb副本集集群

主要步骤:

配置安装节点

主节点注释集群与权限配置项启动

主节点裸奔情况下建立用户

启动副节点

配置集群

Mongodb副本集群有多种,本文主要是是一主多从。所以最好有三个服务器一块搭建(理想情况下)

来实现一主多从集群的搭建。虽然官方并不太推荐这种方式。

1:配置安装节点

一:下载解压mongodb的tar包至指定目录。

解压:

Tar -zxvf mongodb-…….tar.gz

为了以后更改配置方便可以把文件夹更名为:mongodb

在解压后的文件夹内创建三个文件夹:log/、conf/、data/ 。在log/下创建存放mongodb日志的文件:mongo.log:

Touch mongo.log

在data/文件夹下创建文件夹:db/。这里是存放数据的地方。
Mkdir db

在conf文件夹下创建mongodb的配置文件:mongo.conf 。由于mongodb启动需要指定很多参数,所以集合至一个配置文件内方便启动。内容如下:

#mongo.conf
dbpath=/data/db
logpath=/log/mongo.log
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=xxx.xxx.xxx.xxx
port=27017
oplogSize=10000
fork=true
noprealloc=true
#auth=true
#keyFile=/home/shujuku/mongodb/conf/keyfile

######配置说明###########
dbpath:数据存放目录
logpath:日志存放路径
directoryperdb:为每一个数据库按照数据库名建立文件夹存放
logappend:以追加的方式记录日志
replSet:replica set的名字
bind_ip:mongodb所绑定的ip地址
port:mongodb进程所使用的端口号,默认为27017
oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
fork:以后台方式运行进程
noprealloc:不预先分配存储
auth=true:是否需要认证权限,默认不开启,生产环境有风险。
keyFile:有关副本集认证权限的必要文件,即有该文件才可以进行有认证权限的副本集节点的动态管理,添加或删除,没有此文件在进行节点管理的时候会出现许多问题,最后不得不创建,踩过的坑。此文件就是一个长字符串,可以任意方式获得,键盘输入的字符串也可以,只要副本集节点的该文件一致即可。建议只使用大小写字母及数字
同时只有拥有正确密钥文件的Mongod节点才能加入副本集。
密钥文件的内容必须在6到1024个字符之间,再说一边副本集的所有成员必须是相同的。

若只是测试,则auth、keyFile配置项可以省略。

节点启动

2:启动:
三个节点的根目录下执行命令:
Nohup ./bin/mongod -f conf/mongo.conf &
-f 即—config的意思,指定配置文件启动。

在需要验证权限的情况下启动的时候,可能会出现:keyFilers0.key are
too open,就是keyfile文件太过于开放,解决方法:在conf文件夹内输入命令:
chmod 400 keyfile ,更改为该文件为只读属性。

再次启动即可。

3:主节点裸奔创建用户:

需要搭建权限验证的集群:
主节点创建用户,方便集群建立的权限验证:
选中一个节点,作为主节点,更改其配置文件的auth、keyFile、replSet注释掉(不注释掉auth、keyFile的话,新创建的副本集建立用户的时候就需要验证用户,而本来就没有用户,无法验证,这应该是一个不合理的地方另外如果不注释掉replset的话,./mongo登录数据库的时候就会显示:no master and slaveOk=false,有点烦人,所以最好注释掉,或者出现该提示时执行命令:rs.slaveOk(),其他两台带有auth、keyFile、replset配置参数。启动该三个进程。

登录主节点:
#进入mongodb/bin/
./mongo xxx.xxx.xxx.xxx:27017
此时应该可以使用 show dbs查询本地数据库,

Use admin;
db.createUser( {user:“admin”,pwd: “password”,roles: [ { role:“userAdminAnyDatabase”, db: “admin” } ]});

#创建admin用户,用户名,密码,权限,验证的数据库

######################mongodb权限说明################

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root
    //系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
  7. 内部角色:__system
    Read:允许用户读取指定数据库
    readWrite:允许用户读写指定数据库
    dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
    userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
    clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
    readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
    readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
    userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
    dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
    root:只在admin数据库中可用。超级账号,超级权限。
    #############################################################

然后可以执行:db.auth(“admin”,”password”);
返回结果为1就是创建成功。
还可以使用命令:show users 查看刚才创建的用户。
此时,建立用户就完成了。

配置集群

下一步,就是重启主节点(解开之前注释掉的三个配置项),添加副节点了。
启动进程命令和上面一样。
Nohup ./mongod -f conf/cmngo.conf &

登录主节点
cd bin
./mongo -u admin -p password xxx.xxx.xxx.xxx:27017 –authenticationDatabase admin,登录副节点相同格式,需要注意需要表明验证的数据库是哪个。

添加节点:
命令:config={_id:“testrs”,members:[{_id:0,host:“ip:27017”},{_id:1,host:“ip:27017”},{_id:2,host:“ip:27017”}]}
#上面的testrs要与配置文件一致。否则创建集群失败。
rs.initiate(config);
这里有可能mongodb版本不同,会出现:

出现Support for replication protocol version 0 was removed in MongoDB 4.0. Downgrade to MongoDB version 3.6 and upgrade your protocol version to 1 before upgrading your MongoDB version
此时需要在config里加上protocolVersion : 1就好了

即:
config={_id:“testrs”, protocolVersion : 1 members : [{_id:0,host:“ip:27017”},{_id:1,host:“ip:27017”},{_id:2,host:“ip:27017”}]}

#################################################################

此时应该会出现“ok”:1
rs.status() # 查看状态
可以看到集群各节点的state和health,health都不为零,集群搭建成功。
此时集群也有认证权限。
然后,测试数据是否可以同步,在主库插入数据,在从库查询数据。副节点可能会出现not master
and slaveOk=false.
此时在副节点执行:rs.slaveOk();即可查询数据。
此时,主节点还未开启权限认证,现在已经是副本集集群,可以把主节点手动挂掉,副节点会自动选举主节点,不影响数据的存储,然后更改mongo.conf配置项,开启权限认证,然后再启动该进程即可。副本集会自动读取已经加入节点状态,但是主副节点的关系与前主节点的启动无关。集群只会认为添加了一个新的副节点而已。
除了这种方式建立集群,还可以通过rs.add()添加集群节点。详情可见:
add方式添加节点
该文章很简洁。

此外,建立主副仲裁副本集,可以参考博客:

仲裁集群搭建

很详细。很受用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值