Redis集群及哨兵集群搭建教程2023年12月14日
Redis集群及哨兵集群搭建
安装
#解压
tar -xzvf redis压缩文件
#进入解压后的文件夹目录,执行编译命令
make MALLOC=libc
#在解压后的文件目录,执行安装命令
#/root/jdk/redis 是我的安装目录,执行此命令的时候,如果指定目录存在,则会在存在的目录上安装,如果不存在,则会新建目录 PREFIX必须为大写
make PREFIX=/root/jdk/redis install
启动
#进入安装目录的bin文件夹下,执行命令
./redis-server
安装阶段结束
配置集群
Redis集群
#进入解压目录
cd /redis-home/package/redis-7.2.3
#复制配置文件到安装目录
cp redis.conf /root/jdk/redis
# 分页查看配置文件信息
less -mN redis.conf
# 设置启动密码 foobared
requirepass foobared
# 设置端口 6388
port 6388
#默认的数据库名称为dump.rdb
dbfilename dump_6388.rdb
#no代表不开启守护进程 ,yes代表开启;默认为no
daemonize yes
#进入bin目录 依次运行
./redis-cli -p 6388
auth foobared
#出现了 ok代表成功
NOAUTH Authentication required 解决办法
#杀掉所有redis进程
ps -ef |grep redis
kill -9 pid
创建两个slave
建两个,拷贝主Redis的目录两份,然后修改redis的名称,方便区分
分别修改配置文件-端口 -主节点 - 访问密码
/root/jdk/redisSlave1_6389/redis.config
port 6389
slaveof 127.0.0.1 6388
masterauth foobared
/root/jdk/redisSlave2_6390/redis.config
port 6390
slaveof 127.0.0.1 6388
masterauth foobared
启动redis集群的脚本
redis_start.sh
#!/bin/bash
base="/root/jdk"
masterPath="${base}/redis_6388"
slave1Path="${base}/redisSlave1_6389"
slave2Path="${base}/redisSlave2_6390"
start () {
$1/bin/redis-server $1/redis.conf
}
# 启动master
start $masterPath
sleep 2
start $slave1Path
sleep 2
start $slave2Path
if [ $? -eq 0 ]
then
echo "启动完成"
else
echo "启动失败"
fi
ps -ef|grep redis
# cd /root/jdk/redis_6388/bin
# cd /root/jdk/redisSlave1_6389/bin
# cd /root/jdk/redisSlave2_6390/bin
# ./redis-cli -p 6388 -a foobared
# cd $masterPath/bin
#将redis启动脚本文件放到目录/root/jdk下
cd /root/jdk/
vim redis_start.sh
#粘贴脚本
#退出
:x
#添加执行权限
chmod +x ./redis_start.sh
#执行脚本
./redis_start.sh
注意redis启动顺序 ,先启动master 再启动slave
验证Redis集群
# 进入/root/jdk/redis_6388/bin
cd /root/jdk/redis_6388/bin
# 输入端口 和 redis配置的密码
./redis-cli -p 6388 -a foobared
# 输入info
查看6388
主节点6388 可读可写
查看6389
从节点6389 可读不可写
查看6390
从节点6390 可读不可写
结论
Redis配置成功
哨兵集群
配置26388
/root/jdk/redis_6388/sentinel.conf
# sentinel监控 主节点 6388
sentinel monitor mySentinel 127.0.0.1 6388 2
# 主节点redis密码
sentinel auth-pass mySentinel foobared
# 后台启动
daemonize yes
# sentinel的端口
port 26388
dir "/root/jdk/redis_6388/bin"
# 日志地址 注意一定要先建好文件夹/root/jdk/sentinel_logs,文件会自动创建
logfile "/root/jdk/sentinel_logs/s6388.log"
配置26389
/root/jdk/redisSlave1_6389/sentinel.conf
sentinel monitor mySentinel 127.0.0.1 6388 2
sentinel auth-pass mySentinel foobared
daemonize yes
port 26389
dir "/root/jdk/redisSlave1_6389/bin"
logfile "/root/jdk/sentinel_logs/s6389.log"
配置26390
/root/jdk/redisSlave2_6390/sentinel.conf
sentinel monitor mySentinel 127.0.0.1 6388 2
sentinel auth-pass mySentinel foobared
daemonize yes
port 26390
dir "/root/jdk/redisSlave2_6390/bin"
logfile "/root/jdk/sentinel_logs/s6390.log"
启动sentinel脚本
/root/jdk/sentil_start.sh
#!/bin/bash
base="/root/jdk"
masterPath="${base}/redis_6388"
slave1Path="${base}/redisSlave1_6389"
slave2Path="${base}/redisSlave2_6390"
start () {
$1/bin/redis-server $1/sentinel.conf --sentinel
}
# 启动master
start $masterPath
sleep 2
start $slave1Path
sleep 2
start $slave2Path
if [ $? -eq 0 ]
then
echo "启动完成"
else
echo "启动失败"
fi
ps -ef|grep redis
# cd /root/jdk/redis_6388/bin
# cd /root/jdk/redisSlave1_6389/bin
# cd /root/jdk/redisSlave2_6390/bin
# ./redis-cli -p 6388 -a foobared
# cd $masterPath/bin
#将sentinel启动脚本文件放到目录/root/jdk下
cd /root/jdk/
vim sentil_start.sh
#粘贴脚本
#退出
:x
#添加执行权限
chmod +x ./sentil_start.sh
#执行脚本
./sentil_start.sh
第一步 Redis启动 注意redis启动顺序 ,先启动master 再启动slave
第二步 sentinel启动 注意sentinel启动顺序,先全部配置好,再按照配置先后顺序启动sentinel(踩过坑)redis哨兵模式出现的问题总结
启动后效果图
验证哨兵是否有效
识别其他哨兵并且是否识别redis主从节点
查看26388哨兵信息
cd /root/jdk/redis_6388/bin
./redis-cli -p 26388
info
查看26389哨兵信息
cd /root/jdk/redisSlave1_6389/
tail -f sentinel.conf
查看26390哨兵信息
cd /root/jdk/redisSlave1_6390/
tail -f sentinel.conf
查看/root/jdk/sentinel_logs/s6388.log
查看/root/jdk/sentinel_logs/s6389.log
查看/root/jdk/sentinel_logs/s6390.log
当前状态 6388 为Redis主节点
cd /root/jdk/redis_6388/bin/
./redis-cli -p 6388 -a foobared
模拟6388挂掉
###### 结果图以上代表哨兵模式生效!
如果Redis全部杀掉并且sentinel也杀掉,然后重启启动测试的话,需要将涉及的
redis.conf
和sentinel.conf
都重新生成一遍,因为上一次已经更换了master,两种配置文件已经被自动修改了,所以需要改动配置文件
技巧
# 杀掉所有监控6388端口的进程
kill $(lsof -i tcp:6388 -t)
./redis-server ../redis.conf
./redis-cli -p 6388 -a foobared
在安装目录下执行
./redis-server ../sentinel.conf --sentinel
sentinel monitor mySentinel 127.0.0.1 6388 1
/home/aaa/fun_shell/redis_start.sh
问题总结
Redis启动出现WARNING overcommit
Redis启动出现WARNING overcommit_memory is set to 0...解决
最大内存设置问题出现 OOM
[Redis内存溢出:OOM command not allowed when used memory > ‘maxmemory‘----->在redis.conf文件中注释掉maxmemory](Redis内存溢出:OOM command not allowed when used memory > 'maxmemory'_oom command not allowed when used memory > 'maxmem-CSDN博客)
sentinel.conf
中的监控master对象端口设置错误解决方法:当前用例中必须每个
sentinel.conf
中都检测同一个master
Redis哨兵模式启动30秒后日志出现+sdown slave和+sdown master或+sdown sentinel
本文作者:Tiory
本文链接:https://www.cnblogs.com/SunAlbert/articles/17900283.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步