文档章节

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

摇滚哈哈狗
 摇滚哈哈狗
发布于 2016/07/21 09:41
字数 845
阅读 6
收藏 0

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

 

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

 

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

配置文件(redis.conf)

master配置修改端口:

port 6000

    requirepass 123456

 

slave1修改配置:

 

port 6001

    slaveof 127.0.0.1 6000

    masterauth 123456 

    requirepass 123456

  

slave2修改配置:  

     port 6002

     slaveof 127.0.0.1 6000

     masterauth 123456 

     requirepass 123456

  

 

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

启动主机

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:

[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:

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

slave2:

[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
port 26379


sentinel monitor mymaster 127.0.0.1 6000 2


sentinel auth-pass mymaster 123456

 

vi sentinel.conf

 

port 26479

sentinel monitor mymaster 127.0.0.1 6000 2

sentinel auth-pass mymaster 123456

  

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

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进程

[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

 我们观察日志:

[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。

关注这个配置:

sentinel monitor mymaster 127.0.0.1 6000 2


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

 

本文转载自:http://www.cnblogs.com/think-in-java/p/5123884.html

摇滚哈哈狗
粉丝 14
博文 226
码字总数 28445
作品 0
深圳
程序员
私信 提问
14 | 高性能数据库集群:读写分离

高性能数据库集群的第一种方式是“读写分离”,其本质是将访问压力分散到集群中的多个节点,但是没有分散存储压力;第二种方式是“分库分表”,既可以分散访问压力,又可以分散存储压力。先来...

天赋异禀的柠柠
2018/07/26
0
0
MySql(二):MySql之主从复制及读写分离

一: MySql主从复制原理及实现 http://www.tuicool.com/articles/f2e222 二: MySql主从架构的复制原理及配置详解 http://blog.csdn.net/hguisu/article/details/7325124/ 三: MySql主从复制与...

牧羊人Berg
2016/10/14
50
0
Mycat学习实战-Mycat基本功能

Mycat学习实战-Mycat基本功能 Mycat学习实战-Mycat基本功能 1. Mycat高可用-读写分离 2. Mycat高可用-多主切换 3 注解 1. Mycat高可用-读写分离 1.1 读写分离配置参数 Schema.dataHost 参数b...

ygqygq2
2017/10/19
0
0
Redis企业级缓存策略之——Redis主从

一:企业常见的Redis主从架构 ①一主多从 ②一主多从从 二:主从复制的优点 (1)高可用性 在一个Redis集群中,如果master宕机,slave可以介入并取代master的位置,因此对于整个Redis服务来说...

云云毓
2017/12/17
0
0
Redis总结(三)Redis 的主从复制

  接着上一篇,前面两篇我总结了《Redis总结(一)Redis安装》和《Redis总结(二)C#中如何使用redis》 所以这一篇,会讲讲Redis 的主从复制以及C#中如何调用。   Redis跟MySQL一样,拥有...

章为忠
2015/11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
今天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
今天
6
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
今天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.5K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部