Redis存在三种级别的分布式部署:主从复制、主从切换、集群配置,推荐使用主从切换模式。

主从复制

  1. 启动主服务:端口6379
  2. 启动从服务:端口6380, 配置文件中加上 slaveof 127.0.0.1 6379,启动后服务会成为6379的从服务,自动同步6379的操作
  3. 代码中的配置

  

  readWriteHosts:配置为主服务的地址 localhost:6379

  readOnlyHosts:配置为从服务的地址 localhost:6380

  4. 该模式可以实现读写分离,提高系统的整体性能;可以在主服务上禁止保存到磁盘,在从服务器上开启保存到磁盘,提高主服务的性能。

主从切换

当主服务出错时,主从复制不会自动恢复,会处于只读状态。Redis提供了哨兵节点可以实现主从切换。

  1. 启动哨兵节点:redis-server.exe ..\sentinel_26378.conf  --sentinel

port 26378

sentinel monitor mymaster 127.0.0.1 6380 1

  哨兵节点的主要配置是端口号(26378)和监视的服务配置(sentinel monitor <master-name> <ip> <redis-port> <quorum>),quorum是为了实现主从切换最少需要的投票节点,一定要小于启动的哨兵节点数,否则无法实现主从切换。

  2. 在代码中的使用

var sentinelHosts = new[] { "127.0.0.1:26378" };

var sentinel = new RedisSentinel(sentinelHosts, masterName: "mymaster");

var redisClientManager = sentinel.Start();

using (IRedisClient redis = redisClientManager.GetClient())

{

redis.Set("dateTimeNow", DateTime.Now.ToString());

}

using(IRedisClient redis = redisClientManager.GetReadOnlyClient())

{

string dateTimeNow = redis.Get<string>("dateTimeNow");

}

  3. 在实际中可以配置多台哨兵,提高整体的稳定性。哨兵节点的花销比较小,可以与主、从服务在一台主机上。

集群配置

参考 http://www.cnblogs.com/xling/p/5253063.html

  1. 下载 RubyInstaller

http://rubyinstaller.org/downloads/

  2. 安装 GEM,Redis 的 ruby 支持环境

    gem install redis

  3. 新建6个子文件夹:7000,7001,7002,7003,7004,7005,修改对应的redis.config

port 7000

cluster-enabled yes

cluster-config-file nodes-7000.conf

    cluster-enabled是开启集群模式

  4. 为方便启动这些 Redis 实例,新建如下 bat 文件:

@echo off
cd c:\Redis
start Redis-Server ./7000/redis.conf
start Redis-Server ./7001/redis.conf
start Redis-Server ./7002/redis.conf
start Redis-Server ./7003/redis.conf
start Redis-Server ./7004/redis.conf
start Redis-Server ./7005/redis.conf

  5. 创建群集 :redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

    redis-trib.rb位于redis\src下面。

    --replicas1即自动分配一个Slave,如果想手动指定Slave ,将该值变为0即可。上面的命令会创建3个主服务、3个从服务。操作成功会返回如下页面。

  6. 自此,集群就创建好了。可以在redis-cli.exe 中输入cluster info查看

  7. 添加、删除节点redis-trib.rb add-node 127.0.0.1:9007 127.0.0.1:9008、redis-trib.rb del-node 127.0.0.1:9001 6fd2df0fa12e0ce5ea150f03bdb6a969a189d885 --该ID为9004节点ID

  8. 问题:对于集群,c#的驱动库Service.Stack.Redis、StackExchange.Redis都没有处理集群连接的情况,但网上有改造Service.Stack.Redis支持集群的方案

