mongodb副本集搭建/测试

mongodb副本集介绍

  • MongoDB复制是将数据同步在多个服务器的过程。
    复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
    复制还允许您从硬件故障和服务中断中恢复数据。
  • 什么是复制
    (1)保障数据的安全性
    (2)数据高可用性(24*7)
    (3)灾难恢复
    (4)无需停机维护(如备份/重建索引/压缩)
    (5)分布式读取数据
  • MongoDB副本集(复制)原理
    mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。 mongodb各个节点常见的搭配方式为:一主一从、一主多从。主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
  • 早期版本使用master-slave,一主一从和MySQL类,但slave在此结构中为只读,当主机宕机后,从库不能自动切换为主。
  • 目前已经淘汰master-salve模式,改为副本集,这种模式下有一个主(primary)和多个从(secondary)。支持给它们设置权重,当主宕机后,权重最高的从切换为主。
  • 在此架构中还可以建立一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据
  • 在此架构中读写数据都是在主上,要想实现负载均衡的目的需要手动指定读库的目标server。
  • MongoDB复制结构图如下所示
    mongodb副本集搭建/测试_第1张图片
    以上结构图中,客户端从节点读取数据,在客户端写入数据到主节点上,主节点与从节点进行数据交互保障数据的一致性
  • 切换过程
    mongodb副本集搭建/测试_第2张图片

mongodb副本集搭建

  • 前期准备
    (1)本次搭建需要3台机器:142.148(primary)142.143/142.142(secondary)。全部安装MongoDB
    (2)编辑3台机器的配置文件/etc/mongod.conf,做如下更改或增加
    mongodb副本集搭建/测试_第3张图片
    这里前面有2个空格,后面有1个空格的距离,否则可能重启mongo服务失败
    第一行定义oplog大小
    第二行定义副本集名称
    (3)修改/etc/mongod.conf定义IP
    在这里插入图片描述
    (4)重启3台机器的mongodb服务,关闭Selinux和iptables规则
    (5)连接主(142.148),在主上运行如下命令配置副本集
    config={_id:"cyzlinux",members:[{_id:0,host:"192.168.142.148:27017"},{_id:1,host:"192.168.142.143:27017"},{_id:2,host:"192.168.142.142:27017"}]}
    mongodb副本集搭建/测试_第4张图片
    (6)初始化副本集rs.initiate(config)
    mongodb副本集搭建/测试_第5张图片
    这里返回1,说明执行成功
    (7)查看副本集状态rs.status()
    mongodb副本集搭建/测试_第6张图片

mongodb副本集测试

  • 测试
    (1)主上创建库,创建集合并插入数据
    use mydb
    db.acc.insert({AccountID:1,UserName:"123",password:"123456"})
    (2)查询所有数据库列表
    show dbs
    (3)查看当前连接在哪个数据库下面,可以直接输入db
    db
    (4)在另外2台从上进行查看,当2从执行show dbs出现如下错误,可以执行rs.slaveok()即可
    mongodb副本集搭建/测试_第7张图片
  • 副本集更改权重模拟主宕机
    (1)默认3台机器权重都为1,如果其中权重比较高的那台,会马上切换为primary角色,当原来的primary宕机后,则由权重第二的接替它成为新的primary,当原来的primary恢复后,因为它的权重最高,则新的primary会变成SECONDARY。
    (2)预设3台机器的权重148:3 /143:2/142:1,在148上执行权重的设置
    cfg = rs.conf() 查看权重,看输出的priority的值的大小
    mongodb副本集搭建/测试_第8张图片
  • (3)设置权重
    cfg.members[0].priority = 3
    cfg.members[1].priority = 2
    cfg.members[2].priority = 1
    rs.reconfig(cfg) /重新生效
    mongodb副本集搭建/测试_第9张图片
    (4)主(148)上设置iptables规则模拟主宕机,iptables -I INPUT -p tcp --dport 27017 -j DROP 这时的主不能登录mongodb,就认为它已宕机,而权重为2 的143成为新的primary
    mongodb副本集搭建/测试_第10张图片
    (5)解除148上对27017的禁用,看是否primary回到148上
    mongodb副本集搭建/测试_第11张图片

你可能感兴趣的:(mongodb副本集搭建/测试)