Redis主从搭建(哨兵模式),springboot整合redis主从

相关文章:
redis主从复制(读写分离)
redis哨兵模式
Redis配置详解

一、Redis主从搭建

本文讲解用的是Redis5.0.10搭建一主二从
Redis官方下载连接:http://download.redis.io/releases/

IPPORT哨兵端口
Redis-master192.168.118.130637926379
Redis-slave01192.168.118.129637926379
Redis-slave02192.168.118.130637926379
江湖规矩,一般将哨兵(sentinel)端口设置为Redis端口前加2,其实没有什么要求,可以随便设置,只要不要端口冲突。

1、Linux下安装Redis

主服务器192.168.118.130

  • 下载Redis5.0.10.tar.gz,并上传只Linux服务器->解压
# 将redis解压到当前目录
tar -zxvf redis-5.0.10.tar.gz
# 将解压好的文件夹移到/usr/local下,并改名为redis
mv redis-5.0.10 /usr/local/redis
  • 编译redis
# 安装redis编译必备工具
yum install gcc-c++
# 进入redis目录下
cd /usr/local/redis
# 执行编译
make

走到下图结果,算是编译完成了
在这里插入图片描述

# 再执行下面语句
make install

在这里插入图片描述

2、Redis配置

  • 梳理文件,编写启动,停止脚本
    在配置redis.conf之前,我需要按我的习惯将各文件梳理一下
# 进入redis主目录
cd /usr/local/redis
# 创建目录bin(启动,停止命令),conf(配置文件),logs(日志),data(持久化数据)
mkdir bin
mkdir conf
mkdir logs
mkdir data
# 将redis目录下的redis.conf文件拷贝一份至conf文件夹下(redis主目录下的配置文件不动,作为备份)
cp redis.conf ./conf/
# 进入bin目录,在bin目录下写redis启动脚本,停止脚本
cd /usr/local/redis/bin
touch start.sh stop.sh
chmod 777 start.sh stop.sh

start.sh 脚本内容

#!/bin/sh
 
#您可以在此处修改redis-server和conf的所在路径
REDIS_SERVER="/usr/local/redis/src/redis-server"
REDIS_CLI="/usr/local/redis/src/redis-cli"
REDIS_CONF="/usr/local/redis/conf/redis.conf"
 
if [ ! -e $REDIS_SERVER ]; then
	echo "$REDIS_SERVER does not exist!"
	exit -1
fi
 
if [ ! -e $REDIS_CONF ]; then 
	echo "$REDIS_CONF does not exist!"
	exit -1
fi
 
cmd="ps -ef | grep ${REDIS_SERVER} | grep -v grep | grep -v vim | grep -v defunct | awk '{ print \$2 }'"
#echo $cmd
 
PID=$(eval ${cmd})
#echo $PID
 
if [ $PID"e" != "e" ]; then
	echo "redis-server is running, can't start"
	exit -1
else
	$REDIS_SERVER $REDIS_CONF &
fi
 
 
startfail=1
for i in `seq 0 180`
do
	PID=$(eval ${cmd})
	#echo $PID
	if [ $PID"e" != "e" ]; then
		${REDIS_SERVER} --version
		echo "Redis server is started..."
		startfail=0
		break
	fi
	sleep 1
done
 
exit $startfail

stop.sh脚本内容

#!/bin/sh
 
#您可以在此处修改redis-server的所在路径
REDIS_SERVER="/usr/local/redis/src/redis-server"
 
cmd="ps -ef | grep ${REDIS_SERVER} | grep -v grep | grep -v vim | grep -v defunct | awk '{ print \$2 }'"
#echo $cmd
 
PID=$(eval ${cmd})
 
if [ ${PID}"e" = "e" ]; then
	echo "redis-server is not started"
	exit -1
else
	kill $PID
fi
 
stopfail=1
for i in `seq 0 30`
do
	PID=$(eval ${cmd})
	#echo $PID
	if [ ${PID}"e" != "e" ]; then
		echo "redis-server is still running, waiting to stop[${i}]..."
	else
		echo "redis-server is stoped"
		stopfail=0
	   break
   	fi
	sleep 1
done
exit $stopfail
  • 配置redis.conf
    我这边只记录我修改了的配置项
# 这里配置是本机的网卡地址,表示外部通过什么网卡来连接访问redis,
# 配置0.0.0.0或者不配置表示所有网卡都可以,具体解释请看本文开始的【Redis配置详解】
bind 0.0.0.0
# 后台进程运行
daemonize yes
# redis日志
logfile "/usr/local/redis/logs/redis.log"
# redis持久化文件目录
dir "/usr/local/redis/data"
# redis密码
requirepass "123456"
# 最大redis内存,达到这个就会触发内存淘汰机制
maxmemory 500M
# 内存淘汰策略
maxmemory-policy volatile-lru
# 开启aof
appendonly yes
# 这是作为从服务器向主服务器连接时必备的密码,为什么这台服务器作为主节点也要配置这个参数呢,
# 其实在主服务宕机后又重启时,这台机器会成为slave节点,这时候如果没有这个配置项,会连不上
masterauth '123456'
  • 配置其余两台从redis服务
    所有配置同主服务器,只需要在redis.conf中加入一条
