1、什么是主从复制?
上一篇学习文章,Redis的持久化方案保证了即使redis服务挂掉或者重启redis服务也不会导致数据丢失,因为有了持久化方案后,重启redis服务时会将硬盘上的数据恢复到内存中,但是当redis服务器的硬盘损坏时也可能会导致数据丢失,通过redis的主从复制机制,就可以避免这种单点故障。如下图:
说明:
- 主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务。
-
主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上。
- 只有一个主redis,可以有多个从redis。
-
主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求。
- 一个redis可以即是主又是从,如下图:
2、主从复制设置
由于是练习,所以我就在一台服务器上模拟进行主从复制。
第一步:复制出一台从机(复制bin目录即可):命令:cp bin/ bin2 -r
第二步:修改从机的redis.conf,为从机设置主机ip以及主机port
语法:slaveof masterip masterport
第三步:设置从机的端口号为 6380;(因为是用同一台服务器进行练习,主从ip都一样,所以就设置主从port不一样)
第四步:清除从机中的持久化文件;(这一步操作是因为我刚才复制bin文件夹时,将主机中的持久化文件一块儿复制过来了,为达到真正的主从复制效果,将其删除)
第五步:启动从机
启动之后可以看到,当前已经存在6379和6380两个端口的服务了。
第六步:启动从机客户端;
此时要注意,如果直接使用./redis-cli命令启动,则启动的还是默认的ip(127.0.0.1)和端口(6379)的客户端,我们从机端口已经改成了 6380,所以此处启动命令改为 ./redis-cli -p 6380
以上六步操作,我们的主从复制设置就已经完成了。
3、验证
主机端口:6379 从机端口:6380
我们先在主机中进行操作redis数据库,然后看从机中是否会同步主机的操作结果。
首先确定主机和从机数据库中都为空:
然后操作主机数据库,新增一条记录
接下来在从机数据库中看刚才在主机中的操作有没有同步过来。
那我们尝试在从机上进行写操作看看
失败,(error) READONLY You can't write against a read only slave. 就是说从机上不能执行写操作,只可以进行读操作。
到此,主从复制就完成了,可以得出结论:
主机数据一旦发生增删改操作,那么从机会将数据同步到从机中
从机只有读权限,没有写权限。
还有一个主从切换,等学习完后再更新吧,吃饭去吃饭去,好饿!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
redis学习另外几篇: