主从复制:主机更新数据后,根据配置和策略,自动同步到备机的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. 解决session过期跳转到登录页并跳出iframe框架(或者layui弹出层)

    当用户长时间停留在管理界面没有操作,等到session过期后,进行了操作,那么只是iframe跳转到login页面,这不是我们想要的结果.解决方法:在login页面加一个逻辑判断: <scrip ...

  2. 安装Ubuntu桌面环境后只能Guest登录的解决办法

    1.安装Ubuntu桌面环境后,登录界面只显示了Guest 2.在登录界面按住crtl+shift+F1,进入tty模式 3.输入sudo -s进入root模式 4.输入vi /etc/lightdm ...

  3. Scanner和 Random类,控制语句的例题,商品管理(直接赋值)

    Scanner类的使用: import java.util.Scanner; class Demo02 { public static void main(String[] args) { //1.导 ...

  4. “System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生 其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏

    用管理员身份运行CMD:netsh winsock reset就可以解决

  5. HTML复选框checkbox默认样式修改

    此方法可以将复选框的默认样式替换成任意样式.如图: 未选择: 选择时: 思路:将复选框隐藏,利用lebal元素的焦点传递特性,用lebal的样式替代复选框. 代码如下: <!DOCTYPE ht ...

  6. ajax 的 promise

    $.when().done().fail() $.when($.ajax("test1.html"),$.ajax("test2.html")).done(fu ...

  7. 【原创】数据处理中判断空值的方法(np.isnan、is np.nan和pd.isna)比较

      转载请注明出处:https://www.cnblogs.com/oceanicstar/p/10869725.html  1.np.isnan(只有数组数值运算时可使用) 注意:numpy模块的i ...

  8. mysql主从复制及双主复制

    之前做过一次在单台机器上的多实例的mysql,这次分开做,使用两台主机. 这里使用的主机地址分别为: MASTER:192.168.214.135 SLAVE  : 192.168.214.128 这 ...

  9. 十、MySQL 删除数据表

    MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...

  10. Jin Ge Jin Qu hao UVA - 12563 01背包

    题目:题目链接 思路:由于t最大值其实只有180 * 50 + 678,可以直接当成01背包来做,需要考虑的量有两个,时间和歌曲数,其中歌曲优先级大于时间,于是我们将歌曲数作为背包收益,用时间作为背包 ...