1 主从架构
构建读写分离架构,满足读多写少的应用场景,数据备份,实现高可用,默认情况下redis数据库充当slave角色时是只读的不能进行写操作。
可在配置文件中更改slave-read-only字段:
1.1 创建不同的配置文件
创建三个目录,将redis.config复制三份放在三个文件夹中。分别修改配置文件,将端口分别设置为:6379(Master)、6380(Slave)、6381(Slave)。同时要设置pidfile文件为不同的路径。
1.2 配置主从节点
在两个准备设置为从节点的配置文件中,打开配置文件,搜索slaveof,会有详细的说明,配置主节点的IP和端口号,如下例:
#slaveof <masterip> <masterport>
slaveof 192.168.209.131 6379
将该从节点的主节点配置为192.168.209.131,端口为6379。
1.3 启动测试:
先启动主节点,然后启动从节点。
如果是在各个节点启动后通过命令配置主节点,主会出现如下日志
6380添加到主节点中
6381添加到主节点中
启动客户端命令如下例:
[root@SuperMachine redis-4.0.0]# /usr/local/redis-4.0.0/src/redis-server /usr/local/redis-4.0.0/6380/redis.conf
启动客户端测试,在主节点中设置一个键值对:
[tang@SuperMachine src]$ ./redis-cli -h 192.168.209.131 -p 6379
从节点是否能获取到:
测试显示成功,在从节点中成功取到主节点的数据。
附出现的问题:
启动从节点时,从节点显示如下问题:
解决方案:在配置文件中更改一个配置,如下
参考博客:http://blog.csdn.net/song19890528/article/details/38536871
- runid
每次重启后都会生成一个唯一的id,主节点重启了,runid不同,如果从节点发现主节点runid和之前不一样,那么会全量从主节点中拉取。
全量复制流程
全
量
复
制
总
结
一
下
,
m
a
s
t
e
r
发
送
了
三
次
数
据
,
第
一
次
是
m
a
s
t
e
r
信
息
,
\color{#FF0000}{全量复制总结一下,master发送了三次数据,第一次是master信息,}
全量复制总结一下,master发送了三次数据,第一次是master信息,
第
二
次
是
发
送
r
b
d
数
据
,
第
三
次
是
b
u
f
f
e
r
缓
冲
区
数
据
\color{#FF0000}{第二次是发送rbd数据,第三次是buffer缓冲区数据}
第二次是发送rbd数据,第三次是buffer缓冲区数据
全量复制需要执行bgsave,耗时并且占用网络开销,所以一般有部分复制。
部
分
复
制
是
利
用
b
u
f
f
e
r
缓
存
区
保
存
命
令
数
据
,
通
过
与
发
送
过
去
的
数
据
偏
移
量
比
较
,
\color{#FF0000}{部分复制是利用buffer缓存区保存命令数据,通过与发送过去的数据偏移量比较,}
部分复制是利用buffer缓存区保存命令数据,通过与发送过去的数据偏移量比较,
然
后
发
送
给
s
l
a
v
e
节
点
那
些
不
等
于
偏
移
量
的
数
据
\color{#FF0000}{然后发送给slave节点那些不等于偏移量的数据}
然后发送给slave节点那些不等于偏移量的数据
主从架构下的问题
- 操作需要人工介入
如果从节点宕机,需要重启,然后加入到主从架构中,会执行增量复制。
如果主节点宕机,从从节点中选择一个断开与主节点的联系,作为主节点,宕机的主节点重启后加入到主从架构中。