Redis集群及哨兵集群搭建教程2023年12月14日

Redis集群及哨兵集群搭建

安装

华为云安装redis

#解压
tar -xzvf  redis压缩文件
#进入解压后的文件夹目录,执行编译命令
make MALLOC=libc
#在解压后的文件目录,执行安装命令
#/root/jdk/redis 是我的安装目录,执行此命令的时候,如果指定目录存在,则会在存在的目录上安装,如果不存在,则会新建目录 PREFIX必须为大写
make PREFIX=/root/jdk/redis install

启动

#进入安装目录的bin文件夹下,执行命令
./redis-server 

安装阶段结束

配置集群

Redis集群

VI/VIM下如何搜索字符串

#进入解压目录
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挂掉

6388挂掉后重新选master

###### 结果图

以上代表哨兵模式生效!

如果Redis全部杀掉并且sentinel也杀掉,然后重启启动测试的话,需要将涉及的redis.confsentinel.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

posted @ 2023-12-14 00:34  Tiory  阅读(82)  评论(0编辑  收藏  举报