主从复制:主机更新数据后,根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slaver以读为主。redis支持主从复制。

下面通过实例来讲解主从复制的四个模式:

一、一主多从:一个主机。多个从机

1、首先复制三个redis.conf的文件修改为redis6379.conf、redis6380.conf、redis6381.conf

2、然后修改配置文件

1)daemonize no 修改为daemonize yes 将redis设置为守护进程

2)pidfile /var/run/redis.pid,修改pid文件名称

3)port 6379分别修改为port 6379、port 6380、port 6381

4)dbfilename dump.rdb 修改rdb文件名称

3、分别启动这三个redis实例

D:\Program myself\redis2.>redis-cli.exe -h 127.0.0.1 -p
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
D:\Program myself\redis2.>redis-cli.exe -h 127.0.0.1 -p
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
D:\Program myself\redis2.>redis-cli.exe -h 127.0.0.1 -p
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:

4、配置从机

配置6380为从机

D:\Program myself\redis2.>redis-cli.exe -h 127.0.0.1 -p
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
redis 127.0.0.1:> SLAVEOF 127.0.0.1
OK
redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:up
master_last_io_seconds_ago:
master_sync_in_progress:
slave_priority:
slave_read_only:
connected_slaves:
redis 127.0.0.1:>

配置6381为从机

D:\Program myself\redis2.>redis-cli.exe -h 127.0.0.1 -p
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
redis 127.0.0.1:> SLAVEOF 127.0.0.1
OK
redis 127.0.0.1:> get k1
"v1"
redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:up
master_last_io_seconds_ago:
master_sync_in_progress:
slave_priority:
slave_read_only:
connected_slaves:
redis 127.0.0.1:>

5、主机写入数据,从机就可以读取数据了

redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
slave0:127.0.0.1,,online
slave1:127.0.0.1,,online
redis 127.0.0.1:> set k1 v1
OK
redis 127.0.0.1:> mset k2 v2 k3 v3
OK
redis 127.0.0.1:> get k1
"v1"
redis 127.0.0.1:>

从机读取数据:

redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:up
master_last_io_seconds_ago:
master_sync_in_progress:
slave_priority:
slave_read_only:
connected_slaves:
redis 127.0.0.1:> get k1
"v1"
redis 127.0.0.1:>

可以看到从机读到k1数据。

注意:1、如果配置从机后,主机数据会自动复制到从机。

2、如果主机shutdown,从机保持不变,等待主机,此时如果主机恢复,从机恢复连接

3、如果从机shutdown,主机保持不变,如果此时从机恢复,需要从机重新配置slaveof

4、从机不支持写操作

二、多主多从:多个主机多个从机

根据上面介绍,如果一个主机后跟着多个从机,这时候一个主机负担太重,这时候可以设置多个主机,多个从机。上一个slave可以是下一个slave的master,slave同样可以接受其他slave的连接和同步请求,那么slave作为下一个master,可以减轻master的写压力,

如下:可将6381修改为6380的从机:SLAVEOF 127.0.0.1 6380

redis 127.0.0.1:> SLAVEOF 127.0.0.1
OK
redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:up
master_last_io_seconds_ago:
master_sync_in_progress:
slave_priority:
slave_read_only:
connected_slaves:
redis 127.0.0.1:>

查看6380的配置:角色还是slave,但是还是跟着一个slave6381

redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:up
master_last_io_seconds_ago:
master_sync_in_progress:
slave_priority:
slave_read_only:
connected_slaves:
slave0:127.0.0.1,,online
redis 127.0.0.1:>

三、从机转为主机

在主从模式下,如果主机挂了,这时候从机会保持不变,等待主机恢复。这时候我们可以用slaveof no one制定一个主机,然后使用slaveof 将其他从机转到新指定的主机下,在这之后,即使之前挂了的主机恢复,也不会改变重新获得这些从机。

主机6379、从机6380,从机6381

1、主机挂了

redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
slave0:127.0.0.1,,online
slave1:127.0.0.1,,online
redis 127.0.0.1:> SHUTDOWN
redis 127.0.0.1:> exit D:\Program myself\redis2.>

2、从机6380转换为主机

redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:down
master_last_io_seconds_ago:-
master_sync_in_progress:
master_link_down_since_seconds:
slave_priority:
slave_read_only:
connected_slaves:
redis 127.0.0.1:> SLAVEOF no one
OK
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
redis 127.0.0.1:>

3、从机6381的主机修改为6380

redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:down
master_last_io_seconds_ago:-
master_sync_in_progress:
master_link_down_since_seconds:
slave_priority:
slave_read_only:
connected_slaves:
redis 127.0.0.1:> SLAVEOF 127.0.0.1
OK
redis 127.0.0.1:>