# 指定主服务器
replicaof 192.168.118.130 6379
  • 分别启动三台redis服务器(./start.sh)
# 进入主服务器客户端
[root@localhost redis]# /usr/local/redis/src/redis-cli -h 192.168.118.130 -p 6379
# 输入密码鉴权
192.168.118.130:6379> auth 123456
# 查看redis相关信息,我们这里只关注redis的主从配置信息
192.168.118.130:6379> info 

在这里插入图片描述
到这里Redis主从就搭建好了!!!

二、Redis哨兵模式搭建

虽然redis主从已经搭建完毕,但是当主节点宕机时,从节点并不会接手主节点的工作,只会傻傻得在那里不停地尝试连接主节点。然而这并不是我们想要的,我们希望主节点挂了后,从节点可以顶上去,让服务继续使用。

  • sentinel.conf配置,我们将redis主目录下的sentinel.conf复制一份进conf中
cd /usr/local/redis
cp sentinel.conf ./conf/
  • sentinel.conf配置详解
# 哨兵sentinel实例运行的端口
port 26379 
# 守护进程模式
daemonize yes
# 开启守护进程时,哨兵进程id记录地址
pidfile /var/run/redis-sentinel.pid
# 指明日志文件名
logfile "sentinel.log"
# 进程工作目录
dir "/usr/local/redis/logs"
# 哨兵节点定期监控,master-name为自定义的主节点名称,master-ip为主节点ip,master-port为主节点端口号,
# quorum设置为2就代表至少要有两个哨兵认为主节点故障了,才算主节点客观下线了,一般设置为sentinel节点数的一半加一。
# 这里面的master-name自定义,但是需要所有sentinel配置文件中一致
sentinel monitor mymaster 192.168.118.130 6379 2
# 每个哨兵节点会定期发送ping命令来判断Redis节点和其余的哨兵节点是否是可达的,
# 如果超过了配置的times时间没有收到pong回复,就主观判断节点是不可达的,times的单位为毫秒。
sentinel down-after-milliseconds mymaster 30000
# 当哨兵节点都认为主节点故障时,哨兵投票选出的leader会进行故障转移,选出新的主节点,原来的从节点们会向新的主节点发起复制,
# 这个配置就是控制在故障转移之后,每次可以向新的主节点发起复制的节点的个数,最多为nums个,因为如果不加控制会对主节点的网络和磁盘IO资源很大的开销。
sentinel parallel-syncs mymaster 1
# 指定故障切换允许的毫秒数,超过这个时间,就认为故障切换失败,默认为3分钟
sentinel failover-timeout mymaster 180000
# redis的密码
sentinel author-pass mymaster 123456
#避免脚本重置,默认值yes,避免一个简单的安全问题(设置为yes就行,无需理会)
sentinel deny-scripts-reconfig yes
# 重命名你认为危险的命令,使之更安全
# SENTINEL rename-command mymaster CONFIG GUESSME
  • 编写哨兵启动,停止脚本
    同样在bin文件夹中
touch start-sentinel.sh stop-sentinel.sh
chmod 777 start-sentinel.sh stop-sentinel.sh

start-sentinel.sh脚本内容

#!/bin/sh
 
#您可以在此处修改redis-server和conf的所在路径
SENTINEL_SERVER="/usr/local/redis/src/redis-sentinel"
SENTINEL_CONF="/usr/local/redis/conf/sentinel.conf"
 
if [ ! -e $SENTINEL_SERVER ]; then
	echo "$SENTINEL_SERVER does not exist!"
	exit -1
fi
 
if [ ! -e $SENTINEL_CONF ]; then 
	echo "$SENTINEL_CONF does not exist!"
	exit -1
fi
 
cmd="ps -ef | grep ${SENTINEL_SERVER} | grep -v grep | grep -v vim | grep -v defunct | awk '{ print \$2 }'"
#echo $cmd
 
PID=$(eval ${cmd})
#echo $PID
 
if [ $PID"e" != "e" ]; then
	echo "sentinel-server is running, can't start"
	exit -1
else
	$SENTINEL_SERVER $SENTINEL_CONF &
fi
 
 
startfail=1
for i in `seq 0 180`
do
	PID=$(eval ${cmd})
	#echo $PID
	if [ $PID"e" != "e" ]; then
		${SENTINEL_SERVER} --version
		echo "sentinel server is stared..."
		startfail=0
		break
	fi
	sleep 1
