redis的主从复制 读写分离 主从切换

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

当数据量变得庞大的时候,读写分离还是很有必要的。同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能。

 

redis提供了一个master,多个slave的服务。

 

准备三个redis服务,依次命名文件夹子master,slave1,slave2.这里为在测试机上,不干扰原来的redis服务,我们master使用6000端口。

配置文件(redis.conf)

master配置修改端口:

    port 6000

    requirepass 123456

 

slave1修改配置:

 

1
2
3
4
5
6
7
port 6001
 
slaveof 127.0.0.1 6000
 
masterauth 123456
 
requirepass 123456

  

slave2修改配置:  

1
2
3
4
5
6
7
port 6002
 
slaveof 127.0.0.1 6000
 
masterauth 123456
 
requirepass 123456

  

 

requirepass是认证密码,应该之后要作主从切换,所以建议所有的密码都一致, masterauth是从机对主机验证时,所需的密码。(即主机的requirepass)

启动主机

1
redis-server redis.conf  

启动从机:

   redis-server redis1.conf

   redis-server redis2.conf

 

输入:

ps -ef |grep redis
root      6617     1  0 18:34 ?        00:00:01 redis-server *:6000    root      6647     1  0 18:43 ?        00:00:00 redis-server *:6001     root      6653     1  0 18:43 ?        00:00:00 redis-server *:6002     root      6658  6570  0 18:43 pts/0    00:00:00 grep redis

可以看到主从机的redis已经相应启动。

我们来验证下 主从复制。

master:

1
2
3
4
5
[root@localhost master] # redis-cli -p 6000
127.0.0.1:6000> auth 123456
OK
127.0.0.1:6000>  set  test  chenqm
OK

slave1:

1
2
3
4
5
[root@localhost slave2] # redis-cli -p 6001
127.0.0.1:6001> auth 123456
OK
127.0.0.1:6001> get  test
"chenqm"

slave2:

1
2
3
4
5
[root@localhost slave2] # redis-cli -p 6002
127.0.0.1:6002> auth 123456
OK
127.0.0.1:6002> get  test
"chenqm"

  

 

可以看到主机执行写命令,从机能同步主机的值,主从复制,读写分离就实现了。

 

 

但是万一主机挂了怎么办,这是个麻烦事情,所以redis提供了一个sentinel(哨兵),以此来实现主从切换的功能,类似与zookeeper.

 

我们配置两个sentinel进程:

vi sentinel.conf
1
2
3
4
5
6
port 26379
 
 
sentinel monitor mymaster 127.0.0.1 6000 2
 
<br>sentinel auth-pass mymaster 123456

 

1
vi  sentinel.conf

 

1
2
3
4
5
port 26479
 
sentinel monitor mymaster 127.0.0.1 6000 2
 
sentinel auth-pass mymaster 123456

  

启动sentinel服务(到对应的目录执行相应的命令):

1
redis-server sentinel.conf --sentinel

 

查看日志:

[7014] 11 Jan 19:42:30.918 # +monitor master mymaster 127.0.0.1 6000 quorum 2[7014] 11 Jan 19:42:30.923 * +slave slave 127.0.0.1:6002 127.0.0.1 6002 @ mymaster 127.0.0.1 6000[7014] 11 Jan 19:42:30.925 * +slave slave 127.0.0.1:6001 127.0.0.1 6002 @ mymaster 127.0.0.1 6000

从对应的日志观察到,一个master服务,两个slave服务

我们现在来kill master进程

1
2
3
4
5
6
7
8
[root@localhost slave1] # ps -ef|grep redis
root      6960     1  0 19:29 ?        00:00:02 redis-server *:6000   
root      6968     1  0 19:30 ?        00:00:01 redis-server *:6001    
root      6975     1  0 19:30 ?        00:00:01 redis-server *:6002    
root      7014  6570  0 19:42 pts /0     00:00:01 redis-server *:26479                
root      7017  6789  0 19:42 pts /5     00:00:01 redis-server *:26379                
root      7021  6729  0 19:46 pts /3     00:00:00  grep  redis
[root@localhost slave1] # kill -9 6960

 我们观察日志:

1
2
[7014] 11 Jan 19:43:41.463  # +sdown master mymaster 127.0.0.1 6000
[7014] 11 Jan 19:46:42.379  # +switch-master mymaster 127.0.0.1 6000 127.0.0.1 6001

 master切换了,当6000端口的这个服务重启的时候,他会变成6001端口服务的slave。

  因为sentinel在切换master的时候,把对应的sentinel.conf和redis.conf文件的配置修改。

 

期间我们还需要关注的一个问题:sentinel服务本身也不是万能的,也会宕机,所以我们还得部署sentinel集群,象我这样多启动几个sentinel。

关注这个配置:

1
sentinel monitor mymaster 127.0.0.1 6000 2<br><br><br>这个后面的数字2,是指当有两个及以上的sentinel服务检测到master宕机,才会去执行主从切换的功能。










本文转自 蓝叶子Sheep 51CTO博客,原文链接:http://blog.51cto.com/dellinger/1960069,如需转载请自行联系原作者
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
NoSQL 算法 安全
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
155 0
|
3月前
|
存储 负载均衡 NoSQL
Redis之主从复制
【1月更文挑战第8天】主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(masterleader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave以读为主。 默认情况下,每台Redis服务器都是主节点; 且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
179 3
|
17天前
|
监控 NoSQL Redis
redis主从复制
redis主从复制
|
1月前
|
存储 监控 NoSQL
Redis 架构深入:主从复制、哨兵到集群
大家好,我是小康,今天我们来聊下 Redis 的几种架构模式,包括主从复制、哨兵和集群模式。
Redis 架构深入:主从复制、哨兵到集群
|
1月前
|
运维 负载均衡 NoSQL
【大厂面试官】知道Redis集群和Redis主从有什么区别吗
集群节点之间的故障检测和Redis主从中的哨兵检测很类似,都是通过PING消息来检测的。。。面试官抓抓脑袋,继续看你的简历…得想想考点你不懂的😰。
67 1
|
1月前
|
负载均衡 NoSQL 容灾
|
3月前
|
存储 负载均衡 NoSQL
Redis 高可用篇:你管这叫主从架构数据同步原理?
Redis 高可用篇:你管这叫主从架构数据同步原理?
241 5
|
3月前
|
NoSQL Linux 网络安全
解决在Linux中进行redis的主从复制时出现的从机可以获取到主机的信息,主机获取不到从机的信息~
解决在Linux中进行redis的主从复制时出现的从机可以获取到主机的信息,主机获取不到从机的信息~
|
3月前
|
缓存 NoSQL 算法
《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRU
《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRU
43 0
|
3月前
|
NoSQL Java Redis
Redis的主从复制是什么?它的作用是什么?
Redis的主从复制是什么?它的作用是什么?
34 0

热门文章

最新文章