一、Redis 的 Replication

这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了(其实,在MySQL配置主从也很简单)

相信在阅读完这篇Blog之后你也可以轻松做到。

这里我们还是先列出一些理论性的知识,后面给出实际操作的案例。

 

下面的列表清楚的解释了Redis Replication的特点和优势。

1)同一个Master可以同步多个Slaves,例如 一主两从,就是一个Master主库同步两个Slave从库

2)Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结构。

3)Master Server是以非阻塞的fork子进程方式为Slaves提供服务,所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。

4)Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。

5)为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成。即便如此,系统的伸缩性还是得到了很大的提高。

6)Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作。

 

二、Replication的工作原理

在Slave启动并连接到Master之后,它将主动发送一个SYNC命令。

此后Master将Fork启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件dump.rdb到Slave,以完成一次完全同步。

而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。

如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。

 

三、如何配置Replication

见如下步骤:

1)同时启动两个Redis服务器,可以考虑在同一台机器上启动两个Redis服务器,分别监听不同的端口,如6379和6380。

2)在Slave服务器上执行一下命令:

/redis-cli -p 6380   #这里我们假设Slave的端口号是6380

redis 127.0.0.1:6380> slaveof 127.0.0.1 6379 #我们假设Master和Slave在同一台主机,Master的端口为6379

OK

上面的方式只是保证了在执行slaveof命令之后,redis_6380成为了redis_6379的slave,一旦服务(redis_6380)重新启动之后,他们之间的复制关系将终止。

如果希望长期保证这两个服务器之间的Replication关系,可以在redis_6380的配置文件中做如下修改:

/> cd /etc/redis  #切换Redis服务器配置文件所在的目录。

/> ls

6379.conf  6380.conf

/> vi 6380.conf

# slaveof <masterip> <masterport>

改为

slaveof 127.0.0.1 6379

保存退出。

这样就可以保证Redis_6380服务程序在每次启动后都会主动建立与Redis_6379的Replication连接了。

 

四、应用示例

这里我们假设Master-Slave已经建立。

#启动master服务器。

[root@Stephen-PC redis]# redis-cli -p 6379

redis 127.0.0.1:6379>

#情况Master当前数据库中的所有Keys。

redis 127.0.0.1:6379> flushdb

OK

#在Master中创建新的Keys作为测试数据。

redis 127.0.0.1:6379> set mykey hello

OK

redis 127.0.0.1:6379> set mykey2 world

OK

#查看Master中存在哪些Keys。

redis 127.0.0.1:6379> keys *

1) "mykey"

2) "mykey2"

#启动slave服务器。

[root@Stephen-PC redis]# redis-cli -p 6380

#查看Slave中的Keys是否和Master中一致,从结果看,他们是相等的。

redis 127.0.0.1:6380> keys *

1) "mykey"

2) "mykey2"

#在Master中删除其中一个测试Key,并查看删除后的结果。

redis 127.0.0.1:6379> del mykey2

(integer) 1

redis 127.0.0.1:6379> keys *

1) "mykey"

#在Slave中查看是否mykey2也已经在Slave中被删除。

redis 127.0.0.1:6380> keys *

1) "mykey"

 

Redis 主从复制及密码设置

1. 主从环境

主库文件: 13.57.78.100    /etc/conf/redis.conf    端口: 6380     密码: proxy-mimvp

从库文件: 15.29.237.18    /etc/conf/redis.conf    端口: 6380     密码: proxy-mimvp

 

2. 主库配置文件密码

bind 127.0.0.1  13.57.78.100            # 127.0.0.1(本地使用),13.57.78.100 (从库绑定)
pidfile /var/run/redis.pid
dir /var/lib/redis/                              
# 强烈推荐设置指定目录,重启redis后加载db文件
requirepass 'proxy-mimvp'                # 主库密码

 

3. 从库配置文件密码及从库配置

bind 127.0.0.1                                    # 127.0.0.1(本地使用)
pidfile /var/run/redis.pid
dir /var/lib/redis/
requirepass 'proxy-mimvp'                
# 从库密码

slaveof 13.57.78.100                         # 13.57.78.100(绑定主库)
masterauth 'proxy-mimvp'                 # 从库绑定主库的密码(注意:是主库的密码)
slave-read-only no                             #  只读为yes;如果从库有临时写入,必须设置为 no

 

4. 重启Redis,使其生效

方式1: 杀死redis进程,重启 /usr/local/bin/redis-server /etc/conf/redis.conf

方式2: /etc/init.d/redis restart        配置详见米扑博客 Centos 配置 Redis 启动脚本

 

5. redis 主从实例

米扑代理: http://proxy.mimvp.com

 

 

参考推荐

Redis 双主实现

Redis 双主备份实现

单机开启多个 Redis 实例

Redis实例(9)—— 主从复制

Redis实例(10)—— 持久化

Redis 主从集群配置高可用技术方案

redis-rdb-tools 解析 reids dump文件及内存使用量

Centos Redis 安装配置和启动脚本

Linux php7.0 安装redis和PHP扩展

Redis服务器监控工具redis-live

Redis Info 信息统计

redis.conf 配置详解

Redis常用命令

高可用网站架构的技术实践

Tornado+Redis 维护ADSL拨号服务器代理池