要搭建Redis 环境
主库 127.0.0.1:7501
从库两个 127.0.0.1:7502 、 127.0.0.1:7503
Sentinel三个 127.0.0.1:7504、127.0.0.1:7505、127.0.0.1:7506
一、下载及安装
参照:http://www.runoob.com/redis/redis-install.html
二、搭建Redis集群
建一个文件夹Redis-sentinel,复制6个Redis-x64文件夹进去,分别命名如下:
主库:Redis-7501
从库:Redis-7502、Redis-7503
Sentinel:Redis-7504、Redis-7505、Redis-7506
三、启动主库
修改配置文件redis.windows.conf
port 7501 //修改端口
启动:cmd进入文件夹Redis-7501,运行redis-server.exe redis.windows.conf
四、启动从库
修改配置文件redis.windows.conf
port 7502 //修改端口
slaveof 127.0.0.1 7501 // 设置主库
启动:cmd进入文件夹Redis-7502,运行redis-server.exe redis.windows.conf
同理启动 Redis-7503
五、sentinel部署
在文件夹Redis-7504中添加 sentinel.conf,内容如下
port 7504 // 设置Sentinel服务运行的端口
sentinel monitor mymaster 127.0.0.1 7501 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 15000
说明:
1.sentinel monitor mymaster 127.0.0.1 7501 2
Sentinel监视名为mymaster的主redis实例127.0.0.1:7501,判断主实例失效至少需要2个 Sentinel进程的同意
2.sentinel down-after-milliseconds mymaster 5000
指定Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。
只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移。
只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行。
3.sentinel parallel-syncs mymaster 1
指定在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
4.sentinel failover-timeout mymaster 15000
如果在该时间(ms)内未能完成failover操作,则认为该failover失败
启动:cmd进入文件夹Redis-7504,运行redis-server.exe sentinel.conf --sentinel
六、检查Redis集群
cmd进入文件夹Redis-7501,运行redis-cli.exe -h 127.0.0.1 -p 7501
输入info,可看到
......
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=7502,state=online,offset=771739,lag=1
slave1:ip=127.0.0.1,port=7503,state=online,offset=771739,lag=1
......
说明当前redis为主,有两个从库,分别为127.0.0.1:7502、127.0.0.1:7503
七、检查sentinel
cmd进入文件夹Redis-7504,运行redis-cli.exe -h 127.0.0.1 -p 7504
输入info sentinel,可看到
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:7501,slaves=2,sentinels=3
说明有3个sentinel已经运行
注:可shutdown127.0.0.1:7501,sentinel会在5秒后把127.0.0.1:7502修改为主库,重新启动的127.0.0.1:7501会自动成为其中一个从库
八、C#访问
引用ServiceStack.Text.dll、ServiceStack.Redis.dll、ServiceStack.Interfaces.dll、ServiceStack.Common.dll
注:版本要高一些,以下测试代码,上面4个类库均在4.0以上
1.实例化
var hosts = "127.0.0.1:7504;127.0.0.1:7505;127.0.0.1:7506".Split(';');
ServiceStack.Redis.RedisSentinel sentinel = new ServiceStack.Redis.RedisSentinel(hosts, "mymaster");
var redisManager=sentinel.Start();
2.访问
redisManager.GetClient().Set<string>("test", "123");
redisManager.GetClient().Get<string>(“test”);
代码就不说明了