如何在一台电脑上进行redisredis 主从配置 哨兵

● 下载redis源码包,地址:
● 编译redis安装包
解压redis-3.2.4.tar.gz:tar zxvf redis-3.2.4.tar.gz
进入redis-3.2.4目录,执行:make,然后再执行make install即可
● 主备环境说明(同一台物理机搭建)
:192.168.130.132
主 和端口:192.168.130.132:6301
备 和端口:192.168.130.132:6315,192.168.130.132:6316,192.168.130.132:6317
哨兵和端口:192.168.130.132:26301(可部署多个,避免单点故障)
1.主redis配置说明
拷贝redis-3.2.4 目录下的redis.conf :cp redis.conf redis_master_6301.conf
修改其中以下字段
bind 192.168.130.132
daemonize yes
pidfile "/var/run/redis_master_6301.pid"
logfile "/var/run/logs/log_master_6301.log"
dbfilename "dump_6301.rdb"
appendfilename "appendonly_6301.aof"
2.备redis配置说明
拷贝redis-3.2.4 目录下的redis.conf :
cp redis.conf redis_slave_6315.conf
cp redis.conf redis_slave_6316.conf
cp redis.conf redis_slave_6317.conf
在主配置文件的基础上添加:
slaveof 192.168.130.132 6301
备注:其他文件修改类似
● sentinel哨兵配置
拷贝redis-3.2.4 目录下的sentinel.conf :cp sentinel.conf sentinel_26301.conf
修改如下配置
port 26301
sentinel monitor master1 192.168.130.132 6316 1
sentinel down-after-milliseconds master1 5000
sentinel failover-timeout master1 900000
sentinel parallel-syncs master1 2
down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数(判定为主观下线SDOWN)。
parallel-syncs 选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长,但越大就意味着越多的从服务器因为复制而不可用。可以通过将这个值设为 1 来保证每次只有一个从服务器处于不能处理命令请求的状态。
● 启动redis Server
./redis-server ../redis_master_6301.conf
./redis-server ../redis_slave_6315.conf
./redis-server ../redis_slave_6316.conf
./redis-server ../redis_slave_6317.conf
● 启动 sentinel
./redis-sentinel ../sentinel_26301.conf
● 测试说明
宕机掉主redis,sentinel哨兵自动实现切换
○ 哨兵配置文件会持久化到文件
○ redis读写性能不纳入讨论范围
本文已收录于以下专栏:
相关文章推荐
本文就官方redis分布式的部署进行总结说明,redis分布式中集成了高可用HA功能,依次进行说明,现对redis的分布式部署做以下总结。
下载redis版本
官方下载地址:http://downl...
高可用redis主备方案基于keepalived保证在master宕机时,slaver可以自动切换为master提供服务。待之前的master机器上线了,可以选择是重新取回master权利还是作为sl...
程序员升职加薪指南!还缺一个“证”!
CSDN出品,立即查看!
Redis是一个高速的KV数据库,支持丰富的类型,既可以当做cache来使用,也可以当做存储来使用。目前仅支持replication。
因此和MySQL一样,需要外部的一些方案来实现本身的HA。...
摘自:/stephen-liu74/archive//2364717.html
“下面的列表清楚的解释了Redis...
本文原创自 http://blog.csdn.net/voipmaker
转载注明出处。
Redis的HA 目的是当主节点挂掉后,从节点自动升级为主节点。
目前的方案有如下几种:
网上看到相关文章,记录一下:
http://nginx./494
http://blog.csdn.net/zuoanlove/arti...
1.为什么要有集群由于Redis主从复制架构每个数据库都要保存整个集群中的所有数据,容易形成木桶效应,所以Redis3.0之后的版本添加特性就是集群(Cluster)2.Redis集群架构说明
主从各一台互备,不做读写分离,备库只同步,不对外提供服务。主库无持久化策略,备库选用rdb。
原有cache01做master,无需persistence以便提供最佳...
redis是一个非常强大的nosql服务,不仅能替代
环境描述:
主redis:192.168.10.1 6379
从redis:192.168.10.2 6380
一、主从配置
1、将主从redis配置文件redis.conf中的aemon...
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)redis分布式环境主从配置及手动切换
redis分布式环境主从配置及手动切换
前一篇文章讲解了redis的伪分布式的环境搭建,为了应各位朋友的要求写一篇真分布式环境的搭建以及手动切换的操作。下面内容只是讲解分布式环境下redis的配置的注意事项,过程比较简单,暂时还未使用到sentinel来实现自动主从切换的高可用配置,关于sentinel的配置后续也会有相应的文章推出。在实际公司的生产环境上如果要使用redis,一般也不会直接操作redis,而是采用开源的redis集群架构,例如codis,redis cluster,twemproxy来实现分布式集群的管理,结合所在公司的项目我们选用的是codis,后续也会介绍codis的详情、部署以及运维等,敬请期待!一、环境概述192.168.28.154为主,启动一个redis实例,端口号为8381192.168.16.234为从,启动一个redis实例,端口号为8381二、配置文件1、master8381.conf的内容如下:daemonize yesport 8381logfile /soft/redis/logs/8381.logdbfilename 8381.rdbdir /soft/redis/dumps/2、slaveslave的配置文件、日志文件、持久化文件路径与master一样slaveof 192.168.28.154 8381其中从的配置文件中需要加上:slaveof 192.168.28.154 8381三、启动测试启动slave:redis-server 8381.conf启动master:redis-server 8381.conf从这里可以看出已经连接到slave了,并进行了一次同步1、使用redis-cli连接master2、在master机器上使用redis-cli来连接slave发现可以连接,但是执行get a的时候报错了,这就是真分布式环境下最有名的错误,注意只在redis3.2以上版本出现。从报错信息中可以看到slave实例是以受保护模式来启动,这种模式下只允许在本机连接redis,如果在其它机器下连接就不允许。解决办法也说明了:1)、在slave上使用命令“CONFIG SET protected-mode no”2)、修改slave的配置文件,增加&protected-mode no&3)、在slave的配置文件中增加ip地址的绑定,或者增加权限密码,只允许指定ip的客户端访问下面我的使用第二种方式来修改slave的配置文件,为了一劳永易我们把master的配置文件也修改了。注:这是生产环境下最常用的配置方式增加protected-mode no如下:然后再到master通过redis-cli来访问slave,使用get a发现有结果返回至此为止主从配置完成。四、主从手动切换1、在slave上修改role的状态为master:发现已经改为master了2、在master上修改role为slave:slaveof 192.168.16.234 8381查看状态:至此修改完成,主要是对slaveof命令的使用,详细的切换过程大家可以看前一篇文章。
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
百家号 最近更新:
简介: 每天为大家分享最新鲜的创业事儿
作者最新文章&一台机器两个实例和两台机器两个redis主从方案
秒后自动跳转到登录页
快捷登录:
举报类型:
不规范:上传重复资源
不规范:标题与实际内容不符
不规范:资源无法下载或使用
其他不规范行为
违规:资源涉及侵权
违规:含有危害国家安全等内容
违规:含有反动/色情等内容
违规:广告内容
详细原因:
任何违反下载中心规定的资源,欢迎Down友监督举报,第一举报人可获5-10下载豆奖励。
视频课程推荐
一台机器两个实例和两台机器两个redis主从方案
上传时间:
技术分类:
资源评价:
(0位用户参与评价)
已被下载&3&次
CentOS+nginx+jdk+tomcat
本资料共包含以下附件:
一台机器两个实例和两台机器两个redis主从方案.txt
51CTO下载中心常见问题:
1.如何获得下载豆?
1)上传资料
2)评论资料
3)每天在首页签到领取
4)购买VIP会员服务,无需下载豆下载资源
5)更多途径:点击此处
2.如何删除自己的资料?
下载资料意味着您已同意遵守以下协议:
1.资料的所有权益归上传用户所有
2.未经权益所有人同意,不得将资料中的内容挪作商业或盈利用途
3.51CTO下载中心仅提供资料交流平台,并不对任何资料负责
4.本站资料中如有侵权或不适当内容,请邮件与我们联系()
5.本站不保证资源的准确性、安全性和完整性, 同时也不承担用户因使用这些资料对自己和他人造成任何形式的伤害或损失
相关专题推荐
PHP是在服务器端执行的嵌入HTML文档的
本教程循序渐进,由浅及深;具有完整
PHP是一种HTML内嵌式的语言,是一种在
本专题为XML视频教程,共20集,视频格
ExtJS是一种主要用于创建前端用户界面
您想不想设计出漂亮美观的网页?这专
本视频教程有针对性的讲解Ajax技术如
本专题包含了Java Web开发必须的各种
JSP技术使用Java编程语言编写类XML的
本专题为UML实战操作视频教程,讲解了
小甲鱼版delphi视频学习,从入门到精
主要讲述springMVC启用注解功能,还有
这是韩顺平老师最新版的jsp视频教程
韩顺平.第二版XML视频教程.共21讲,本
Flex 是一个高效、免费的开源框架,可
ERP是英文Enterprise Resource Plann
意见或建议:
联系方式:
您已提交成功!感谢您的宝贵意见,我们会尽快处理Redis在.net中的使用(3)简单的主从复制
Redis在.net中的使用(3)简单的主从复制
在前面的两篇简单的实现了redis的安装和简单项目中的运用&
在这里我们简单说说Redis的主从复制实现,Redis跟MySQL一样拥有强大的主从复制功能,还支持一个master可以拥有多个slave,而一个slave又可以拥有多个slave,从而形成强大的多级服务器集群架构,如下图:
Redis的主从复制功能是异步进行的,不会影响master的运行,也不会降低Redis的处理性能。Redis的主从架构中,可以考虑关闭Master的数据持久化功能,而只让Slave进行必要的持久化,这样就能提高主服务器的处理能力和性能,同时Slave设置为只读模式,这样可以避免Slave缓存的数据被误修改等。
1、配置安装两个Redis实例
处于测试考虑,我只在本机安装两个Redis实例来进行演示而已。复制一份redis文件件,修改conf文件的端口为6380,并启动,如下图:
注意:在同一台电脑上测试,Master和Slave的端口不要一样,否则是不能同时启动两个实例的。
这样,本机就启动了两个Redis实例服务了。
2、主从Redis服务绑定
在Slave 实例,增加:slaveof 127.0.0.1 6379,如下图:
配置完成之后,重新启动这两个实例,如果输出如下内容,说明主从复制的架构已经配置成功了,如下图:
这样,Redis的主从复制就设置完成了。
3、主从复制测试
连接上Master服务器和Slave 服务器,然后在Master写入一条测试缓存,然后在Slave中读取这条测试缓存,如下图:
4、C#中的调用测试
主从架构的Redis的读写其实和单一Redis实例的读写差不多,只是部分配置和读取区分了主从,如果不清楚C#中如何使用Redis,请移步:
不过我们需要注意的是:ServiceStack.Redis中GetClient()的这个方法,默认只能拿到Master Redis中获取连接,而拿不到Slave的readonly连接。这样Slave起到了冗余备份的作用,读的功能没有发挥出来,如果并发请求太多的话,则Redis的性能会有影响。
因此,我们需要的写入和读取的时候做一个区分,写入的时候,调用client.GetClient()来获取writeHosts的Master的Redis链接。读取的时候则调用client.GetReadOnlyClient()来获取的readonlyHost的Slave的Redis链接,或者可以直接使用client.GetCacheClient()来获取一个连接,他会在写的时候调用GetClient获取连接,读的时候调用GetReadOnlyClient获取连接,这样可以做到读写分离,从而利用Redis的主从复制功能。
a、修改配置文件
&!-- redis Start
&add key="SessionExpireMinutes" value="180" /&
&add key="redis_server_master_session" value="127.0.0.1:6379" /&
&add key="redis_server_slave_session" value="127.0.0.1:6380" /&
&add key="redis_max_read_pool" value="300" /&
&add key="redis_max_write_pool" value="100" /&
&!--redis end--&
b、Redis操作公用类RedisCacheHelper的优化修改
public class RedisCacheHelper
private static readonly PooledRedisClientManager pool =
private static readonly string[] writeHosts =
private static readonly string[] readHosts =
public static int RedisMaxReadPool = int.Parse(ConfigurationManager.AppSettings["redis_max_read_pool"]);
public static int RedisMaxWritePool = int.Parse(ConfigurationManager.AppSettings["redis_max_write_pool"]);
static RedisCacheHelper()
var redisMasterHost = ConfigurationManager.AppSettings["redis_server_master_session"];
var redisSlaveHost = ConfigurationManager.AppSettings["redis_server_slave_session"];
if (!string.IsNullOrEmpty(redisMasterHost))
writeHosts = redisMasterHost.Split(',');
readHosts = redisSlaveHost.Split(',');
if (readHosts.Length & 0)
pool = new PooledRedisClientManager(writeHosts, readHosts,
new RedisClientManagerConfig()
MaxWritePoolSize = RedisMaxWritePool,
MaxReadPoolSize = RedisMaxReadPool,
AutoStart = true
public static void Add&T&(string key, T value, DateTime expiry)
if (value == null)
if (expiry &= DateTime.Now)
Remove(key);
if (pool != null)
using (var r = pool.GetClient())
if (r != null)
r.SendTimeout = 1000;
r.Set(key, value, expiry - DateTime.Now);
catch (Exception ex)
string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "存储", key);
public static void Add&T&(string key, T value, TimeSpan slidingExpiration)
if (value == null)
if (slidingExpiration.TotalSeconds &= 0)
Remove(key);
if (pool != null)
using (var r = pool.GetClient())
if (r != null)
r.SendTimeout = 1000;
r.Set(key, value, slidingExpiration);
catch (Exception ex)
string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "存储", key);
public static T Get&T&(string key)
if (string.IsNullOrEmpty(key))
return default(T);
T obj = default(T);
if (pool != null)
using (var r = pool.GetClient())
if (r != null)
r.SendTimeout = 1000;
obj = r.Get&T&(key);
catch (Exception ex)
string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "获取", key);
public static void Remove(string key)
if (pool != null)
using (var r = pool.GetClient())
if (r != null)
r.SendTimeout = 1000;
r.Remove(key);
catch (Exception ex)
string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "删除", key);
public static bool Exists(string key)
if (pool != null)
using (var r = pool.GetClient())
if (r != null)
r.SendTimeout = 1000;
return r.ContainsKey(key);
catch (Exception ex)
string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "是否存在", key);
public static IDictionary&string, T& GetAll&T&(IEnumerable&string& keys) where T : class
if (keys == null)
keys = keys.Where(k =& !string.IsNullOrWhiteSpace(k));
if (keys.Count() == 1)
T obj = Get&T&(keys.Single());
if (obj != null)
return new Dictionary&string, T&() { { keys.Single(), obj } };
if (!keys.Any())
IDictionary&string, T& dict =
if (pool != null)
keys.Select(s =& new
Index = Math.Abs(s.GetHashCode()) % readHosts.Length,
KeyName = s
.GroupBy(p =& p.Index)
.Select(g =&
using (var r = pool.GetClient(g.Key))
if (r != null)
r.SendTimeout = 1000;
return r.GetAll&T&(g.Select(p =& p.KeyName));
catch (Exception ex)
string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "获取", keys.Aggregate((a, b) =& a + "," + b));
.Where(x =& x != null)
.ForEach(d =&
d.ForEach(x =&
if (dict == null || !dict.Keys.Contains(x.Key))
if (dict == null)
dict = new Dictionary&string, T&();
dict.Add(x);
IEnumerable&Tuple&string, T&& result =
if (dict != null)
result = dict.Select(d =& new Tuple&string, T&(d.Key, d.Value));
result = keys.Select(key =& new Tuple&string, T&(key, Get&T&(key)));
return result
.Select(d =& new Tuple&string[], T&(d.Item1.Split('_'), d.Item2))
.Where(d =& d.Item1.Length &= 2)
.ToDictionary(x =& x.Item1[1], x =& x.Item2);
至此,基本的Redis主从复制就简单实现了,欢迎拍砖~
由最后编辑于:1年前
内容均为作者独立观点,不代表八零IT人立场,如涉及侵权,请及时告知。
评论努力加载中...
是否采纳当前回复为最佳答案?采纳后不可再次编辑。
下载附件将扣除您个80币,是否继续下载?1327人阅读
1、Replication的工作原理
2、如何配置Redis主从复制
1、Replication的工作原理
在Slave启动并连接到Master之后,它将主动发送一条SYNC命令。此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的。
如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。
2、如何配置Redis主从复制
1、同时启动两个Redis服务器,可以考虑在同一台机器上启动两个Redis服务器,分别监听不同的端口,如6379(master)和6380(slave)。
2、在Slave服务器上执行一下命令:
d:\dev\redis-2.4.5-win64&redis-cli.exe -h 127.0.0.1 -p 6380 #这里我们假设Slave的端口号是6380
redis 127.0.0.1:6380& slaveof 127.0.0.1 6379 #假设Master和Slave在同一台主机,Master的端口为6379
redis 127.0.0.1:6380&
上面的方式只是保证了在执行slaveof命令之后,redis-6380成为了redis-6379的slave,一旦服务(redis-6380)重新启动之后,他们之间的复制关系将终止。
如果希望长期保证这两个之间的Replication(主从复制)关系,可以新建redis-6380的一份配置文件(redis.6380.redis)中做如下修改:
# slaveof &ip&
&masterport& & & &&改为 & & & & & &&slaveof 127.0.0.1 6379
pidfile /var/run/redis.6379.pid& & & & 改为 & & & &&&pidfile /var/run/redis.6380.pid
port 6379 & & &&改为 & & & &&port 6379
保存退出。
启动服务时使用新的配置:
&redis-server.exe & & redis.6380.conf
&redis-cli.exe -h localhost -p 6380
这样就可以保证Redis-6380服务程序在每次启动后都会主动建立与Redis-6379的Replication连接了。
a、如果在Slave中删除mykey,不能同时删除Master中的mykey。
b、Slave启动顺利跟Master启动无关联。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:38624次
排名:千里之外
转载:73篇
(1)(3)(4)(11)(14)(2)(9)(4)(6)(2)(7)(8)(4)

我要回帖

更多关于 linux redis 主从配置 的文章

 

随机推荐