Redis高可用哨兵模式搭建
一主二从三哨兵模式
Redis安装
1、Redis下载
wget http://download.redis.io/releases/redis-4.0.11.tar.gz
2、解压
tar zxcf redis-4.0.11.tar.gz
3、进入目录
cd redis-4.0.11/
4、安装
cd src
make
yum install -y tcl
make test
make install PREFIX=/home/redis-sentinel #指定目录安装,注意 PREFIX 大写
Redis主从配置
5、配置文件
mkdir /home/redis-sentinel/conf
cp redis.conf /home/redis-sentinel/conf
cd /home/redis-sentinel/conf
vi redis.conf #编辑配置文件
将bind 127.0.0.1注释掉,这个是绑定能访问redis的ip地址,如果指定,那么只有指定的ip可以访问redis
将daemonize no修改为daemonize yes,设置为后台启动
将protected-mode yes修改为protected-mode no,设置为非保护模式,这样可以进行远程访问,如果不改,哨兵配置的如果是真实ip地址(非127.0.0.1),则没法访问。
非保护模式会有安全问题,我们可以给redis和哨兵设置密码,增强安全性。
cp redis.conf redis-6380.conf
cp redis.conf redis-6381.conf #复制两份
分别修改`redis-6380.conf和redis-6381.conf的端口号等并且加入一下配置。
slaveof [主节点ip] [主节点端口号] 如:slaveof 192.168.1.27
6、启动redis
./redis-server ../conf/redis.conf
./redis-server ../conf/redis-6380.conf
./redis-server ../conf/redis-6381.conf
到此Redis的主从配置就完成了,可以通过
./redis-cli -p [端口号]
登录redis进行测试主从复制是否成功。
Redis哨兵配置
1、从下载文件中复制sentinel.conf配置文件到安装目录下
2、在配置文件中修改以下内容
port 26379 #哨兵的端口
sentinel monitor s1 <ip地址> 6379 2
sentinel monitor s2 <ip地址> 6379 2 # 这里是主节点的配置,如果有多个master节点,则配置多行,2代表选举的时候新的leader需要获得2票
protected-mode no
注意:
此处的<ip地址>不要写127.0.0.1,否则在使用程序连接哨兵的时候,主从切换后,程序自动获取到的IP地址是127.0.0.1:端口,这意味着应用程序服务器上可能是没有Redis的(如果有也可能不是同一个Redis)。
protected-mode :关闭保护模式(默认情况下,redis node和sentinel的protected-mode都是yes,在搭建集群时,若想从远程连接redis集群,需要将redis node和sentinel的protected-mode修改为no,若只修改redis node,从远程连接sentinel后,依然是无法正常使用的,且sentinel的配置文件中没有protected-mode配置项,需要手工添加。依据redis文档的说明,若protected-mode设置为no后,需要增加密码证或是IP限制等保护机制,否则是极度危险的。)
3、将此配置文件再复制两份,分别是sentinel-26479.conf和sentinel-26579.conf
4、分别修改复制配置文件中的端口号
5、启动哨兵
./redis-sentinel ../conf/sentinel.conf
./redis-sentinel ../conf/sentinel-26479.conf
./redis-sentinel ../conf/sentinel-26579.conf #或者./redis-server ../conf/sentinel-26579.conf --sentinel
到此哨兵配置就结束了,可以模拟宕机的情况来测试主从切换。
6、如果以上配置出现了错误,就把redis自动生成的代码删掉,再试试。
#删掉以下代码,重试
sentinel myid 82198d08eeae6a1123d935baa4aab0184ff42210
# Generated by CONFIG REWRITE
sentinel config-epoch mymaster 3
sentinel leader-epoch mymaster 3
sentinel known-slave mymaster 172.19.246.6 6379
sentinel known-slave mymaster 172.19.246.5 6379
sentinel known-sentinel mymaster 172.19.246.6 26379 fd6559342c1da75344258efc09027693863b61b6
sentinel known-sentinel mymaster 172.19.246.7 26379 82198d08eeae6a1123d935baa4aab0184ff42210
Springboot整合哨兵模式
1、依赖引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
1、yaml文件的配置
spring.redis.sentinel.master=mymaster #哨兵集群的名称
spring.redis.sentinel.nodes=192.168.1.112:26379,192.168.1.112:26479,192.168.1.112:26579 #哨兵节点
#spring.redis.sentinel.password=123456 如果有密码则设置密码
# 以下配置是org.springframework.boot.autoconfigure.data.redis低版本才有的。。
spring.redis.pool.max-active=50 #最大连接数
spring.redis.pool.max-idle=10 #最大等待连接数
spring.redis.pool.max-wait=10000 #最大等待毫秒数
spring.redis.pool.min-idle=5 #最小等待连接数
spring.redis.timeout=0 #超时时间
# 高版本的连接池的配置,选一个就可以
#spring.redis.jedis.pool.max-active=50
#spring.redis.jedis.pool.max-idle=10
#spring.redis.jedis.pool.max-wait=10000ms
#spring.redis.jedis.pool.min-idle=5
#spring.redis.jedis.timeout=0
spring.redis.lettuce.pool.max-active=50
spring.redis.lettuce.pool.max-wait=10000ms
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=5
2、使用spring-data-redis中的RedisTemplate可以完成自动配置,开箱即用
@Autowired
private RedisTemplate redisTemplate;
注意redisTemplate必须是这个名,才能自动注入,这是源码中写好的org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
@Bean
@ConditionalOnMissingBean(
name = {"redisTemplate"}
)