Redis存在三種級別的分佈式部署:主從複製、主從切換、集羣配置,推薦使用主從切換模式。html
readWriteHosts:配置爲主服務的地址 localhost:6379node
readOnlyHosts:配置爲從服務的地址 localhost:6380redis
4. 該模式能夠實現讀寫分離,提升系統的總體性能;能夠在主服務上禁止保存到磁盤,在從服務器上開啓保存到磁盤,提升主服務的性能。c#
當主服務出錯時,主從複製不會自動恢復,會處於只讀狀態。Redis提供了哨兵節點能夠實現主從切換。ruby
1. 啓動哨兵節點:redis-server.exe ..\sentinel_26378.conf --sentinel服務器
port 26378分佈式
sentinel monitor mymaster 127.0.0.1 6380 1ide |
哨兵節點的主要配置是端口號(26378)和監視的服務配置(sentinel monitor <master-name> <ip> <redis-port> <quorum>),quorum是爲了實現主從切換最少須要的投票節點,必定要小於啓動的哨兵節點數,不然沒法實現主從切換。性能
2. 在代碼中的使用spa
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:900八、redis-trib.rb del-node 127.0.0.1:9001 6fd2df0fa12e0ce5ea150f03bdb6a969a189d885 --該ID爲9004節點ID
8. 問題:對於集羣,c#的驅動庫Service.Stack.Redis、StackExchange.Redis都沒有處理集羣鏈接的狀況,但網上有改造Service.Stack.Redis支持集羣的方案。