redis学习(六)主从复制
主从复制:主机更新数据后,根据配置和策略,自动同步到备机的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学习(六)主从复制的更多相关文章
- redis学习之——主从复制(replication)
准备:拥有linux环境,并安装redis mater:主机,进行写操作 slave:从机,进行读操作 一.配置 继续前边的学习.我们是拷贝redis.conf,文件到了/root /redis 下. ...
- Redis学习六:Redis的持久化-AOF
AOF(Append Only File) 一.是什么 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文 ...
- Redis 学习之主从复制
该文使用centos6.5 64位 redis3.2.8 主从复制 Redis的复制功能是支持多个数据库之间的数据同步.一类是主数据库(master)一类是从数据库(slave),主数据库可以进 ...
- <Redis> 入门六 主从复制方式的集群
1.集群如何操作 现在有三台虚拟机,ip分别为100,105,106,将100作为master,其他两台作为slave 1.vim redis.conf 以前的版本是 slaveof <mast ...
- Redis学习手册(主从复制)
一.Redis的Replication: 这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了.相信在阅读完这篇Blog之后你也可以轻松做到.这里我们还是先列出一些理 ...
- php+redis 学习 六 订阅
<?php header('content-type:text/html;chaeset=utf-8'); /** * redis实战 * * 订阅 * * @example php subsc ...
- Redis学习手册(主从复制)(转)
一.Redis的Replication: 这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了.相信在阅读完这篇Blog之后你也可以轻松做到.这里我们还是先列出一些理论性的 ...
- redis学习六 集群的原理(转载)
转载自 http://shift-alt-ctrl.iteye.com/blog/2285470 一.Redis Cluster主要特性和设计 集群目标 1)高性能和线性扩展,最大可以支撑到1 ...
- Redis学习手册(目录)
为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...
- Redis学习手册——转载
转载出处:http://www.cnblogs.com/stephen-liu74/archive/2012/04/16/2370212.html 为什么自己当初要选择Redis作为数据存储解决方案中 ...
随机推荐
- python之列表推导、迭代器、生成器
http://blog.chinaunix.net/uid-26722078-id-3484197.html 1.列表推导 看几个例子,一切就明白了. #!/usr/bin/python number ...
- C#创建和使用ActiveX组件
开发基于.Net平台上的程序员是很难从本质上把Visual C#和ActiveX组件联起来,虽然在使用Visual C#开发应用程序时,有时为了快速开发或者由于.Net FrameWork SDK的不 ...
- JS控制台的使用
1.快捷键F12可直接进入控制台(或者单机右键->检查)用于bug调试 2.控制台如图: Elements:表示所有的js元素 Console:常用的有如下几个功能: ①console.log: ...
- C/C++程序基础 (七)继承和多态
多态 编译时多态:重载 运行时多态:虚函数.根据运行时的类别获取正确的虚指针,从而定位正确的虚函数. 虚函数 虚函数指针:指向虚函数表.多重继承则含有多个基类的虚函数指针. 虚函数表:函数指针集合.普 ...
- Python基础-Python注释
一.什么是注释.特性 1.一段文字性的描述,通过注释,可以解释和明确Python代码的功能,并记录将来要修改的地方. 2.当程序处理时,Python解释器会自动忽略,不会被当做代码进行处理 二.注释的 ...
- Java 数值计算精度问题
最近刚好做到涉及金额方面的项目,不像普通in,double,floatt类型来修饰,而是用BigDecimal来修饰,就去收集下了这方面的资料,整理如下: 1.float和double只能用来做科学计 ...
- Spring - 什么是IOC?
- [Wolfgang Mauerer] 深入linux 内核架构 第十三章 系统调用
作为Linux开发爱好者,从事linux 开发有三年多时间.做过bsp移植,熟悉u-boot代码执行流程:看过几遍<linux 设备驱动程序开发>,分析过kernel启动流程,写过驱动,分 ...
- Python 正则表达式 匹配任意字符
.(句点)匹配除了换行之外的所有一个字符, .*(点-星)匹配除了换行外的所有字符 >>> >>> r=re.compile(r'.*')>>> ...
- JavaScriptDate(日期)
如何使用Date()方法获取当日的日期. getFullYear(): 使用getFullYear()获取年份. getTime(): getTime()返回1970年1月1日至今的毫秒数. setF ...