一、引言
Redis有三种集群模式,第一个就是主从模式,第二种“哨兵”模式,第三种是Cluster集群模式,第三种的集群模式是在Redis 3.x以后的版本才增加进来的,我们今天就来说一下Redis第一种集群模式:主从集群模式。
二、配置说明
实现主从复制(Master-Slave Replication)的工作原理:Slave从节点服务启动并连接到Master之后,它将主动发送一个SYNC命令。Master服务主节点收到同步命令后将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave从节点服务在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master主节点继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。
如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行
主从复制配置:
第一步:修改从节点的配置文件:slaveof <masterip> <masterport>
第二步:如果设置了密码,就要设置:masterauth <master-password>
主从复制的配置很简单,主要操作从节点的配置文件,主节点不需要任何改动。我们可以使用info查看role角色即可知道是主服务或从服务。
版本特点:测试版本为redis-5.0.5
REPLICATION,主从模式的配置。注意,之前版本的redis,配置为slave of,现在改为REPLICATION。
主从模式,可以是树状的,从服务属于多台主服务,且从服务也可以有从服务。
主从模式,可实现读写分离;高可用模式下,主服务出现问题,也可以通过哨兵切换从服务为主服务;
可实现主服务不用数据持久化,从服务进行持久化工作,减轻主服务负担等等。
- replicaof <masterip> <masterport>:配置主服务的ip和端口。配置之后,就是这台机器的小弟了。主服务也能知道谁是他的小弟。
- masterauth <master-password>:如果主服务需要密码认证,这里需要配置从服务连接主服务的密码。
- replica-read-only:默认为yes,配置从服务默认为只读模式。
三、主从模式的配置
1.redis主从
1)创建主从目录
/usr/software/redis/redis-ms/
mkdir 7001
mkdir 7002
mkdir 7003
2)复制redis.conf到主从目录
cp /usr/software/redis/redis.conf /usr/software/redis/redis-ms/7001
cp/usr/software/redis/redis.conf /usr/software/redis/redis-ms/7002
cp /usr/software/redis/redis.conf /usr/software/redis/redis-ms/7003
3)修改主./7001/redis.conf
vim ./7001/redis.conf
#修改如下key的值
bind 0.0.0.0#任意ip都可以连接
protected-mode no#关闭保护,允许非本地连接
port 7001#端口号
daemonize yes#后台运行
pidfile /var/run/redis_7001.pid#进程守护文件,就是存放该进程号相关信息的地方
dir /usr/software/redis/redis-ms/7001/data//#db等相关目录位置
logfile "/usr/software/redis/redis-ms/7001/log/redis.log"
appendonly yes#开启日志形式
requirepass XX#密码
4)修改从./7002/redis.conf
vim ./7002/redis.conf
#修改如下key的值
bind 0.0.0.0#任意ip都可以连接
protected-mode no#关闭保护,允许非本地连接
port 7002#端口号
daemonize yes#后台运行
pidfile /var/run/redis_7002.pid#进程守护文件,就是存放该进程号相关信息的地方
dir /usr/software/redis/redis-ms/7002/data//#db等相关目录位置
logfile "/usr/software/redis/redis-ms/7002/log/redis.log"
replicaof <masterip> <masterport>#主信息
masterauth <master-password>#主信息
appendonly yes#开启日志形式
requirepass XX#密码
5)修改从./7003/redis.conf
vim ./7003/redis.conf
#修改如下key的值
bind 0.0.0.0#任意ip都可以连接
protected-mode no#关闭保护,允许非本地连接
port 7003#端口号
daemonize yes#后台运行
pidfile /var/run/redis_7003.pid#进程守护文件,就是存放该进程号相关信息的地方
dir /usr/software/redis/redis-ms/7003/data//#db等相关目录位置
logfile "/usr/software/redis/redis-ms/7003/log/redis.log"
replicaof <masterip> <masterport>#主信息
masterauth <master-password>#主信息
appendonly yes#开启日志形式
requirepass XX#密码
2.启动测试
1)启动
redis-server /usr/software/redis/redis-ms/7001/redis.conf
redis-server /usr/software/redis/redis-ms/7002/redis.conf
redis-server /usr/software/redis/redis-ms/7003/redis.conf
ps -ef|grep redis
#查看主从是否搭建成功
/redis-cli -p 7001 -a password
info
如图:
2)测试
redis-cli -p 7001 -a ww
redis-cli -p 7002 -a ww
--raw 中文显示
主7001设置name值,可以在从7002、7003取到,但是从不能设置值。
四、主从模式的优缺点
1、Redis的Replication的特点和优点:
1】、同一个Master可以同步多个Slaves。
2】、Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结构。
3】、Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
4】、Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。
5】、为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成。即便如此,系统的伸缩性还是得到了
很大的提高。
6】、Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作。
7】、支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
2、Redis的Replication的缺点:
1】、Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
2】、主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
3】、Redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,
这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和
主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦。
4】、Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,
这对资源造成了很大的浪费。
五、结束
其实redis的主从模式很简单,在实际的生产环境中是很少使用的,我也不建议在实际的生产环境中使用主从模式来提供系统的高可用性,之所以不建议使用都是由它的缺点造成的,在数据量非常大的情况,或者对系统的高可用性要求很高的情况下,主从模式也是不稳定的。虽然这个模式很简单,但是这个模式是其他模式的基础,所以必须深刻的理解,对其他模式的学习才会有帮助作用。