MongoDB集群和安全

实验步骤:

  1. 新建三个角色的mongodb,主节点27017,从节点27018,仲裁者27019
    【主要配置三个mongodb.conf,分别启动】
  2. 设置主节点,添加从节点和仲裁者
  3. 测试:主节点,在test_db数据中写入user集合,{name:“czx”}
    从节点,切换test_db数据,可以查到主节点写入的user集合及{name:“czx”}
  4. 副本集的创建

第一步:创建主节点

建立存放数据和日志的目录

#-----------myrs
#主节点
mkdir -p /mongodb/replica_sets/myrs_27017/log \ &
mkdir -p /mongodb/replica_sets/myrs_27017/data/db

新建或修改配置文件:

vi /mongodb/replica_sets/myrs_27017/mongod.conf

myrs_27017:【注意,格式跟我们yaml格式一致,】

systemLog:
  #MongoDB发送所有日志输出的目标指定为文件
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
  path: "/mongodb/replica_sets/myrs_27017/log/mongod.log"
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
  logAppend: true
storage:
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
  dbPath: "/mongodb/replica_sets/myrs_27017/data/db"
  journal:
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
    enabled: true
processManagement:
  #启用在后台运行mongos或mongod进程的守护进程模式。
  fork: true
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
  pidFilePath: "/mongodb/replica_sets/myrs_27017/log/mongod.pid"
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
  #bindIpAll: true
  #服务实例绑定的IP  注意ip必须存在否启动不了mongoDB
  bindIp: localhost,192.168.40.131
  #bindIp
  #绑定的端口
  port: 27017
replication:
  #副本集的名称
  replSetName: myrs

启动节点服务:

mongod -f /mongodb/replica_sets/myrs_27017/mongod.conf

第二步:创建副本节点

建立存放数据和日志的目录

#-----------myrs 
#副本节点
mkdir -p /mongodb/replica_sets/myrs_27018/log \ &
mkdir -p /mongodb/replica_sets/myrs_27018/data/db

新建或修改配置文件:

vi /mongodb/replica_sets/myrs_27018/mongod.conf

myrs_27018:

systemLog:
  #MongoDB发送所有日志输出的目标指定为文件
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
  path: "/mongodb/replica_sets/myrs_27018/log/mongod.log"
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
  logAppend: true
storage:
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
  dbPath: "/mongodb/replica_sets/myrs_27018/data/db"
  journal:
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
    enabled: true
processManagement:
  #启用在后台运行mongos或mongod进程的守护进程模式。
  fork: true
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
  pidFilePath: "/mongodb/replica_sets/myrs_27018/log/mongod.pid"
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
  #bindIpAll: true
  #服务实例绑定的IP  注意ip必须存在否启动不了mongoDB
  bindIp: localhost,192.168.40.131
  #bindIp
  #绑定的端口
  port: 27018
replication:
  #副本集的名称
  replSetName: myrs

启动节点服务:

mongod -f /mongodb/replica_sets/myrs_27018/mongod.conf

第三步:创建仲裁节点

建立存放数据和日志的目录

#-----------myrs 
#仲裁节点
mkdir -p /mongodb/replica_sets/myrs_27019/log \ &
mkdir -p /mongodb/replica_sets/myrs_27019/data/db

新建或修改配置文件:

vi /mongodb/replica_sets/myrs_27019/mongod.conf

myrs_27019:

systemLog:
  #MongoDB发送所有日志输出的目标指定为文件
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
  path: "/mongodb/replica_sets/myrs_27019/log/mongod.log"
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
  logAppend: true
storage:
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
  dbPath: "/mongodb/replica_sets/myrs_27019/data/db"
  journal:
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
    enabled: true
processManagement:
  #启用在后台运行mongos或mongod进程的守护进程模式。
  fork: true
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
  pidFilePath: "/mongodb/replica_sets/myrs_27019/log/mongod.pid"
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
  #bindIpAll: true
  #服务实例绑定的IP  注意ip必须存在否启动不了mongoDB
  bindIp: localhost,192.168.40.131
  #bindIp
  #绑定的端口
  port: 27019
