Redis7.0.15 主从复制、哨兵模式搭建

主从复制:master以写为主,slave以读为主,当master数据变化的时候,自动将新的数据异步同步到其他的slave数据库

1. Redis复制介绍:

https://redis.io/docs/latest/operate/oss_and_stack/management/replication/

  • 读写分离
  • 容灾恢复
  • 数据备份
  • 水平扩容支撑高并发

2. 下载

下载到自己指定的目录:

mkdir /opt/coisini/redis-clustercd /opt/coisini/redis-clusterwget https://download.redis.io/releases/redis-7.0.15.tar.gz

3. 解压以及重命名

搭建3台,分别为redis6380、redis6381、redis6382

tar -zxvf redis-7.0.15.tar.gz 

进入redis目录:

cd redis-7.0.15/

4. 编译安装

安装 systemd-devel 和其他编译所需的依赖

yum -y install centos-release-scl devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutilsscl enable devtoolset-9 bash systemd-devel make gcc

配置并编译 Redis

make BUILD_WITH_SYSTEMD=yes

等待一会~
编译安装:

make install

如果报以下错误
解决办法:
make MALLOC=libc
报错解决

5. 编辑配置文件

vi /opt/coisini/redis-cluster/redis-7.0.15/redis.conf

(按Esc退出编辑模式下: /protected-mode 即可搜索,回车后按n可以跳转搜索下一个,:set number可以显示行号 )

# 关闭保护模式
protected-mode no
# 守护进程模式开启
daemonize yes
# 绑定IP按需修改,bind指定网段远程访问redis,注释就没有限制了,或者0.0.0.0。
bind 0.0.0.0 
# 端口(单机默认,集群按需修改)
port 6380# (搜/requirepass foobared)设置Redis密码
requirepass 123456
# 允许redis后台运行
daemonize yes# systemd接管服务
supervised systemd
# 指定当前工作目录,dir(大概在504行)
dir /opt/coisini/redis-cluster/redis6380/tmp
pidfile /opt/coisini/redis-cluster/redis6380/redis_6380.pid
# redis日志输出(可以配置为./6380.log)
logfile /opt/coisini/redis-cluster/redis6380/redis6380.log
# 校验master主机密码
masterauth 123456
# dump.rdb名字
dbfilename dump6380.rdb
# 配置主从(这个只要从机配置就行了,主机注释掉)
replicaof 192.168.31.16 6380
appendonly yes

#配置主从(这个只要从机配置就行了,主机注释掉)
replicaof 192.168.31.16 6380

:wq保存并退出

6. 拷贝三份

for port in 6380 6381 6382; do cp -r redis-7.0.15 redis$port; done

拷贝
继续修改6381、6382 两个文件的配置

vi /opt/coisini/redis-cluster/redis6381/redis.conf
vi /opt/coisini/redis-cluster/redis6382/redis.conf

分别修改以下配置:

(按Esc退出编辑模式下: /protected-mode 即可搜索,回车后按n可以跳转搜索下一个,:set number可以显示行号 )

# 端口(单机默认,集群按需修改)
port 6381
# 指定当前工作目录,dir(大概在504行)
dir /opt/coisini/redis-cluster/redis6381/
pidfile /opt/coisini/redis-cluster/redis6381/redis_6381.pid
# redis日志输出(可以配置为./6381.log)
logfile /opt/coisini/redis-cluster/redis6381/redis6381.log
# dump.rdb名字
dbfilename dump6381.rdb

:wq保存退出

7. 创建日志目录并赋权

useradd -r -s /bin/false redisfor port in 6380 6381 6382; do mkdir -p /opt/coisini/redis-cluster/redis$port/tmptouch /opt/coisini/redis-cluster/redis$port/redis$port.logchown redis:redis /opt/coisini/redis-cluster/redis$port/redis$port.logchown -R redis:redis /opt/coisini/redis-cluster/redis$portchmod -R 770 /opt/coisini/redis-cluster/redis$port
done

8. 编辑启动脚本

vi redis-cluster.sh

添加:

#!/bin/bash# Redis集群节点端口列表
ports=(6380 6381 6382)# Redis的安装路径
redis_path="/opt/coisini/redis-cluster"# Redis的密码
password="123456"# 启动函数
start() {echo "Starting Redis cluster..."for port in "${ports[@]}"; doecho "Starting Redis instance on port $port..."$redis_path/redis$port/src/redis-server $redis_path/redis$port/redis.confdoneecho "Redis cluster started."
}# 停止函数
stop() {echo "Stopping Redis cluster..."for port in "${ports[@]}"; doecho "Stopping Redis instance on port $port..."$redis_path/redis$port/src/redis-cli -a $password -p $port shutdowndoneecho "Redis cluster stopped."
}# 脚本的主逻辑
case "$1" instart)start;;stop)stop;;restart)stopstart;;*)echo "Usage: $0 {start|stop|restart}"exit 1
esac

