04.mongodb集群

-----集群和安全----
1.副本集(相当于一台机器挂掉,另外一台来代替)

与主从复制的区别:副本集没有固定的主节点,副本集总有一个活跃点
(主,primary可读写)和一个或多个从节点secondary(备份,读或选举)

2.副本集的三种角色

1.primary主要成员 可读写
2.replicate 副本成员 可读,选举
3.arbiter 仲裁者 不存放任何业务数据(只负责选举主节点) rs.slaveOk() 也没有用

3.副本集的搭建

   #建立三个文件夹放配置文件和log文件
   #联系3个节点起来
   #登录主节点
    mongo --host=xxxx.xxx.xxx.xxx --port=27017
    #初始化副本集用默认的配置
    rs.initiate()
   #查看节点运行状态
    #添加副本从节点,公网ip
     rs.add("180.76.159.126:27018")
    #添加仲裁节点
     rs.addArb("180.76.159.126:27019")
    #查看主节点获取数据的状态
    db.comment.find();
    #从节点,不能使用show dbs;
    #切换到从节点,让从节点承认是从节点,才可以看
     rs.slaveOk() //默认true
     #返回主节点查看
     db.comment.find();
   #可以到从节点查看,取消从节点
     rs.slaveOk(false);
  1. 主节点选举原则
   什么时候选举?
         1.主节点故障
         2.主节点网络不可达(心跳10)
         3.人工干预 res.stepDown(600)
怎么选举?
      1. 全部成员/2+1,大多数节点支持(没有节点,[除了自己投自己]就不满足)
      2.票数相同,新的节点胜,通过oplog找到数据是新的节点的数据新旧
      3.优先级大priority可以(可以设置额外票数)
         默认 仲裁节点优先级为0  主节点1 从节点1

4.故障测试

   #杀掉子节点,对操作没有问题
   ps -ef | grep mongo
    kill -2  4045#第二个参数
    #主节点插入数据,副本节点挂,重启 会自动同步数据到子节点
    #杀掉主节点27017,27018会成为主节点
    #仲裁节点和主节点故障,副本节点还是副本节点
    #成员恢复数量,又自动选举
   #仲裁节点和副本节点都没有了,主节点自动降级为副本节点

5.springdata连接副本集,改ip

   var config=rs.config();
           config.members[0].host="xxid:27017";
           rs.reconfig(config);
         //工具修改副本名,也可以通过选择主节点和副本节点
       //改配置文件,通过uri
     uri:  mongodb://xxid:port,xxid:port,xxid:port/articledb?connect=replicaSet&slaveOk=true&replicaSet=myrs

6.分片集群(把数据拆分到不同服务器的方法,可以让几台小服务器有一台大服务器的效果)shareded cluster 副本集的再备份一个服务器
拓展系统性能的方式:垂直拓展(就是加一台服务器的性能内存带宽,直接加,性能有上限),水平拓展(多台服务器联合,无上限)
组件

     1.分片(副本集)
    2.mongos路由,调用寻找分片的接口,返回所有数据
    3.config servers 去寻找分片
       如图mongo1

请添加图片描述

7.搭建副本集 sharding分片角色
//清除之前创建的monogo服务
//全部要自己搭建起来,是局域网ip和副本集的集群名不同
//配置文件的副本集 clusterRole:configsvr

//主节点mongos加入分片,通过配置文件加入配置节点
//不能插入数据,需要添加和开启分片
 sh.addShard("myshardrs02/xxxip:xxport,xxip:xxport,xxip:xxport")
sh.enableSharding("articledb")#库名
//对库名.集合开启集合分片,根据自动生成的hash值范围分片(不同的片放在不同的地方)
sh.shardCollection("article.comment",{"nickname":"hashed"})

8.分片策略 哈希(平均分布,不确定范围)和范围(插入数据的时候,再分范围,确定范围用)策略

 sh.shardCollection("article.author",{"age":1})
#看分片策略,就看不同客户端的查看数据
 use articledb
 #循环插入1000条数据,js语法,会平均分配
 for(var i=1; i<=1000;i++){db.comment.insert({_id:i+"",nickname:"xxx"+i})}
 show collections
 db.comment.count()
 show dbs
 use articledb
 db.comment.count()
 #为了查看效果,默认会存在chunk块64m,我们设置成1m
   use config
   db.settings.save({_id:"chunksize",value:1})
 #author保存2万条数据

 #下一页
  it    

9.再增加一个路由节点(云服务器ip必须是公网才能启动)

10.springData连接
//还是一样

   spring:
       mongodb:
          #连接哪个数据库
           uri:  mongodb:mongsip:port,ip:port/articledb  

11.安全认证,类比mysql就是登录了有什么权限

   0.启用访问控制才能进行读写操作
   1.角色(默认的角色已经够用了)还有很多
        内置的角色: 常用的  read只读 readWrite可以读写 userAdmin可以创建数据库和修改用户
                            root 超级管理员,所有权限
   2.权限
         
   3.使用
        1.单机服务使用
          //使用管理员才能管理,和mysql一样
             use admin
         //创建超管用户 
          db.createUser({user:"myroot",pwd:"123456",roles:["root"]})
        //专门管理myadmin用户,指定操作的数据库是admin数据库
          db.createUser({user:"myadmin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
       //查看创建了哪些用户
         db.system.users.find()
      //删除用户
      db.dropUser("myadmin")  
      //修改用户密码
      db.changeUserPassword("myroot","12345")  
    
       //必须切换admin 才能测试 用户登录
          use admin  #可以不用切换数据库验证
          db.auth("myroot","12345")  
        
        // (常用)使用普通用户 只读和修改某个数据库,!!!必须切换admin登录超级管理员账号后,切换那个数据库才能添加 这个用户否则验证失败!!!
          use articledb
         // !!! db的名字 与切换的数据库名要一致
          db.createUser({user:"aaa",pwd:"123456",roles:[{role:"readWrite",db:"articledb"}]})
          #登录aaa用户
          db.auth("aaa","123456")

12.在服务端开启了认证,客户端登录(经常使用)
#需要修改配置文件 mongod.conf

   mongod --config ../config/mongod.conf
  security:
      authorization: enabled
#虽然进得去但是操作不了
#我们登录
   db.auth("myroot","123456")
   show collections
   exit
#使用普通用户,必须切换数据库再验证
  db.auth("aaa","12345")

13.springData 连接mongodb的两种方法

 1. 加上 
 2.uri方式 用户名+密码
     uri:mongodb://aaa:12345@ip:27017/article

14.集群安全认证 需要key文件加密(集群中key文件都相同)

  1.副本集 全部启动起来
  2.登录主节点
  3.创建myroot账户
  4.生成key文件
       #生成90位的加密文件
        openssl rand -base64 90  -out ./mongo.keyfile
        #只对当前用户可读,比较安全 421执行
        chmod 400 ./mongo.keyfile
       #复制到每个节点的目录与conf文件一起
   4.全部集群配置文件 把权限打开
           security:
                   keyFile: /xxxx/mogo.keyfile   
                   authorization: enabled
          #在主节点有账户,从节点也有这个账户

15.分片集群 每个节点都需要keyfile,先放文件后创建用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值