replication:
  #副本集的名称
  replSetName: myrs

启动节点服务:

mongod -f /mongodb/replica_sets/myrs_27019/mongod.conf

第四步:初始化配置副本集和主节点
使用客户端命令连接任意一个节点,但这里尽量要连接主节点(27017节点):

mongo

连接上之后,会发现show dbs等命令用不了,必须初始化副本集才行
使用默认的配置来初始化副本集:rs.initiate()



提示:
1)“ok”的值为1,说明创建成功。
2)命令行提示符发生变化,变成了一个从节点角色,此时默认不能读写。稍等片刻,回车,变成主节点。

第五步:查看副本集的配置内容


说明:
1) "_id" : "myrs" :副本集的配置数据存储的主键值,默认就是副本集的名字
2) "members" :副本集成员数组,此时只有一个: "host" : "192.168.40.131:27017" ,该成员不是仲裁节点: "arbiterOnly" : false ,优先级(权重值): "priority" : 1,
3) "settings" :副本集的参数配置。
提示:副本集配置的查看命令,本质是查询的是 system.replset 的表中的数据


image.png

第六步:查看副本集状态


说明:
1) "set" : "myrs" :副本集的名字
2) "myState" : 1:说明状态正常
3) "members" :副本集成员数组,此时只有一个: "name" : "192.168.40.131:27017" ,该成员的 角色是 "stateStr" : "PRIMARY", 该节点是健康的: "health" : 1

第七步:添加副本从节点

在主节点添加从节点,将其他成员加入到副本集
语法:

rs.add(host, arbiterOnly)

添加27018节点


“ok”“:1说明添加成功

查看副本状态




说明: "name" : "192.168.40.131:27018" 是第二个节点的名字,其角色是 "stateStr" : "SECONDARY

第八步:添加仲裁从节点

在主节点添加从节点,将其他成员加入到副本集



查看副本集状态



  1. 副本集的数据读写操作
    目的:了解默认情况下,从节点没有读写权限(需要运行rs.slaveOk()赋予权限)
    主节点:



    从节点:





    赋予读权限(主节点负责写,从节点负责读,取消权限slaveOk(false))

    【测试】
    主节点在test_db数据库插入集合user,域name:czx。
    在从节点,切换到test_db,查看user集合,查看所有域。

仲裁者节点,不存放任何业务数据,只存放副本集配置等数据



  1. 主节点的选举原则
    MongoDB在副本集中,会自动进行主节点的选举,主节点选举的触发条件:
    1) 主节点故障
    2) 主节点网络不可达(默认心跳信息为10秒)
    3) 人工干预(rs.stepDown(600))
    一旦触发选举,就要根据一定规则来选主节点。
    选举规则是根据票数来决定谁获胜:
    票数最高,且获得了“大多数”成员的投票支持的节点获胜。 “大多数”的定义为:假设复制集内投票成员数量为N,则大多数为 N/2 + 1。例如:3个投票成员, 则大多数的值是2。当复制集内存活成员数量不足大多数时,整个复制集将无法选举出Primary, 复制集将无法提供写服务,处于只读状态。 若票数相同,且都获得了“大多数”成员的投票支持的,数据新的节点获胜。 数据的新旧是通过操作日志oplog来对比的。
    在获得票数的时候,优先级(priority)参数影响重大。 可以通过设置优先级(priority)来设置额外票数。优先级即权重,取值为0-1000,相当于可额外增加 0-1000的票数,优先级的值越大,就越可能获得多数成员的投票(votes)数。指定较高的值可使成员 更有资格成为主要成员,更低的值可使成员更不符合条件。
    默认情况下,优先级的值是1
    【了解】修改优先级
    比如,下面提升从节点的优先级:
    1)先将配置导入cfg变量
myrs:SECONDARY> cfg=rs.conf()

2)然后修改值(ID号默认从0开始):

myrs:SECONDARY> cfg.members[1].priority=2

3)重新加载配置

myrs:SECONDARY> rs.reconfig(cfg)

稍等片刻会重新开始选举。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容