情深不寿,慧极伤身|

Tiory

园龄:4年7个月粉丝:1关注:5

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

本文作者:Tiory

本文链接:https://www.cnblogs.com/SunAlbert/articles/17900283.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Tiory  阅读(125)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Reol

作词 : Reol

fade away...do over again...

fade away...do over again...

歌い始めの一文字目 いつも迷ってる

歌い始めの一文字目 いつも迷ってる

どうせとりとめのないことだけど

伝わらなきゃもっと意味がない

どうしたってこんなに複雑なのに

どうしたってこんなに複雑なのに

噛み砕いてやらなきゃ伝わらない

ほら結局歌詞なんかどうだっていい

僕の音楽なんかこの世になくたっていいんだよ

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.

目の前 広がる現実世界がまた歪んだ

目の前 広がる現実世界がまた歪んだ

何度リセットしても

僕は僕以外の誰かには生まれ変われない

「そんなの知ってるよ」

気になるあの子の噂話も

シニカル標的は次の速報

麻痺しちゃってるこっからエスケープ

麻痺しちゃってるこっからエスケープ

遠く遠くまで行けるよ

安定なんてない 不安定な世界

安定なんてない 不安定な世界

安定なんてない きっと明日には忘れるよ

fade away...do over again...

fade away...do over again...

そうだ世界はどこかがいつも嘘くさい

そうだ世界はどこかがいつも嘘くさい

綺麗事だけじゃ大事な人たちすら守れない

くだらない 僕らみんなどこか狂ってるみたい

本当のことなんか全部神様も知らない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.