Redis搭建(二):主从复制
一、引言
Redis有三种集群模式:
- 第一个就是主从模式
- 第二种“哨兵”模式,在Redis 2.6版本开始提供,2.8版本稳定
- 第三种是Cluster集群模式,在Redis 3.x以后的版本才增加进来的
二、主从介绍:
1. 工作原理:
- Slave启动并连接到Master之后,它将主动发送一个SYNC命令。Master收到同步命令后将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。
- Slave在接收到数据库文件数据之后将其存盘并加载到内存中。
- 此后,Master主节点继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。
- 如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。
2. 特点:
- 同一个Master可以同步多个Slaves。
- Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结构。
- Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
- Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。
- 为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成。即便如此,系统的伸缩性还是得到了很大的提高。
- Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作。
- 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
3. 缺点:
- master宕机,需手动修改配置、切换主从。
- Redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦。
- Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。
三、配置步骤:
1. 部署环境
- 一个master,两个slave,master不需要修改
- 复制两份slave配置文件,redis6380.conf和redis6380.conf,master使用redis.conf
2. 统一配置
daemonize yes //以后台模式运行
appendonly yes //默认值是No,意思是不使用AOF增量持久化的方式,使用RDB全量持久化的方式。把No值改成Yes,使用AOF增量持久化的方式
3. slave的配置
- 修改pid和端口号,与文件名对应
- 如果设置了密码,就要设置:masterauth <master-password>
- 配置slaveof,指定master地址
4. 启动所有Redis
redis-server redis.conf
redis-server redis6380.conf
redis-server redis6381.conf
四、测试
1. 连接master,设置key
2. 查看集群信息,使用info replication命令
3. 连接slave,查看key信息,并测试写功能