4、6379恢复,此时没有从机了

D:\Program myself\redis2.>redis-cli.exe -h 127.0.0.1 -p
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
redis 127.0.0.1:>

四、哨兵模式

如果主机挂了,这时候需要人为设置主机,哨兵模式下,可以自动的从从机中通过投票的方式选出一个新的主机,其他从机自动的挂到该主机下。

1、新建sentinel.conf文件

1表示通过投票的方式选出主机

sentinel monitor 被监控的主机的名字 127.0.0.1  

2、启动哨兵模式

redis-sentinel sentinel.conf

3、主机6379shutdown

4、哨兵模式自动选出一个主机,将其他从机挂到该主机下

5、挂掉的主机恢复,哨兵发现后将该主机转化为从机,挂到新建立的主机下

redis学习(六)主从复制的更多相关文章

  1. redis学习之——主从复制(replication)

    准备:拥有linux环境,并安装redis mater:主机,进行写操作 slave:从机,进行读操作 一.配置 继续前边的学习.我们是拷贝redis.conf,文件到了/root /redis 下. ...

  2. Redis学习六:Redis的持久化-AOF

    AOF(Append Only File) 一.是什么 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文 ...

  3. Redis 学习之主从复制

    该文使用centos6.5 64位    redis3.2.8 主从复制 Redis的复制功能是支持多个数据库之间的数据同步.一类是主数据库(master)一类是从数据库(slave),主数据库可以进 ...

  4. <Redis> 入门六 主从复制方式的集群

    1.集群如何操作 现在有三台虚拟机,ip分别为100,105,106,将100作为master,其他两台作为slave 1.vim redis.conf 以前的版本是 slaveof <mast ...

  5. Redis学习手册(主从复制)

    一.Redis的Replication:    这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了.相信在阅读完这篇Blog之后你也可以轻松做到.这里我们还是先列出一些理 ...

  6. php+redis 学习 六 订阅

    <?php header('content-type:text/html;chaeset=utf-8'); /** * redis实战 * * 订阅 * * @example php subsc ...

  7. Redis学习手册(主从复制)(转)

    一.Redis的Replication: 这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了.相信在阅读完这篇Blog之后你也可以轻松做到.这里我们还是先列出一些理论性的 ...

  8. redis学习六 集群的原理(转载)

    转载自 http://shift-alt-ctrl.iteye.com/blog/2285470 一.Redis Cluster主要特性和设计     集群目标 1)高性能和线性扩展,最大可以支撑到1 ...

  9. Redis学习手册(目录)

    为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...

  10. Redis学习手册——转载

    转载出处:http://www.cnblogs.com/stephen-liu74/archive/2012/04/16/2370212.html 为什么自己当初要选择Redis作为数据存储解决方案中 ...

随机推荐

  1. 19课 Vue第二节

    事件修饰符 stop 禁止冒泡once 单次事件prevent 阻止默认事件native 原生事件(组件)keycode|name 筛选按键   组合键 : @keydown.ctrl.enter s ...

  2. sublime package control以及常用插件

    一.package Control安装 1.sublime 3 import urllib.request,os; pf = 'Package Control.sublime-package'; ip ...

  3. Java之JDK的下载与安装,java环境变量的配置,Editplus的下载与使用

    JRE(Java Runtime Environment Java运行环境) 包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发 ...

  4. C# 理解FileInfo类的Open()方法

    我们在对文件进行读写操作之前必须打开文件,FileInfo类为我们提供了一个Open()方法,该方法包含了两个枚举类型值的参数,一个为FileMode枚举类型值,另一个为FileAccess枚举类型值 ...

  5. MyISAM 和 InnoDB 的区别与优化

    MyISAM 和 InnoDB 的基本区别 1.InnoDB不支持FULLTEXT类型的索引. 2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from tabl ...

  6. Oracle 优化方式

    Oracle的优化器有两种优化方式,即基于规则的优化方式(rule-based optimization 简称RBO)和基于代价的优化方式(cost-based optimization 简称CBO) ...

  7. java算法面试题:设计一个快速排序。双路快速排序,简单易于理解。

    package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...

  8. 二十三、MySQL 事务

    MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数 ...

  9. PyCharm 2018.1 软件汉化

    下载汉化包 链接: https://pan.baidu.com/s/1buLFINImW_3cNzP8HsB4cA 密码: fqpu 安装汉化包 找到pycharm安装目录 直接把刚刚下载的汉化包复制 ...

  10. Nginx 配置支持 WAF

    WAF(Web Application Firewall),中文名叫做“Web应用防火墙” WAF的定义是这样的:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提 ...