Redis的分布式配置的更多相关文章

  1. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  2. 用Redis构建分布式锁-RedLock(真分布)

    在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现一个分布式锁管理器,但是这些库实现的方式差别很大,而且很多简单的实现其实只需采用稍微增 ...

  3. Redis实现分布式锁

    http://redis.io/topics/distlock 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现一个分布式锁管理器,但 ...

  4. [转载] 基于Redis实现分布式消息队列

    转载自http://www.linuxidc.com/Linux/2015-05/117661.htm 1.为什么需要消息队列?当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消 ...

  5. 在AspNetCore 中 使用Redis实现分布式缓存

    AspNetCore 使用Redis实现分布式缓存 上一篇讲到了,Core的内置缓存:IMemoryCache,以及缓存的基础概念.本篇会进行一些概念上的补充. 本篇我们记录的内容是怎么在Core中使 ...

  6. 用redis实现分布式锁,秒杀案例(转)

    分布式锁的简单实现代码: 需要的jar包: jedis-2.9.0.jar. commons-pool2-2.4.2.jar import java.util.List; import java.ut ...

  7. 基于Redis的分布式锁真的安全吗?

    说明: 我前段时间写了一篇用consul实现分布式锁,感觉理解的也不是很好,直到我看到了这2篇写分布式锁的讨论,真的是很佩服作者严谨的态度, 把这种分布式锁研究的这么透彻,作者这种技术态度真的值得我好 ...

  8. 基于 Redis 的分布式锁

    前言 分布式锁在分布式应用中应用广泛,想要搞懂一个新事物首先得了解它的由来,这样才能更加的理解甚至可以举一反三. 首先谈到分布式锁自然也就联想到分布式应用. 在我们将应用拆分为分布式应用之前的单机系统 ...

  9. 分布式配置中心 携程(apollo)

    1.传统配置文件与分布式配置文件区别 传统配置文件:如果修改了配置文件,需要重新打包发布,重新发布服务,而且每个环境的变更配置文件,比较繁琐. 分布式配置文件:将配置文件注册到配置中心上去,可以使用分 ...

随机推荐

  1. 【Mac + Python3.6 + ATX基于facebook-wda】之IOS自动化(一):WebDriverAgent安装

    此篇介绍如何安装WebDriverAgent,下一篇介绍facebook-wda库的安装使用以及自动化脚本的开发. 前言: 对于iOS的应用的测试,如果不需要用到图像识别,推荐使用这个项目facebo ...

  2. python django -2 ORM模型

    ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...

  3. ExtJs学习-搭建开发环境

    Extjs是一个非常棒的ajax框架,可以用来开发十分绚丽外观的客户端框架,能使B/S框架更加具有活力.它是一个用javascript编写的框架,与后台技术无关的ajax框架.因此,可以把ExtJs使 ...

  4. linux各种路径小结

    man路径 /etc/manpath.config $MANPATH include路径 $C_INCLUDE_PATH $CPLUS_INCLUDE_PATH 动态链接库的路径 $LD_LIBRAR ...

  5. linux命令之面试题1

    1.请解释下列10个shell命令的用途 top:是linux下常用的性能分析工具,能够实时的显示系统中各个进程的资源占用情况,类似于windows的资源管理器,查看系统的cpu,内存,运行时间,交互 ...

  6. linq内联左联

    内联:没有into 左联:有into 例子: from GoodsStore in this.GetCurrentDbSession.Tbl_OfficeSupplies_GoodsStoreDLL. ...

  7. 循环遍历完成后再进行else判断

    有时需要在循环遍历完后再进行else操作,通常的办法是在循环前设置一个flag,用于判断.具体例子如下:

  8. 部署vuejs dist文件,通过node.js编译

    前期准备: 1. Linux环境,安装配置node.js ① 下载地址:http://nodejs.cn/download/  ,下载linux 64位 ② 已编译好的压缩包,解压到指定目录 cd / ...

  9. java 对list 排序

    Comparable用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: /*** 根据order对User排序*/public  ...

  10. Anker—工作学习笔记

    1.前言 最近在项目中用nginx做反向代理,需要动态生成nginx的配置.大概流程是用户在页面上新增域名.http或https协议以及端口信息,后台会根据域名自动生成一个nginx的server配置 ...