本文环境如下:

操作系统: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#访问的更多相关文章

  1. Redis Sentinel 高可用实现说明

    背景:      前面介绍了Redis 复制.Sentinel的搭建和原理说明,通过这篇文章大致能了解Sentinel的原理和实现方法以及相关的搭建.这篇文章就针对Redis Sentinel的搭建做 ...

  2. Redis Sentinel 高可用服务搭建

    阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...

  3. 【转载】Redis Sentinel 高可用服务架构搭建

    作者:田园里的蟋蟀 出处:http://www.cnblogs.com/xishuai/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. 阅读 ...

  4. Redis|Sentinel 高可用架构

    一 前言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端 ...

  5. Redis Sentinel高可用架构

    Redis目前高可用的架构非常多,比如keepalived+redis,redis cluster,twemproxy,codis,这些架构各有优劣,今天暂且不说这些架构,今天主要说说redis se ...

  6. Redis Sentinel 高可用方案

      redis 主从复制的问题 Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用: 1,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来. 2,扩展主节点的读能力,分担主节点读压 ...

  7. 基于keepalived对redis做高可用配置---转载

    关于keepalived的详细介绍,请移步本人相关博客:http://wangfeng7399.blog.51cto.com/3518031/1405785 功能 ip地址 安装软件 主redis 1 ...

  8. Redis Sentinel 高可用部署实践集群

    一.Redis Sentinel 介绍    1.Sentinel     数据库环境搭建,从单机版到主备.再到多数据库集群,我们需要一个高可用的监控:比如Mysql中,我们可能会采用MHA来搭建我们 ...

  9. redis sentinel 高可用(HA)方案部署,及python应用示例

    redis sentinel(哨兵)高可用集群的部署方法,并通过 python 程序实例讲解如何使用 redis sentinel 简介 介绍 redis sentinel(哨兵)集群的部署,配置一主 ...

随机推荐

  1. 从Apache Storm学到的经验教训 —— storm的由来(转)

    阅读目录 Storm来源 初探 再探 构建第一个版本 被Twitter收购 开源的Storm 发布之后 Storm的技术演进 构建开发者社区版 离开Twitter 提交到Apache Apache孵化 ...

  2. Hook to function

    myFun.h 1: #include <stdio.h> 2:  3: void __cyg_profile_func_enter(void *this_fn, void *call_s ...

  3. MONO 安装 分析

    你是安装在/etc下的吧? 5.2是没有serverbusy的提示的,那时,它就傻等,给人造成down的假像.而现在的版本,会提示的. 你升级时,upgrade后边加参数了吗? 加了  /etc/jw ...

  4. Easyui的datagrid结合hibernate实现数据分页

    最近在学习easyui的使用,在学到datagrid的时候遇到了一些问题,终于抽点时间整理了一下,分享出来,请各位前辈高手多多指教! 1.先来看看效果,二话不说,上图直观! 2.easyui的data ...

  5. CUDA/OpenCL 学习资料

    VS2010 NVIDIA OpenCL 开发环境配置 CUDA 在线课程 [经典培训] 全球首套中文CUDA 教程-胡文美教授主讲

  6. Qt resizeEvent 控件居中设置

    在Qt中我们有时需要让一个控件在窗口居中或是在父控件中居中,而且在窗口拉伸时仍然保持正中央的位置.这里介绍一种方法,用到了主窗口的响应函数resizeEvent(QResizeEvent* event ...

  7. 安卓学习笔记---Activity

    由于学期实训的要求,我开始学习安卓了.从本月一号开始,学了五天了.时间短,刚学到的东西容易忘,我记一下笔记. 首先是对Activity的理解.activity首先是一个java类,我们创建一个新的ac ...

  8. [APAC]导入图片至Word,然后按规则命名(2/2)

    #将所有docx文件改成可读 Set-ItemProperty -Path "e:\screenshot\*.docx" -Name IsReadOnly -Value $fals ...

  9. 【GK101 谐波数据生成器】上位机软件升级(版本:1.1)

    ============================= 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:ht ...

  10. GridView 下拉搜索

    /** * 下拉筛选 * @column string 字段 * @value mix 字段对应的值,不指定则返回字段数组 * @return mix 返回某个值或者数组 */ public stat ...