Redis Sentinel高可用配置及C#访问
本文环境如下:
操作系统:ubuntu-14.04.1-desktop-amd64
Redis:2.8.19
如果使用虚拟机则将每台的网络设置为桥接,否则他们之间能连上,局域网连不上。
系统设计如图:

一、安装Redis
可以参考之前文章,采用离线安装,本次以Sentinel配置为重,所以以联网安装为例。
呼出ubuntu终端,依次执行下面命令:
wget http://download.redis.io/releases/redis-2.8.19.tar.gz
tar xzf redis-2.8..tar.gz
cd redis-2.8.
make
即可安装成功,4台机器依次按照相同步骤安装。
二、配置主从关系(主子关系)
本部分和Data4无关。
如上图Data1为Master机,则不用做任何配置,直接启动就行,启动命令和下面的一样,跳过。
依次进入Data2、Data3的Redis-2.8.19目录,将redis.conf文件原目录复制粘贴一份,改名为redis10.conf、redis11.conf(就当是为了怕配置坏而备份吧),然后打开这个配置文件找到主从配置项,配置成如下:
slaveof 192.168.1.9
注意将前面的#去掉。
然后依次启动3个服务,新开一个终端,启动命令如:
cd redis-2.8.
src/redis-server redis.conf
其他机器为:
src/redis-server redis10.conf
然后在Master上面再次新开一个终端,存入Key/value数据:
cd redis-2.8.
src/redis-cli
set name zhangsan
get name
如果能看到”zhangsan”则成功,然后依次到各Slave机器上打开终端键入:
get name
同样应该能看到”zhangsan”
相反如果键入
set name lisi
则会报错。
原因是:Master-Slave模式只有主可以读写,然后分发给各个从机,从机只能读,不能写。由此可以实现读写分离和备份。
三、配置Sentinel
Data4至此还未动过,进入redis-2.8.19目录,新建一个文本文件,名为SentinelMaster.conf,内容为(只有这几行,再没其他的了):
port
logfile log.log
#master1
sentinel monitor master1 192.168.9.18
sentinel down-after-milliseconds master1
sentinel failover-timeout master1
sentinel can-failover master1 yes
sentinel parallel-syncs master1
以上配置说明如下:
monitor :表示监控哪个Master主机。
down-after-milliseconds:是当一个sentinel在以毫秒为单位的时间段内无法达到一个实例时(或者实例不答复PINGs亦或者答复错误)它就认为实例已经关闭所需要的时间值。
can-failover用来决定一个sentinel是否在实例处于objectively down状态时启动故障转移。你可以配置所有的Sentinels执行故障切换,如果需要的话,你还可以配置为只用几个哨兵达成协议,另一些实际负责执行故障转移。
parallel-syncs 选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长,但越大就意味着越多的从服务器因为复制而不可用。可以通过将这个值设为 1 来保证每次只有一个从服务器处于不能处理命令请求的状态。
然后启动Sentinel:
cd redis-2.8.
src/redis-sentinel SentinelMaster.conf
然后打开日志文件即可看到已经连上主机并且已经获取到从机信息。
四、模拟故障转移:
在Data1上新开一个终端,键入:
cd redis-2.8.
src/redis-cli
shutdown
查看服务启动终端或者日志最后一行应该是bye bye说明下线成功。
然后,在Data2和Data3上面分别写入和读出一个Key/Value测试出哪个成为新的主机,然后去Data4的日志中去对照即可。
当Data1重新启动之后就成为一个新的Slave而不再是Master了。
五、使用C#连接这个“集群”
本例使用csredis这个客户端,自从某个开源客户端商业化之后,浪费了不少时间寻找新的全功能客户端(至少要支持Sentinel)。
思路是先连接Sentinel获取在线服务地址和端口号,然后只读操作连接Slave,增删改操作连接Master即可。获取Sentinel信息的代码如下:
using (var sentinel = new RedisSentinelClient("192.168.1.12",))
{
var master = sentinel.Slaves("master1");//这个就是在Sentinel上面为Master主机起的名字,要一致
foreach (var item in master)
{
Console.WriteLine(item.MasterHost+":"+item.MasterPort);//得到Master机器信息
Console.WriteLine(item.Ip+":"+item.Port);//得到Slave机器信息
Console.WriteLine();
}
}
剩下如何连接没必要说了啊,以上全凭记忆+百度敲出,开一次机器并启动这些服务真的很麻烦,如果有哪一步走不过去请私信我。
Redis Sentinel高可用配置及C#访问的更多相关文章
- Redis Sentinel 高可用实现说明
背景: 前面介绍了Redis 复制.Sentinel的搭建和原理说明,通过这篇文章大致能了解Sentinel的原理和实现方法以及相关的搭建.这篇文章就针对Redis Sentinel的搭建做 ...
- Redis Sentinel 高可用服务搭建
阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...
- 【转载】Redis Sentinel 高可用服务架构搭建
作者:田园里的蟋蟀 出处:http://www.cnblogs.com/xishuai/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. 阅读 ...
- Redis|Sentinel 高可用架构
一 前言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端 ...
- Redis Sentinel高可用架构
Redis目前高可用的架构非常多,比如keepalived+redis,redis cluster,twemproxy,codis,这些架构各有优劣,今天暂且不说这些架构,今天主要说说redis se ...
- Redis Sentinel 高可用方案
redis 主从复制的问题 Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用: 1,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来. 2,扩展主节点的读能力,分担主节点读压 ...
- 基于keepalived对redis做高可用配置---转载
关于keepalived的详细介绍,请移步本人相关博客:http://wangfeng7399.blog.51cto.com/3518031/1405785 功能 ip地址 安装软件 主redis 1 ...
- Redis Sentinel 高可用部署实践集群
一.Redis Sentinel 介绍 1.Sentinel 数据库环境搭建,从单机版到主备.再到多数据库集群,我们需要一个高可用的监控:比如Mysql中,我们可能会采用MHA来搭建我们 ...
- redis sentinel 高可用(HA)方案部署,及python应用示例
redis sentinel(哨兵)高可用集群的部署方法,并通过 python 程序实例讲解如何使用 redis sentinel 简介 介绍 redis sentinel(哨兵)集群的部署,配置一主 ...
随机推荐
- HDU2204 Eddy's爱好(容斥原理)
题目问[1,n]有几个数是$m^k (k>1)$形式. 如果这样考虑,m已知k未知,对于每一个m统计其k的数量即$\lfloor log_mn \rfloor$个,再容斥,然而m太多了,完全不可 ...
- 错误详情:CL : fatal error C1033: cannot open program database ''
在网上找了好多方法都不行,最后用下面方法解决了. 修改VS目录下的\VC\bin\cl.exe 的兼容性设置,取消兼容模式和以管理员身份运行即可.
- BZOJ2707 : [SDOI2012]走迷宫
首先求出SCC缩点,E[T]=0,按拓扑序计算 对于无边连出的块,如果不是T所在块,则称该块是死路块 对于一个块,如果其中的点连出的边是死路块,则它也是死路块 否则对于每块进行高斯消元求出期望 如果S ...
- 【wikioi】1269 匈牙利游戏(次短路+spfa)
http://www.wikioi.com/problem/1269/ 噗,想不到.. 次短路就是在松弛的时候做下手脚. 设d1为最短路,d2为次短路 有 d1[v]>d1[u]+w(u, v) ...
- ssky-keygen + ssh-copy-id 无密码登陆远程LINUX主机
ssky-keygen + ssh-copy-id 无密码登陆远程LINUX主机 使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linu ...
- HTTP请求中的User-Agent 判断浏览器类型的各种方法 网络爬虫的请求标示
我们知道,当用户发送一个http请求的时候,浏览的的版本信息也包含在了http请求信息中: 如上图所示,请求 google plus 请求头就包含了用户的浏览器信息: User-Agent:Mozil ...
- JAVA NIO异步通信框架MINA选型和使用的几个细节(概述入门,UDP, 心跳)
Apache MINA 2 是一个开发高性能和高可伸缩性网络应用程序的网络应用框架.它提供了一个抽象的事件驱动的异步 API,可以使用 TCP/IP.UDP/IP.串口和虚拟机内部的管道等传输方式.A ...
- Linux /etc/passwd 和 /etc/group 文件格式
passwd: /etc/passwd 文件结构 2011-04-29 16:32:54| 分类: ubuntu技巧 | 标签:passwd linux ubuntu fadero centos./e ...
- dig理解dns主备 - 阿权的书房
dns的解析一般都授权两个以上,防止单点故障. 比如阿权的书房的域名 www.aslibra.com,授权两台ns.aslibra.com 和 ns2.aslibra.com,如果单点故障会怎么样呢? ...
- Java集合之Map接口
Map使用键值对来存储数据,将键映射到值对象,一个映射不能包含重复的键,每一个键最多只能映射到一个值.Map接口的具体实现类:HashMap,Hashtable,TreeMap,LinkedHashM ...