Redis 单机,Sentinel,Cluster 集群搭建教程
Redis 安装(基础)
#下载解压
wget https://download.redis.io/releases/redis-6.2.0.tar.gz
tar -zxvf redis-6.2.0.tar.gz
# 安装gcc编译安装
yum install -y gcc
#升级gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
gcc -v
#编译
cd redis-6.2.0
make
#安装并指定安装目录
make install PREFIX=/usr/local/redis
#拷贝redis.conf到到对应目录
cp redis /usr/local/redis
#修改配置文件并启动
cd /usr/local/redis
vim redis.conf
# bind 注释掉 不绑定ip
# protected-mode no 关闭自我保护机制
#port 修改redis端口
#daemonize yes 修改为yes 守护进程启动
#pidfile ./redis-7001.pid 修改pid存放路径
#requirepass 配置redis密码
#appendonly yes 开启aof
#修改完配置后关闭服务器启动redis
./bin/redis-server redis.conf
Redis 主从复制
单台redis在内存方面和处理请求方面的能力毕竟有限,因此我们可以搭建主从复制来解决。
master 负责读写请求 ,slave负责读请求。
具体的原理可以看Redis主从复制原理总结
直接开干!
服务器详情
| 服务器ip | 描述 |
|---|---|
| 192.168.0.240 | master |
| 192.168.0.241 | slave |
| 192.168.0.242 | slave |
192.168.0.240 服务器:
#修改配置文件
bind #注释掉 不绑定ip
protected-mode no #关闭自我保护机制
port #修改redis端口
daemonize yes #修改为yes 守护进程启动
pidfile ./redis-7001.pid #修改pid存放路径
requirepass #配置redis密码
#主从配置
masterauth "redis" #配置master的密码,建议master也配上
replica-priority 1 #选举权重 0-100之间 越小成为master的几率就越高
192.168.0.241 服务器:
#修改配置文件
bind #注释掉 不绑定ip
protected-mode no #关闭自我保护机制
port #修改redis端口
daemonize yes #修改为yes 守护进程启动
pidfile ./redis-7001.pid #修改pid存放路径
requirepass #配置redis密码
#主从配置
replicaof 192.168.0.240 6379 #master的ip和端口
masterauth "redis" #配置master的密码,建议master也配上
replica-priority 1 #选举权重 0-100之间 越小成为master的几率就越高
192.168.0.242 服务器:
#修改配置文件
bind #注释掉 不绑定ip
protected-mode no #关闭自我保护机制
port #修改redis端口
daemonize yes #修改为yes 守护进程启动
pidfile ./redis-7001.pid #修改pid存放路径
replicaof 192.168.0.240 6379 #master的ip和端口
masterauth "redis" #配置master的密码,建议master也配上
replica-priority 1 #选举权重 0-100之间 越小成为master的几率就越高
配置完成后先启动 master 后启动 2个slave 验证是否只有master可写,slave是否可同步数据
sed -i "s/7001/7004/g" `grep 7001 -rl conf/redis.conf`
Redis 哨兵
redis主从复制有个缺点就是master一旦挂了2整个集群就没办法对外提供写请求了,因此Redis提供了哨兵模式监控各个节点,当master挂了会重新选举master
具体原理可以看 Redis哨兵机制
基于 Redis 主从复制开干!
在Redis 主从复制的每个机器分别开一个sentinel服务
192.168.0.240 新建 sentinel.conf
#工作目录
dir "/usr/local/redis/logs/"
#日志存放位置
logfile "/usr/local/redis/logs/sentinel.log"
# 开启守护进程运行
daemonize yes
# 绑定ip
#bind 1.1.1.2 127.0.0.1
#sentinel端口
port 26379
# master ip 端口 2 表示至少2个服务都确定master挂了才会进行选举
sentinel monitor mymaster 192.168.0.240 6379 2
# master的密码
sentinel auth-pass mymaster 密码
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
192.168.0.241 新建 sentinel.conf
#工作目录
dir "/usr/local/redis/logs/"
#日志存放位置
logfile "/usr/local/redis/logs/sentinel.log"
# 开启守护进程运行
daemonize yes
# 本机ip
#bind 1.1.1.2 127.0.0.1
#sentinel端口
port 26379
# master ip 端口 2 表示至少2个服务都确定master挂了才会进行选举
sentinel monitor mymaster 192.168.0.241 6379 2
# master的密码
sentinel auth-pass mymaster 密码
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
192.168.0.242 新建 sentinel.conf
#工作目录
dir "/usr/local/redis/logs/"
#日志存放位置
logfile "/usr/local/redis/logs/sentinel.log"
# 开启守护进程运行
daemonize yes
# 本机ip
#bind 1.1.1.2 127.0.0.1
#sentinel端口
port 26379
# master ip 端口 2 表示至少2个服务都确定master挂了才会进行选举
sentinel monitor mymaster 192.168.0.241 6379 2
# 这里写master的密码
sentinel auth-pass mymaster 密码
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
配置完成后先启动 master 的sentinel 在启动 slave的sentinel
bin/redis-sentinel sentinel.conf
SpringBoot 配置哨兵模式
#redis 的密码
spring.redis.password=redis
#mater节点名称
spring.redis.sentinel.master=mymaster
#所有sentinel节点信息
spring.redis.sentinel.nodes=192.168.0.240:16379,192.168.0.240:26379,192.168.0.240:36379
#sentinel密码
spring.redis.sentinel.password=redis
//配置redis 序列化
@Configuration
public class RedisConfig {
private static final StringRedisSerializer STRING_SERIALIZER = new StringRedisSerializer();
private static final GenericJackson2JsonRedisSerializer JACKSON__SERIALIZER = new GenericJackson2JsonRedisSerializer();
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
//设置缓存过期时间
RedisCacheConfiguration redisCacheCfg = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofHours(1))
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(STRING_SERIALIZER))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(JACKSON__SERIALIZER));
return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheCfg)
.build();
}
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
// 配置redisTemplate
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
// key序列化
redisTemplate.setKeySerializer(STRING_SERIALIZER);
// value序列化
redisTemplate.setValueSerializer(JACKSON__SERIALIZER);
// Hash key序列化
redisTemplate.setHashKeySerializer(STRING_SERIALIZER);
// Hash value序列化
redisTemplate.setHashValueSerializer(JACKSON__SERIALIZER);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
Redis Cluster
1 先搭建起来6个正常的redis
主机信息
| 主机 | 描述 |
|---|---|
| 192.168.0.241:7001 | 正常搭建 |
| 192.168.0.241:7002 | 正常搭建 |
| 192.168.0.241:7003 | 正常搭建 |
| 192.168.0.241:7004 | 正常搭建 |
| 192.168.0.241:7005 | 正常搭建 |
| 192.168.0.241:7006 | 正常搭建 |
每个redis配置文件基本一样,注意区分 port 和 文件目录
#基础配置
bind # 注释掉 不绑定ip
protected-mode no # 关闭自我保护机制
port #修改redis端口
daemonize yes #修改为yes 守护进程启动
pidfile ./redis-7001.pid #修改pid存放路径 注意不同redis不一样
requirepass #配置redis密码
appendonly yes #开启aof
dir #redis 持久化文件存放路径
#集群配置
cluster-enabled yes #开启集群模式
cluster-config-file nodes-7006.conf #集群配置文件 自动生成
cluster-node-timeout 5000 # 运行node节点超时时间 超时5秒后才剔除
masterauth redis # master的密码
6个redis全部配置完配置文件后 重启。
2通过 redis-cli 创建集群
# -a 指定 密码 (如果没有设置密码不用) --cluster-replicas 表示每个master只创建1台slave
bin/redis-cli --cluster create 192.168.0.241:7001 192.168.0.241:7002 192.168.0.241:7003 192.168.0.241:7004 192.168.0.241:7005 192.168.0.241:7006 --cluster-replicas 1 -a redis
执行后输入yes 出现
… [OK]
All 16384 slots covered
成功后显示:

集群常用命令
#查看当前集群信息 -p 指定端口 -a 输入密码
redis-cli -p 7001 -a redis cluster info
#查看集群所有节点信息
redis-cli -p 7001 -a redis cluster nodes
验证集群:
#redis-cli 以cluster 启动 -h 设置 ip -p 设置端口 -a 设置 密码
redis-cli -c -h 192.168.0.241 -p 7001 -a redis
#随便设置一个key 看是不是出现转发的情况
set a 1

SpringBoot 配置 redis cluster 集群
spring.redis.password=redis
spring.redis.cluster.nodes=192.168.125.241:7001,192.168.125.241:7002,192.168.125.241:7003,192.168.125.241:7004,192.168.125.241:7005,192.168.125.241:7006

浙公网安备 33010602011771号