Redis主从集群以及sentinel集群安装和配置总结
来源:互联网 发布:windows日志看不懂 编辑:程序博客网 时间:2024/06/07 00:24
1. 单机单实例或多实例安装
单实例的安装步骤很简单
(1)首先去redis官网上下载最新的稳定版本(可以直接去redis中文官网http://www.redis.cn/download.html)
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
(2)下载的是压缩包,解压
tar xzf redis-4.0.1.tar.gz
(3)
加压出来的其实还是未编译链接的文件,redis是C实现的,需要执行编译链接最后才生成可执行文件。
cd redis-4.0.1
make
(4)
服务端和客户端启动程序都在src目录下
启动服务端
src/redis-server
启动客户端
src/redis-cli
--
这样就可以在客户端上进行读写操作了
(5)修改配置文件
daemonize yes
port 6380
pidfile /home/itzxyy/zrf/redis-4.0.1/pid/redis_6380.pid
logfile /home/itzxyy/zrf/redis-4.0.1/log/redis_6380.log
dbfilename dump_6380.rdb
dir /home/itzxyy/zrf/redis-4.0.1/redisdb/
其中daemonize
设置服务进程是否为后台进程,pidfile保存进程id,目的是防止重复启动相同端口的服务实例,后面试图启动同个实例进程时会先检查pid文件是否存在,如果存在则读取里面的进程id,并检查系统中是否存在这个pid的进程,如果存在则退出,否则则重新写入新的pid,并且写的时候对pid文件进行加锁防止其他进程竞争,dbfilename和dir就是持久化文件的文件名和保存目录路径,
注意还有个配置bind 默认是bind 127.0.0.1,也就是只接受本机上的客户端的连接访问,如果允许其他主机上的客户端访问,则可改成空或者0.0.0.0
单机多实例部署配置也比较简单,多搞一份config文件,修改部分内容(主要是端口号以及和端口号有关的命名),再启动一个实例进程即可。
2. 多实例主从配置(哨兵配置)
(1)去另外一台主机照上述流程安装redis,拷贝主节点的配置文件,这个配置其实也挺简单,只要修改一个配置项就行
slaveof 132.121.127.31 6379
--其他配置在目录结构相同的情况下可以保持不变,正常的启动命令
(2)如果需要增加哨兵集群监控,拷贝一份正常配置文件重命名为redis-sentinel-26380.conf并修改以下配置:
port 26380
pidfile /home/itzxyy/zrf/redis-4.0.1/pid/redis_26380.pid
logfile /home/itzxyy/zrf/redis-4.0.1/log/redis_26380.log
dbfilename dump_26380.rdb
增加以下关于哨兵的四行配置项(如果要监控多个主实例,则每个主实例都要四行配置项)
sentinel monitor mymaster 132.121.127.31 6380 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster180000
--然后执行redis-sentinel redis-sentinel-26379.conf把哨兵进程启起来。然后试着把监控的主节点kill掉,你会发现哨兵会发现然后把备节点切换成主节点,mastername保持不变。但是指向的实例发生改变。
如果这时候 把之前kill掉的旧主实例启起来,那么就旧实例会自动变成新主实例的从实例,并且redis会把slaveof 新主实例ip 端口回写到旧实例的配置文件中。如果这时候再去手工把新主实例进程kill掉,那么sentinel就会发现到,把新的从节点切换成备节点,并且把slaveof 新主实例ip 端口这行配置去掉。
有点需要注意的是,redis会经常动态地把当前的配置状态回写到配置文件中,有时候运行是你再去看配置文件时会发现已经和刚启动时差很多。
比如sentinel的配置文件运行时是这样的:
sentinel myid70c035923fd5e3f269abb4b7cc44deb97bxxxxx
sentinel monitor master-132.121.127.31:6379132.121.127.31 6379 2
sentinel config-epochmaster-132.121.127.31:6379 2
sentinel leader-epochmaster-132.121.127.31:6379 2
sentinel known-slavemaster-132.121.127.31:6379 132.121.127.32 6379
sentinel known-sentinelmaster-132.121.127.31:6379 132.121.127.32 26380f6fc2a34aa0bd239ef3286348d9d453exxxxxx
sentinel known-sentinelmaster-132.121.127.31:6379 132.121.127.32 2638172e17db4ba728668468e4ef9273b94f6a07xxxx
sentinel monitor master-132.121.127.31:6381132.121.127.31 6381 2
sentinel config-epochmaster-132.121.127.31:6381 0
sentinel leader-epochmaster-132.121.127.31:6381 0
sentinel known-slavemaster-132.121.127.31:6381 132.121.127.32 6381
# Generated by CONFIG REWRITE
sentinel known-sentinelmaster-132.121.127.31:6381 132.121.127.32 26380f6fc2a34aa0bd239ef3286348d9d453e4bdfxxxxxx
sentinel known-sentinel master-132.121.127.31:6381132.121.127.32 26381 72e17db4ba728668468e4ef9273b94f6a07xxxxx
sentinel monitor master-132.121.127.31:6380132.121.127.31 6380 2
sentinel config-epochmaster-132.121.127.31:6380 0
sentinel leader-epochmaster-132.121.127.31:6380 0
sentinel known-slavemaster-132.121.127.31:6380 132.121.127.32 6380
sentinel known-sentinelmaster-132.121.127.31:6380 132.121.127.32 26380f6fc2a34aa0bd239ef3286348d9d453e4bdfxxxx
sentinel known-sentinelmaster-132.121.127.31:6380 132.121.127.32 26381 72e17db4ba728668468e4ef9273b94f6a07xxxxx
sentinel current-epoch 2
--其实就是增加了sentinel进程启动后发现sentinel集群中其他sentinel节点的信息(包括id,监控的主从节点的关系),其中监控的主从节点的关系信息很重要,是上述主备之间能自动切换的保障。有个有意思的问题,我发现启动后,下面三行配置项居然被删掉了
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster180000
--有个解释:要是参数配置的是默认值,在sentinel运行时该参数会在配置文件文件里被删除掉,直接不显示
3. sentinel API操作
publicShardedJedisSentinelPool createShardedJedisSentinelPool(Set<HostAndPort>hostInfo,
Set<String>sentinels) {
// TODO Auto-generated methodstub
ShardedJedisSentinelPoolshardedJedisSentinelPool = new ShardedJedisSentinelPool(hostInfo, sentinels);
returnshardedJedisSentinelPool;
}
Set<HostAndPort> hostInfo = newHashSet<HostAndPort>();
HostAndPort hostAndPort1 =new HostAndPort("132.121.127.31",6379);
HostAndPort hostAndPort2 =new HostAndPort("132.121.127.31",6380);
HostAndPort hostAndPort3 =new HostAndPort("132.121.127.31",6381);
hostInfo.add(hostAndPort1);
hostInfo.add(hostAndPort2);
hostInfo.add(hostAndPort3);
String[] sentinelList ={"132.121.127.32:26379","132.121.127.32:26380","132.121.127.32:26381"};
Set<String> sentinels =new HashSet<String>(Arrays.asList(sentinelList));
ShardedJedisSentinelPool pool= redisDao.createShardedJedisSentinelPool(hostInfo, sentinels);
Jedis jedis =pool.getResource(args[0]);
System.out.println(jedis.getClient().getHost()+jedis.getClient().getPort());
jedis.set(args[0], args[1]);
jedis.close();
pool.close();
--其中ShardedJedisSentinelPool的实现请看《如何简单地实现易用的ShardedJedisSentinelPool》
- Redis主从集群以及sentinel集群安装和配置总结
- Redis主从集群的Sentinel配置
- Redis主从集群的Sentinel配置
- redis主从复制+sentinel集群
- redis-sentinel集群安装
- 搭建Redis主从集群搭建、redis-sentinel的配置以及Jedis对Sentinel的使用[ by 嗡汤圆 ]
- Redis+Sentinel集群安装与配置
- redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比
- redis主从和集群配置
- Redis集群:redis主从自动切换Sentinel
- 《redis集群sentinel主从复制》笔记
- redis集群和Sentinel功能
- redis 主从 集群配置
- redis安装,主从集群
- Redis Sentinel;Redis Sentinel配置;redis集群;redis故障转移
- Redis Sentinel;Redis Sentinel配置;redis集群;redis故障转移
- hadoop正式学习之redis---redis的主从复制与Sentinel以及集群搭建
- 基于Redis Sentinel主从切换以及Sharding分片的Redis集群高可用方案
- webview系列:业内知名公司的混合开发实践
- 浅说《测试用例》----给测试新手的
- File and Code templates 不换行的解决方法
- Linux学习之前
- Metasploit学习笔记(一) 信息收集
- Redis主从集群以及sentinel集群安装和配置总结
- hdu 6047Maximum Sequence(贪心)
- php控制访问人数的方法
- webview系列:webview的其他问题
- POJ 2393 Yogurt factory(贪心)
- Linux基础命令学习
- 并查集详解(转)
- 字符集和字符编码(Charset & Encoding)
- spring学习之---spring整合Hibernate