Redis Sentinel安装与部署,实现redis的高可用
2018-02-24 20:40
591 查看
前言
对于生产环境,高可用是避免不了要面对的问题,无论什么环境、服务,只要用于生产,就需要满足高可用;此文针对的是redis的高可用。接下来会有系列文章,该系列是对spring-session实现分布式集群session的共享的完整阐述,同时也引伸出缓存的实现;而此篇是该系列的第一篇。
github地址:https://github.com/youzhibing/redis
环境准备
redis版本:redis-3.0.0linux:centos6.7
ip:192.168.11.202, 一台服务器上搭建搭建全部redis实例,包括数据节点实例以及哨兵(sentinel)实例
客户端jedis,基于spring-boot
redis主从复制
搭建一主二从的主从环境1、redis安装
安装很简单,网上资料很多,redis官网也有说明;主要就是3步:解压,make,make install2、数据节点配置文件
redis解压后,redis home目录下有redis配置的样例文件,我们不直接在此文件上就行修改,在redis home目录下新建文件夹master_slave,将配置文件都放于此目录下master配置文件:redis-6379.conf
port 6379 bind 192.168.11.202 requirepass "myredis" daemonize yes logfile "6379.log" dbfilename "dump-6379.rdb" dir "/opt/soft/redis/data" #如若master设置了认证密码,那么所有redis数据节点都配置上masterauth属性 masterauth "myredis"
slave-1配置文件:redis-6380.conf
port 6380 bind 192.168.11.202 requirepass "myredis" daemonize yes logfile "6380.log" dbfilename "dump-6380.rdb" dir "/opt/soft/redis/data" #如若master设置了认证密码,那么所有redis数据节点都配置上masterauth属性 masterauth "myredis" slaveof 192.168.11.202 6379
slave-2配置文件:redis-6381.conf
port 6381 bind 192.168.11.202 requirepass "myredis" daemonize yes logfile "6381.log" dbfilename "dump-6381.rdb" dir "/opt/soft/redis/data" #如若master设置了认证密码,那么所有redis数据节点都配置上masterauth属性 masterauth "myredis" slaveof 192.168.11.202 6379
3、节点启动
如下相关路径需要根据自己的情况进行改动,可能和我的不一样[root@slave1 master_slave]# cd /opt/redis-3.0.0/master_slave/ [root@slave1 master_slave]# ./../src/redis-server redis-6379.conf [root@slave1 master_slave]# ./../src/redis-server redis-6380.conf [root@slave1 master_slave]# ./../src/redis-server redis-6381.conf
确认主从关系
[root@slave1 master_slave]# ./../src/redis-cli -h 192.168.11.202 -p 6379 -a myredis info replication # Replication role:master connected_slaves:2 slave0:ip=192.168.11.202,port=6380,state=online,offset=393,lag=0 slave1:ip=192.168.11.202,port=6381,state=online,offset=393,lag=0 master_repl_offset:393 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:392
还可以从从节点视角来看:[root@slave1 master_slave]# ./../src/redis-cli -h 192.168.11.202 -p 6380 -a myredis info replication
如若进行顺利,按如上配置,一主二从环境搭建完毕
4、从节点作用
主要两个作用:1、作为主节点的一个备份,一旦主节点出现故障,从节点可以作为后备"顶"上来,并且保证数据尽量不丢失(主从复制是最终一致性);2、从节点可以拓展主节点的能力,一旦主节点不能支撑大并发的读操作,从节点可以在一定程度上帮助主节点分担读压力5、主从复制问题
1、一旦主节点出现故障,需要手动将一个从节点晋升为主节点,同时需要修改应用方的主节点地址,还需要命令其他从节点去复制新的主节点,整个过程需要人工干预2、主节点的写能力受到单机的限制
3、主节点的存储能力受到单机的限制
redis sentinel部署
此片主要讲通过sentinel解决上述问题1,问题2、3则在下篇博客进行说明1、3个sentinel节点的配置文件基本一致,区别的只是端口
sentinel-26379.confport 26379 daemonize yes logfile "26379.log" dir "/opt/soft/redis/data" sentinel monitor mymaster 192.168.11.202 6380 2 #redis数据master节点设置了认证,则需要如下配置 sentinel auth-pass mymaster myredis sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000
sentinel-26380.conf
port 26380 daemonize yes logfile "26379.log" dir "/opt/soft/redis/data" sentinel monitor mymaster 192.168.11.202 6380 2 #redis数据master节点设置了认证,则需要如下配置 sentinel auth-pass mymaster myredis sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000
sentinel-26381.conf
port 26381 daemonize yes logfile "26379.log" dir "/opt/soft/redis/data" sentinel monitor mymaster 192.168.11.202 6380 2 #redis数据master节点设置了认证,则需要如下配置 sentinel auth-pass mymaster myredis sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000
2、启动sentinel
[root@slave1 master_slave]# ./../src/redis-sentinel sentinel-26379.conf [root@slave1 master_slave]# ./../src/redis-sentinel sentinel-26380.conf [root@slave1 master_slave]# ./../src/redis-sentinel sentinel-26381.conf
3、sentinel确认
[root@slave1 master_slave]# ./../src/redis-cli -h 192.168.11.202 -p 26379 info Sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 master0:name=mymaster,status=ok,address=192.168.11.202:6379,slaves=2,sentinels=3
Redis Sentinel 最终拓扑结构
package com.lee.redis; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisSentinelPool; @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) public class RedisTest { private static final Logger LOGGER = LoggerFactory.getLogger(RedisTest.class); @Autowired private JedisSentinelPool sentinelPool; @Test public void getNameTest() { Jedis jedis = null; try { jedis = sentinelPool.getResource(); String name = jedis.get("name"); System.out.println("name is " + name); } catch(Exception e) { LOGGER.error(e.getMessage(), e); } finally { if (jedis != null) { jedis.close(); } } } }
View Code
更多详情请上我的github
运行RedisTest.java的getNameTest方法(name属性已经在redis中设置,没设置的需要提前设置),得到结果:
注意点
1、有人可能会有这样的疑问:为什么通过sentinel来获取redis的连接,而不是直接连接master来获取redis连接呢?试想一下,客户端直接通过master节点获取redis连接,如果master节点挂掉了,虽然Redis Sentinel可以完成故障转移,但是客户端无法获取这个变化,那么客户端就无法获取redis连接了;
最了解master节点信息的就是Sentinel节点集合,所以通过sentinel来获取redis连接就能满足高可用的要求了。
2、redis master的故障转移不影响客户端连接代码, 但是转移期间内,通过sentinel是获取不到主节点的连接的, 因为转移期间内master节点还没被选举出来;
参考
《Redis开发与运维》http://www.redis.cn/topics/sentinel.html
相关文章推荐
- Redis Sentinel安装与部署,实现redis的高可用
- 组件-------(一)redis系列--安装部署redis+实现redis分布式缓存 java+Spring+redis
- Redis之Sentinel高可用安装部署
- redis单机版的安装部署以及java实现
- redis单机版的安装部署以及java实现
- 安装部署redis+实现redis分布式缓存 java+Spring+redis
- redis部署及其高可用方案:主从+sentinel,安装步骤
- 组件-------(一)redis系列--安装部署redis+实现redis分布式缓存 java+Spring+redis
- 利用lvs+keepalived实现高可用负载均衡环境的部署(安装常见错误)
- Redis之Sentinel高可用安装部署
- CentOS 7.3 Sentinel实现Redis集群高可用部署
- Linux下redis安装部署
- C#制作“安装和部署”时,实现软件开机启动
- C#制作“安装和部署”时,实现软件开机启动
- Exchange server 2010 安装部署之三,实现Exchange2010内外网收发邮件
- CentOS 6.2利用drbd+pacemaker实现redis高可用
- Exchange server 2010 安装部署之三,实现Exchange2010内外网收发邮件
- Installshield2010实现web部署和数据库安装示例
- VS制作安装部署文件后,快捷方式属性中“打开文件位置”不可用
- Linux下redis安装部署