复制副本集
什么是复制
- 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性
- 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制
- 数据备份
- 数据灾难恢复
- 读写分离
- 高(24* 7)数据可用性
- 无宕机维护
- 副本集对应用程序是透明
复制的工作原理
- 复制至少需要两个节点A、B...
- A是主节点,负责处理客户端请求
- 其余的都是从节点,负责复制主节点上的数据
- 节点常见的搭配方式为:一主一从、一主多从
- 主节点记录在其上的所有操作,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致
- 主节点与从节点进行数据交互保障数据的一致性
- 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库,读写分离的目的是为了实现高并发场景下的请求分流,避免对数据库的访问过于集中,导致性能下降甚至是宕机。
直接使用主从复制局限
(1)主从复制在master宕机后,没有自动选举master机制,导致主节点服务一挂,便不能对外提供增删改操作。
(2)所有增删改操作都是针对主节点进行操作,可能导致主节点性能下降。
(3)从节点对主节点的数据都是全量拷贝,对主从节点的压力都是不小的。
复制的特点
- N 个节点的集群
- 任何节点可作为主节点
- 所有写入操作都在主节点上
- 自动故障转移
- 自动恢复
设置复制节点
接下来的操作需要打开多个终端窗口,而且可能会连接多台ubuntu主机,会显得有些乱.
step1:创建数据库目录test1、test2
在Desktop目录下演示,其它目录也可以,注意权限即可
- 首先使用ifconfig命令查看自己的IP地址这是我Ubuntu上的iP地址:192.168.1.118
- 先打开一个终端(作为主服务器) 使用service mongodb start 开启mongo
使用mongod —help 可以分析查看我们mongod 的一些命令 使用如下格式启动mongod,注意replSet的名称是一致的
4C82F74A-0ACF-41C2-B180-EE72BA726FEB CB4BE4C8-66EF-47F9-9A7D-32618230770Dmongod --bind_ip 192.168.1.118 --port 27018 --dbpath ~/桌面/test1 --replSet rs0
这里我们可以看到启动成功处于等待状态 这时候我们进入test1文件夹会看到一些文件,而没有操作的test2里面没有文件
- 打开另一个终端(从服务器) 使用service mongodb start 开启mongo
使用mongod —help 可以分析查看我们mongod 的一些命令
使用如下格式启动mongod,注意replSet的名称是一致的
mongod --bind_ip 192.168.1.118 --port 27019 --dbpath ~/桌面/test2 --replSet rs0
结果同上
- 打开两个终端开启两个mongo客户端分别链接刚才配置的两个服务 连接主服务器
一个连接:mongo --host 192.168.1.118 --port 27018
另一个连接:mongo --host 192.168.1.118 --port 27019
9C92CA68-1798-4935-8A3A-C677D9B7C635- 确定主服务器:确定了谁是主服务器,就在那个上面初始化
我这里以192.168.1.118 --port 27018为主服务器
rs.initiate()
500889E8-1C73-407E-B00F-C1CB0CBEC928这时候使用show dbs就可以查看到所有的数据库了 我们采用rs.status()来查看当前状态,可以看到没有出现副本集
D9966D07-220C-4CC8-8C80-5C54EF47A4CA- 添加副本集 直接使用rs.add('192.168.1.118:27019’)来添加从服务连接 49E81292-39D7-4F6B-A0CA-13B642D95703
-
复本集添加成功后,此时我们再次采用rs.status()查看当前状态,当前状态如下:
- 以上步骤完成之后我们在从服务连接窗口读取数据操作的话需要设置rs.slaveOk()
- 检验 主服务器客户端插入数据,从服务器客户端查看数据是否备份 主服务器客户端进行数据插入:
在从服务器客户端查看数据是否同步
45A474F3-6765-4BA1-AF09-8E8F37ECCC97结束: 由结果可以看出备份成功,备份工作完成!!!!
其它说明(主从切换)
- 删除从节点 rs.remove('192.168.196.128:27018') 关闭主服务器后,再重新启动,会发现原来的从服务器变为了主服务器,新启动的服务器(原来的主服务器)变为了从服务器
- 模拟步骤 1.将主服务器、和主客户端宕掉 2.然后在使用之前的命令分别重启 3.然后仔细观察发现原来的从服务器变为了主服务器,新启动的服务器(原来的主服务器)变为了从服务器,这就是我们之前说的无宕机现象