-----集群和安全----
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()#查看节点运行状态#添加副本从节点,公网iprs.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.主节点故障2.主节点网络不可达(心跳10秒)3.人工干预 res.stepDown(600)
怎么选举?1. 全部成员/2+1,大多数节点支持(没有节点,[除了自己投自己]就不满足)2.票数相同,新的节点胜,通过oplog找到数据是新的节点的数据新旧3.优先级大priority可以(可以设置额外票数)默认 仲裁节点优先级为0 主节点1 从节点1
4.故障测试
#杀掉子节点,对操作没有问题ps -ef | grep mongokill -2 4045#第二个参数#主节点插入数据,副本节点挂,重启 会自动同步数据到子节点#杀掉主节点27017,27018会成为主节点#仲裁节点和主节点故障,副本节点还是副本节点#成员恢复数量,又自动选举#仲裁节点和副本节点都没有了,主节点自动降级为副本节点
5.springdata连接副本集,改ip
var config=rs.config();config.members[0].host="xxid:27017";rs.reconfig(config);//工具修改副本名,也可以通过选择主节点和副本节点//改配置文件,通过uriuri: 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 collectionsdb.comment.count()show dbsuse articledbdb.comment.count()#为了查看效果,默认会存在chunk块64m,我们设置成1muse configdb.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 collectionsexit
#使用普通用户,必须切换数据库再验证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#只对当前用户可读,比较安全 4读 2写 1执行chmod 400 ./mongo.keyfile#复制到每个节点的目录与conf文件一起4.全部集群配置文件 把权限打开security:keyFile: /xxxx/mogo.keyfile authorization: enabled#在主节点有账户,从节点也有这个账户
15.分片集群 每个节点都需要keyfile,先放文件后创建用户
上一篇: 大班语言诗歌小雨点教案