前言
前面的章节,关于分布式缓存技术,我们分析了《分布式缓存技术之Redis的使用以及原理》、在这一节,来说说MongoDB高可用方案。
关于MongoDB,一共六小节内容,分别是:
- MongoDB的应用场景及实现原理
- MongoDB的常用命令及配置
- 手写基于MongoDB的ORM框架
- 基于MongoDB实现网络云盘实战
- MongoDB高可用
- MongoDB4.0新特性
MongoDB在4.0升级改造以后,支持事务,且对于集群策略进行优化…
笔者使用的mongodb版本是:
更多细节,就在本节与大家一起学习交流!
MongoDB用户管理
在前面的章节,细心的读者可能会注意到,在所有连接MongoDB的操作中,并没有涉及到用户名密码的权限校验,这样对于一个数据库而言怎么能行呢?接下来看看MongoDB的用户管理~
添加用户
为testdb 添加 tom 用户
use testdb
db.createUser({user:"tom",pwd:"123",roles:[{role:"dbAdmin",db:"testdb"}]})
具体角色有什么呢?通过命令查看一下:
角色 | 权限说明 |
---|---|
read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问 system.profile |
userAdmin | 允许用户向 system.users 集合写入,可以找指定数据库里创建、删除和管理用户 |
clusterAdmin | 只在 admin 数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase | 只在 admin 数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在 admin 数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在 admin 数据库中可用,赋予用户所有数据库的 userAdmin 权限 |
dbAdminAnyDatabase | 只在 admin 数据库中可用,赋予用户所有数据库的 dbAdmin 权限 |
root | 只在 admin 数据库中可用。超级账号,超级权限 |
查看所有用户
db.system.users.find()
和用户管理相关的操作基本都要在 admin 数据库下运行,要先 use admin; 如果在某个单一的数据库下,那只能对当前数据库的权限进行操作;
1.3、用户删除操作
db.system.users.remove({user:"tom"});
1.4 查看当前用户权限
db.runCommand({usersInfo:"tom",showPrivileges:true})
1.5 修改密码
use testdb
db.changeUserPassword("tom", "123456")
1.6、启用用户
db.auth("tom","123")
1.7、安全检查 --auth
非testdb 是不能操作数据库的,启用自己的用户才能访问
非admin 数据库的用户不能使用数据库命令,admin 数据库中的数据经过认证为管理员用户
MongoDB高可用方案
详解 RouteServer(路由服务器)、ConfigServer(配置服务器)、 Replica Set(副本集)、Shard(切片)、Chunk(分块)MongDB 启动与关闭
命令行启动
$ ./mongod --fork --dbpath=/data/program/mongodb/data
配置文件启动
$ ./mongod -f mongodb.cfg
mongoDB 基本配置/data/program/mongodb.cfg
dbpath=/data/program/mongodb/data
logpath=/data/program/mongodb/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.200.111
port=27017
环境变量配置
export PATH=/data/program/mongodb/bin:$PATH
Mongodb 的三种集群方式的搭建:Master-Slaver/Replica Set / Sharding。
MongoDB主从搭建
这个是最简答的集群搭建,不过准确说也不能算是集群,只能说是主备。并且官方已经不推荐这种方式,所以在这里只是简单的介绍下吧,搭建方式也相对简单。
首先准备三台机器,安装好mongodb并配置好环境变量:
linux1:192.168.200.111 (mongodb:27017)- master
linux2:192.168.200.112 (mongodb:27017)- slave
linux3:192.168.200.113 (mongodb:27017)- slave
然后创建data与log文件夹,存放启动日志
主机配置
新增master配置文件
/data/program/mongodb/master-slave/master/mongodb.cfg
# 数据存储路径
dbpath=/data/program/mongodb/master-slave/master/data
# 日志存储路径
logpath=/data/program/mongodb/master-slave/master/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.200.111
port=27001
master=true
source=192.168.200.111:27002
从机配置
这里linux2与linux3的配置相同
同样地,新增slave配置文件
/data/program/mongodb/master-slave/slave/mongodb.cfg
dbpath=/data/program/mongodb/master-slave/slave/data
logpath=/data/program/mongodb/master-slave/slave/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.200.112
port=27002
slave=true
source=192.168.200.112:27001
启动服务
cd /data/program/mongodb/master-slave/master/
mongod --config mongodb.cfg #主节点
cd /data/program/mongodb/master-slave/slave/
mongod --config mongodb.cfg #从节点
连接测试
#客户端连接主节点
mongo --host 192.168.200.111 --port 27001
#客户端从节点
mongo --host 192.168.200.112 --port 27002
mongo --host 192.168.200.113 --port 27003
基本上只要在主节点和备节点上分别执行这两条命令,Master-Slaver 就算搭建完成了。我没有试过主节点挂掉后备节点是否能变成主节点,这里也不推荐了。
后记
更多架构知识,欢迎关注本套Java系列文章,地址导航:Java架构师成长之路