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.240master
192.168.0.241slave
192.168.0.242slave

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

posted @ 2021-03-07 21:56  gudian  阅读(36)  评论(0)    收藏  举报