done
 
exit $startfail

stop-sentinel.sh脚本内容

#!/bin/sh
 
#您可以在此处修改redis-server的所在路径
SENTINEL_SERVER="/usr/local/redis/src/redis-sentinel"
 
cmd="ps -ef | grep ${SENTINEL_SERVER} | grep -v grep | grep -v vim | grep -v defunct | awk '{ print \$2 }'"
#echo $cmd
 
PID=$(eval ${cmd})
 
if [ ${PID}"e" = "e" ]; then
	echo "sentinel-server is not started"
	exit -1
else
	kill $PID
fi
 
stopfail=1
for i in `seq 0 30`
do
	PID=$(eval ${cmd})
	#echo $PID
	if [ ${PID}"e" != "e" ]; then
		echo "sentinel-server is still running, waiting to stop[${i}]..."
	else
		echo "sentinel-server is stoped"
		stopfail=0
	   break
   	fi
	sleep 1
done
 
exit $stopfail
  • 启动sentinel(哨兵)
    在启动哨兵前,确保你的redis服务是启动的,启动后可观察sentinel.conf,可以发现,sentinel会向sentinel.conf文件中拼接主从信息,哨兵节点信息。
    在这里插入图片描述

还可以通过sentinel.log日志文件的日志信息查看哨兵的相关配置情况!!!
这时候我们可以停掉Redis主节点来验证哨兵。
通过一系列验证,你或许会发现Redis哨兵重新选举主节点后会将这个被选中的节点的redis.conf修改掉,具体的为删掉replicaof 配置项,而原来的主节点则添加replicaof 配置项,并指向新的主节点。所以旧的主节点再次启动就成从节点了。

三、springboot整合

配置:

spring.application.name=spring-boot-redis
server.port=8080
# 哨兵监听的redis server的名称
spring.redis.sentinel.master=mymaster
# 哨兵配置列表
spring.redis.sentinel.nodes=192.168.118.129:26379,192.168.118.130:26379,192.168.118.131:26379
# redis密码
spring.redis.password=123456

可无:

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        //关联
        template.setConnectionFactory(factory);
        //设置key的序列化器
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class));
        // hash的key也采用String的序列化方式
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(new Jackson2JsonRedisSerializer(Object.class));
        return template;
    }
}

测试:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis主从复制是常用的数据备份和负载均衡方案之一。在主从复制中,主节点负责写操作并将数据同步到从节点,从节点负责读操作。 要配置Redis主从复制,需要进行以下步骤: 1. 配置主节点: - 打开主节点的配置文件 `redis.conf`。 - 将 `bind` 设置为主节点的 IP 地址。 - 将 `port` 设置为主节点的端口号。 - 将 `daemonize` 设置为 `yes`,以使 Redis 以守护进程模式运行。 - 取消注释并设置 `replicaof`,指定从节点的 IP 地址和端口号。 2. 配置从节点: - 复制主节点的配置文件 `redis.conf` 到从节点,并重命名为 `redis.conf`。 - 打开从节点的配置文件 `redis.conf`。 - 将 `bind` 设置为从节点的 IP 地址。 - 将 `port` 设置为从节点的端口号。 - 将 `daemonize` 设置为 `yes`。 - 取消注释并设置 `replicaof`,指定主节点的 IP 地址和端口号。 3. 启动主从节点: - 分别启动主节点和从节点的 Redis 服务器。 4. 验证主从复制: - 使用命令 `INFO replication` 在主节点和从节点上检查复制信息。 - 在主节点上执行写操作,然后在从节点上执行读操作,验证数据同步是否正常。 对于哨兵模式,它在主从复制的基础上提供了故障转移和自动故障恢复的功能。在哨兵模式中,有一个或多个哨兵节点负责监控主节点和从节点的状态,并在主节点出现故障时自动将一个从节点升级为新的主节点。 要配置Redis哨兵模式,需要进行以下步骤: 1. 配置哨兵节点: - 复制主节点的配置文件 `redis.conf` 到哨兵节点,并重命名为 `redis.conf`。 - 打开哨兵节点的配置文件 `redis.conf`。 - 将 `sentinel monitor` 设置为监视的主节点名称、主节点 IP 地址、主节点端口号和需要的从节点数量。 - 可以设置其他选项,如 `sentinel down-after-milliseconds`、`sentinel failover-timeout` 等。 2. 启动哨兵节点: - 启动所有哨兵节点的 Redis 服务器。 3. 验证哨兵模式: - 使用命令 `redis-cli -p <哨兵节点端口号>` 连接到哨兵节点。 - 使用命令 `SENTINEL get-master-addr-by-name <主节点名称>` 检查当前主节点的 IP 地址和端口号。 通过以上步骤,你将成功配置Redis主从复制和哨兵模式。这将提供数据备份、负载均衡和故障转移的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值