文件赋权:

chmod +x redis-cluster.sh

9. 开放端口:

sudo firewall-cmd --permanent --add-port=6380/tcp --add-port=6381/tcp --add-port=6382/tcp
sudo firewall-cmd --reload

10. 先不着急启动,设置哨兵模式:

参数解析:
protected-model:安全保护模式
port:端口
daemonize:是否以后台daemon方式运行
pidfile:pid文件路径
logfile:日志文件路径
dir:工作目录
sentinel monitor mymaster 127.0.0.1 6379 2 设置要监控的master服务器
quorum表示最少有几个哨兵认可客观下线,同意故障迁移的法定票数
sentinel down-after-milliseconds mymaster 30000 指定多少毫秒之后,主节点没有应答哨兵,此时哨兵主观上认为主节点下线
sentinel auth-pass master设置了密码,连接master服务的密码
acllog-max-len 128 ACL日志的最大条目长度。
sentinel parallel-syncs mymaster 1 表示允许并行同步的slave个数,当Master挂了后,哨兵会选出新的Master,此时,剩余的slave会向新的master发起同步数据
sentinel failover-timeout mymaster 180000 故障转移的超时时间,进行故障转移时,如果超过设置的毫秒,表示故障转移失败

vi /opt/coisini/redis-cluster/redis6380/sentinel.conf

编辑以下选项:

(按Esc退出编辑模式下: /protected-mode 即可搜索,回车后按n可以跳转搜索下一个,:set number可以显示行号 )

# 哨兵sentinel实例运行的端口
protected-mode no
# 端口
port 26380
# 保护模式
daemonize yes
pidfile /opt/coisini/redis-cluster/redis6380/redis-sentinel6380.pid
logfile /opt/coisini/redis-cluster/redis6380/redis-sentinel6380.log
dir /opt/coisini/redis-cluster/redis6380/tmp
# 哨兵监听的主服务器,只需要2票就可以从机变主机
sentinel monitor mymaster 192.168.31.16 6380 2
# sentinel auth-pass mymaster MySUPER--secret-0123passw0rd 设置主机密码
sentinel auth-pass mymaster 123456
# 设置未得到主机响应时间,5秒未响应视为宕机
sentinel down-after-milliseconds mymaster 5000
# 设置等待主活动时间,10秒主机未活动,则重新选举主机
sentinel failover-timeout mymaster 10000
# 设置连接密码
sentinel auth-pass mymaster 123456

然后分别修改另外两个配置,注意修改端口

vi /opt/coisini/redis-cluster/redis6381/sentinel.conf
vi /opt/coisini/redis-cluster/redis6382/sentinel.conf

除了这个指定主机地址不变 sentinel monitor mymaster 192.168.31.16 6380 2

11. 编辑 Redis Sentinel 启动脚本:

vi redis-sentinel-cluster.sh
#!/bin/bash# Redis集群节点端口列表
ports=(6380 6381 6382)# Redis Sentinel节点的端口列表
sentinel_ports=(26380 26381 26382)# Redis的安装路径
redis_path="/opt/coisini/redis-cluster"# Redis的密码
password="123456"# 启动函数
start() {echo "Starting Redis Sentinel cluster..."for port in "${sentinel_ports[@]}"; doecho "Starting Redis Sentinel on port $port..."$redis_path/redis$((port-20000))/src/redis-server $redis_path/redis$((port-20000))/sentinel.conf --sentinel --daemonize yesdoneecho "Redis Sentinel cluster started."
}# 停止函数
stop() {echo "Stopping Redis Sentinel cluster..."for port in "${sentinel_ports[@]}"; doecho "Stopping Redis Sentinel on port $port..."$redis_path/redis$((port-20000))/src/redis-cli -a $password -p $port shutdowndoneecho "Redis Sentinel cluster stopped."
}# 重启函数
restart() {stopstart
}# 脚本的主逻辑
case "$1" instart)start;;stop)stop;;restart)restart;;*)echo "Usage: $0 {start|stop|restart}"exit 1
esac

文件赋权:

chmod +x redis-sentinel-cluster.sh

12. 先启动Redis

/opt/coisini/redis-cluster/redis-cluster.sh start

停止、重启命令:
/opt/coisini/redis-cluster/redis-cluster.sh stop
/opt/coisini/redis-cluster/redis-cluster.sh restart

13. 查看启动日志:

cat /opt/coisini/redis-cluster/redis6380/redis6380.log

从机连接成功
启动日志

cat /opt/coisini/redis-cluster/redis6380/redis6381.log

连接主机成功

14. 再启动Redis Sentinel监听主节点的状态

/opt/coisini/redis-cluster/redis-sentinel-cluster.sh start

停止、重启命令:
/opt/coisini/redis-cluster/redis-sentinel-cluster.sh stop
/opt/coisini/redis-cluster/redis-sentinel-cluster.sh restart

15. 查询主从关系

info replication

主机视角,两个从机
两个从机
从机视角,一个主机
从机

16. 进入主机:

/opt/coisini/redis-cluster/redis6380/src/redis-cli -p 6380 -a 123456set k1 coisini

其它从机会同步数据
同步数据

17. 我们假设主机宕机:

查看

ps aux | grep redis

8360
结束掉6380进程,

kill 8362

查看主从情况:

info replication

选举 已经从8360转到8362了
info replication
接下来我们重启6380机器:

 /opt/coisini/redis-cluster/redis6380/src/redis-server /opt/coisini/redis-cluster/redis6380/redis.conf

查看主从情况:

info replication

6380已经变为从机
6382

18. 设置服务开机自启

sudo vi /etc/systemd/system/redis-cluster.service

添加以下内容:

[Unit]
Description=Redis Cluster Service
After=network.target[Service]
Type=forking
ExecStart=/opt/coisini/redis-cluster/redis-cluster.sh start
ExecStop=/opt/coisini/redis-cluster/redis-cluster.sh stop
ExecReload=/opt/coisini/redis-cluster/redis-cluster.sh restart
User=redis
Group=redis
Restart=on-failure[Install]
WantedBy=multi-user.target
sudo vi /etc/systemd/system/redis-sentinel-cluster.service

添加以下内容:

redis-sentinel-cluster.service 服务在redis-cluster.service启动完成之后才启动

[Unit]
Description=Redis Sentinel Cluster Service
After=redis-cluster.service[Service]
Type=forking
ExecStart=/opt/coisini/redis-cluster/redis-sentinel-cluster.sh start
ExecStop=/opt/coisini/redis-cluster/redis-sentinel-cluster.sh stop
ExecReload=/opt/coisini/redis-cluster/redis-sentinel-cluster.sh restart
User=redis
Group=redis
Restart=on-failure[Install]
WantedBy=multi-user.target

重新加载 systemd 配置

sudo systemctl daemon-reload

设置 redis-cluster.service 和 redis-sentinel-cluster.service 开机自启

sudo systemctl enable redis-cluster.service
sudo systemctl enable redis-sentinel-cluster.service

可以 reboot 重启验证

相关命令:
启动 Redis Cluster:sudo systemctl start redis-cluster.service
启动 Redis Sentinel Cluster(会在 Redis Cluster 启动成功后运行)
sudo systemctl start redis-sentinel-cluster.service
查看服务状态
sudo systemctl status redis-cluster.service
sudo systemctl status redis-sentinel-cluster.service

19. 项目集成:TODO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/401088.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【秋招笔试】8.11大疆秋招(第二套)-测开岗

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

Python基于TensorFlow实现卷积神经网络-双向长短时记忆循环神经网络分类模型(CNN-BiLSTM分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着人工智能技术的快速发展,深度学习已经成为处理复杂数据集的关键工具之一。其中&#x…

【48 Pandas+Pyecharts | 2024年巴黎奥运会奖牌数据分析可视化】

PandasPyecharts | 2024年巴黎奥运会奖牌数据分析可视化 文章目录 🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据2.2 处理奖牌数据2.3 统计各参数国家/地区奖牌数据 🏳️‍🌈 3. Pyecharts数…

MQ的介绍

一、MQ简介 MQ全称Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信,主要功能业务解耦 二、常见的MQ产品 RabbitMQ、RocketMQ、Kafka、ActiveMQ 三、为什么要用MQ? 3.1、异步处理 应用场景…

苍穹外卖-知识点

搭建环境 前端 使用nginx(文件路径带中文 会启动不成功) 后端

嵌入式软件开发学习一:软件安装(保姆级教程)

资源下载: 江协科技提供: 资料下载 一、安装Keil5 MDK 1、双击.EXE文件,开始安装 2、 3、 4、此处尽量不要安装在C盘,安装路径选择纯英文,防止后续开发报错 5、 6、 7、弹出来的窗口全部关闭,进入下一步&a…

C++简单界面设计

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {---------------------窗口设置----------------------this->setWindowTitle("南城贤子摄影工作室");//设置窗口标题this->setWindowIcon(QIcon("d:\\Pictures\\C…

ES JavaApi

1.RestClient操作索引库 2.RestClient操作文档 2.1查询 2.2更新 2.3删除 2.4批量新增(bulk) 3.DSL查询 对应的api 3.0解析响应 3.1全文检索 3.2精确查询 3.3复合查询-boolQuery 构建boolQuery 3.4排序和分页 3.5高亮

thinkphp漏洞之sql注入漏洞-builder处漏洞

目录 适用版本 环境搭建 文件下载安装 配置文件修改 漏洞分析 适用版本 注&#xff1a;thinkphp版本&#xff1a;5.0.13<ThinkPHP<5.0.15 、 5.1.0<ThinkPHP<5.1.5 环境搭建 文件下载安装 在github上面下载相应版本&#xff0c;下载think文件&#xff0c;…

暑期破防实录——捡漏腾讯

序 经历了整整三个月的折磨&#xff0c;暑期实习终于尘埃落定。 其实还没收到 offer 的时候&#xff0c;还会想着到时候录用了该怎么大写特写小作文&#xff0c;但真到了这一天&#xff0c;只剩下一种解脱感&#xff0c;一种摆脱了漫长的焦虑与压抑的淡淡喜悦。 或许就像久病…

Lab 1 实验 MapReduce

&#x1f442; 若月亮没来 (若是月亮还没来)&#xff08;若是月亮还没来&#xff09; - 王宇宙Leto/乔浚丞 - 单曲 - 网易云音乐 目录 &#x1f33c;参考代码 &#x1f419;解析 &#x1f41f;mrsequential.go &#x1f41f;mrapps/wc.go &#x1f4d5;实验--准备 &…

维基知识库系统Wiki.js本地Linux环境部署并配置公网地址远程访问

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Web3与医疗健康:去中心化技术在医疗行业的应用前景

随着区块链技术和去中心化理念的兴起&#xff0c;Web3作为新一代互联网技术正逐渐影响各个行业。在医疗健康领域&#xff0c;Web3技术的应用前景引起了广泛关注。本文将探讨Web3如何通过去中心化技术提升医疗健康行业的效率、透明度和安全性&#xff0c;并分析其在实际应用中的…

无线领夹麦克风哪个品牌音质最好?领夹麦克风十大品牌推荐

在当下自媒体盛行的时代&#xff0c;无线领夹麦克风无疑是每位创作者追求高质量音频的必备工具。它不仅解放了双手&#xff0c;让拍摄更加自由灵活&#xff0c;更以其出色的音质表现&#xff0c;成为直播、Vlog制作中的关键角色。面对市场上琳琅满目的品牌与型号&#xff0c;许…

鸿蒙「TaskPool|Worker」多线程并发使用详解,这一篇足够!

概念介绍 鸿蒙的多线程并发TaskPool和Worker&#xff0c;他们具有相同内存模型&#xff0c;线程间隔离内存不共享。在项目中若使用到&#xff0c;有几个较重要的条件或特点这里简单作出列举。 CPU密集型任务&#xff0c;说白了是计算型耗时任务&#xff1b; I/O密集型任务&…

美国消费者信心下滑与金属市场动向

消费者信心降至低点 根据密歇根大学的消费者信心指数&#xff0c;美国7月份的消费者信心跌至8个月来的最低水平。尽管技术上美国并未陷入经济衰退&#xff0c;但Affirm调查显示&#xff0c;大约60%的美国人认为经济处于衰退状态。Gallup的调查也发现&#xff0c;三分之一的美国…

《Ubuntu22.04环境下的ROS2学习笔记2》

一、在ROS2环境下创建功能包 如果您已经完成了上一小节的内容&#xff0c;那么接下来您一定渴望自己创建一个功能包来实现相应的功能。在ROS1中&#xff0c;您创建的功能包可以既写C/C&#xff0c;又写python&#xff0c;但ROS2中不允许用户这么做&#xff0c;您的C/C和python代…

uniapp 中 web-view 向 App 传递消息

web-view向App传递消息 引入官方库 在web项目中引入官方库 uni.webview.1.5.4.js &#xff0c;可以从uniapp官方示例库中下载&#xff0c;下载后放入web项目目录下即可&#xff0c;本文放在js文件夹中&#xff0c;然后在web项目页面中引入。 官网对于uni-app使用web-view的介…

WebDeveloper:1靶机

端口扫描 靶机ip地址为192.168.153.158 目录扫描 访问80端口 拼接访问 /ipdata 发现了一个流量包 放在 wireshark 查看&#xff0c;找到 账号密码 账号&#xff1a;webdeveloper 密码&#xff1a;Te5eQg&4sBS!Yr$)wf%(DcAd 拼接 /wp-login.php 找到登录框 登录成功 找…

安卓TV入门项目

android studio创建tv项目 下载android studio点此下载 配置环境变量&#xff1a; d盘新增Android文件夹&#xff0c;创建android-avd和android-sdk文件夹 环境变量名称&#xff1a;ANDROID_HOME 环境变量值&#xff1a;D:\Android\android-sdk 环境变量名称&#xff1a;ANDRO…