一主双从redis+哨兵模式以及通过Ansible+Shell快速部署redis哨兵模式

目录

一.主redis配置

1.解压并进行编译安装

2.为redis创建软链接和service管理方便启动

3.修改redis的配置文件

二.配置备redis

三.主redis上查看集群状态

1.主redis登录上去查看状态并且创建数据用于验证同步性

2.备redis查看数据是否同步过来

四.模拟测试

1.主redis宕机时

2.备redis宕机时

五.redis哨兵

1.配置sentinel.conf文件

2.运行sentinel.conf文件

3.查看进程是否起来了

4.三台设备都运行起来后就停掉主redis(101)然后查看日志

5.在102和190主机上查看

6.当101恢复后的情况

六.Ansible+Shell快速部署redis一主双从哨兵模式


主从都是通过源码部署redis软件

主机信息:

主redis:192.168.2.101:6379

备redis1:192.168.2.102:6375

备redis2:192.168.2.190:6376

一.主redis配置

这里我的主redis和两台备redis版本有所不一样但影响不大

1.解压并进行编译安装

[root@localhost ~]# tar redis-6.2.14.tar.gz -C /usr/local/src/
[root@localhost ~]# yum install -y gcc tcl gcc-c++ make
[root@localhost redis-6.2.14]# make && make install
[root@localhost src]# cd /usr/local/bin/
[root@localhost bin]# ll
total 18940
-rw-r--r-- 1 root root      93 Apr 17 20:35 dump.rdb
-rwxr-xr-x 1 root root 4830656 Apr 17 20:34 redis-benchmark
lrwxrwxrwx 1 root root      12 Apr 17 20:34 redis-check-aof -> redis-server
lrwxrwxrwx 1 root root      12 Apr 17 20:34 redis-check-rdb -> redis-server
-rwxr-xr-x 1 root root 5004760 Apr 17 20:34 redis-cli
lrwxrwxrwx 1 root root      12 Apr 17 20:34 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 9548208 Apr 17 20:34 redis-server

2.为redis创建软链接和service管理方便启动

[root@localhost ~]# ln -s /usr/local/bin/redis-cli /root/redis-cli
[root@localhost ~]# ln -s /usr/local/bin/redis-server /root/redis-server
[root@localhost ~]# cat /usr/lib/systemd/system/redis.service 
[Unit]
Description=Redis Server Manager
After=network.target
[Service]
Type=forking
ExecStart=/root/redis-server /etc/redis.conf   #在这里指定启动参数,通常不配置service也可以通过这个命令进行启动
PrivateTmp=true
​
[Install]
WantedBy=multi-user.target
[root@localhost ~]# systemctl daemon-reload

3.修改redis的配置文件

[root@localhost ~]# cp /usr/local/src/redis-6.2.14/redis.conf /etc/redis.conf  #拷贝过去
[root@localhost ~]# sed -i 's/^bind.*/bind 0.0.0.0/' /etc/redis.conf 
[root@localhost ~]# sed -i 's/^logfile.*/logfile \/var\/log\/redis\/redis.log/' /etc/redis.conf
[root@localhost ~]# sed -i 's/^port.*/port 6379/' /etc/redis.conf
[root@localhost ~]# sed -i 's/^daemonize.*/daemonize yes/' /etc/redis.conf 
[root@localhost ~]# sed -i 's/^appendonly.*/appendonly yes/' /etc/redis.conf 
[root@localhost ~]# sed -i 's/^# requirepass.*/requirepass 123456/' /etc/redis.conf
[root@localhost ~]# systemctl restart redis
[root@localhost ~]# ./redis-cli -p 6379
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> ping
PONG
sed -i 's/^bind.*/bind 0.0.0.0/' /etc/redis.conf
sed -i 's/^logfile.*/logfile \/var\/log\/redis\/redis.log/' /etc/redis.conf
sed -i 's/^port.*/port 6379/' /etc/redis.conf
sed -i 's/^daemonize.*/daemonize yes/' /etc/redis.conf 
sed -i 's/^appendonly.*/appendonly yes/' /etc/redis.conf 
sed -i 's/^# requirepass.*/requirepass 123456/' /etc/redis.conf
sed -i 's/^# masterauth.*/masterauth 123456/' /etc/redis.conf 

二.配置备redis

和上面同样的操作,解压编译、创建软链接、拷贝并修改redis.conf文件,然后在主redis上拷贝service文件到两台备redis

[root@localhost ~]# scp /usr/lib/systemd/system/redis.service root@192.168.2.102:/usr/lib/systemd/system/
[root@localhost ~]# scp /usr/lib/systemd/system/redis.service root@192.168.2.190:/usr/lib/systemd/system/
两台备redis重载文件
systemctl daemon-reload

注意两台备redis在修改redis.conf时还要多修改几个参数,因为主redis的配置了密码要求,并且这里选择了更改端口

[root@localhost ~]# sed -i 's/^bind.*/bind 0.0.0.0/' /etc/redis.conf 
[root@localhost ~]# sed -i 's/^logfile.*/logfile \/var\/log\/redis\/redis.log/' /etc/redis.conf
[root@localhost ~]# sed -i 's/^port.*/port 6375/' /etc/redis.conf
[root@localhost ~]# sed -i 's/^daemonize.*/daemonize yes/' /etc/redis.conf 
[root@localhost ~]# sed -i 's/^appendonly.*/appendonly yes/' /etc/redis.conf 
[root@localhost ~]# sed -i 's/^requirepass.*/requirepass 123456/' /etc/redis.conf
[root@localhost ~]# sed -i 's/replicaof.*/replicaof 192.168.2.101 6379/' redis.conf  #指定你要绑定的主redis的IP和端口
[root@localhost ~]# sed -i 's/masterauth.*/masterauth 123456/' redis.conf   #指定主redis的密码
[root@localhost ~]# systemctl restart redis

三.主redis上查看集群状态

1.主redis登录上去查看状态并且创建数据用于验证同步性

[root@localhost ~]# ./redis-cli -p 6379
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.2.102,port=6375,state=online,offset=2002,lag=0
slave1:ip=192.168.2.190,port=6376,state=online,offset=2002,lag=0
master_failover_state:no-failover
master_replid:2cb4965520a60a53417fb26183178d5a6800dfe3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2002
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2002
127.0.0.1:6379> 
127.0.0.1:6379> keys *
1) "lilxinjin"
2) "key6"
3) "sulibao"
4) "key7"
5) "niexincheng"

2.备redis查看数据是否同步过来

[root@localhost ~]# ./redis-cli -p 6375
127.0.0.1:6375> ping
PONG
127.0.0.1:6375> keys *
1) "niexincheng"
2) "sulibao"
3) "lilxinjin"
4) "key6"
5) "key7"
[root@localhost ~]# ./redis-cli -p 6376
127.0.0.1:6376> keys *
1) "niexincheng"
2) "sulibao"
3) "key6"
4) "lilxinjin"
5) "key7"

四.模拟测试

1.主redis宕机时

主机宕机时,备redis仍然可以提供读的操作,但是不能写和删除

#主机宕机后备redis仍然是slave
127.0.0.1:6375> info replication
# Replication
role:slave
master_host:192.168.2.101
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_read_repl_offset:2352
slave_repl_offset:2352
master_link_down_since_seconds:15
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:2cb4965520a60a53417fb26183178d5a6800dfe3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2352
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2352
​
​
127.0.0.1:6376> info replication
# Replication
role:slave
master_host:192.168.2.101
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_read_repl_offset:2352
slave_repl_offset:2352
master_link_down_since_seconds:39
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:2cb4965520a60a53417fb26183178d5a6800dfe3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2352
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2352

当主redis恢复后,他仍然还是master,读写操作也正常,数据也都还在

[root@localhost ~]# systemctl start redis
[root@localhost ~]# ./redis-cli -p 6379
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.2.190,port=6376,state=online,offset=28,lag=1
slave1:ip=192.168.2.102,port=6375,state=online,offset=28,lag=0
master_failover_state:no-failover
master_replid:5c009c69f5e98bc4580fb4090b7a7032795744d4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28

2.备redis宕机时

备redis宕机后,我们这里是在配置文件中指定了和主redis的绑定关系的,所以他宕机后恢复时的身份仍然是slave,数据都还在。但是如果只是在命令行指定的绑定关系,那么他这个设备上的身份应该是恢复为master了然后数据也没了。使用 slaveof no one 可以将从机变为主机

五.redis哨兵

基于上面的环境进行配置

1.配置sentinel.conf文件

101、102、190主机都配置如下,这个配置文件在sentinel生效后会生成额外内容,并且在master产生漂移过后所监控的主机和端口也会变化

[root@localhost bin]# pwd
/usr/local/bin
[root@localhost bin]# cat sentinel.conf 
daemonize yes
logfile "/var/log/redis/sentinel.log"
sentinel monitor redis01 192.168.2.101 6379 2
sentinel down-after-milliseconds redis01 10000
sentinel failover-timeout redis01 60000
sentinel parallel-syncs redis01 2
sentinel auth-pass redis01 123456

2.运行sentinel.conf文件

#三台设备分别以主->从依次运行
redis-sentinel sentinel.conf &

3.查看进程是否起来了

[root@localhost bin]# ps -ef | grep sentinel
root      22449      1  0 11:12 ?        00:00:08 redis-sentinel *:26379 [sentinel]
root      22462  21745  0 11:13 pts/3    00:00:00 tail -f /var/log/redis/sentinel.log

4.三台设备都运行起来后就停掉主redis(101)然后查看日志

#主设备上
systemctl stop redis
​
#主设备上的sentinel.log内容
22449:X 22 Apr 2024 11:16:52.859 * +failover-state-wait-promotion slave 192.168.2.102:6375 192.168.2.102 6375 @ redis01 192.168.2.101 6379
22449:X 22 Apr 2024 11:16:53.588 # +promoted-slave slave 192.168.2.102:6375 192.168.2.102 6375 @ redis01 192.168.2.101 6379
22449:X 22 Apr 2024 11:16:53.589 # +failover-state-reconf-slaves master redis01 192.168.2.101 6379
22449:X 22 Apr 2024 11:16:53.688 * +slave-reconf-sent slave 192.168.2.190:6376 192.168.2.190 6376 @ redis01 192.168.2.101 6379
22449:X 22 Apr 2024 11:16:54.608 * +slave-reconf-inprog slave 192.168.2.190:6376 192.168.2.190 6376 @ redis01 192.168.2.101 6379
22449:X 22 Apr 2024 11:16:54.814 # -odown master redis01 192.168.2.101 6379
22449:X 22 Apr 2024 11:17:53.591 # +failover-end-for-timeout master redis01 192.168.2.101 6379
22449:X 22 Apr 2024 11:17:53.591 # +failover-end master redis01 192.168.2.101 6379
22449:X 22 Apr 2024 11:17:53.591 * +slave-reconf-sent-be slave 192.168.2.190:6376 192.168.2.190 6376 @ redis01 192.168.2.101 6379
22449:X 22 Apr 2024 11:17:53.591 # +switch-master redis01 192.168.2.101 6379 192.168.2.102 6375    #这里表示已经将master切换到102主机上
22449:X 22 Apr 2024 11:17:53.592 * +slave slave 192.168.2.190:6376 192.168.2.190 6376 @ redis01 192.168.2.102 6375
22449:X 22 Apr 2024 11:17:53.592 * +slave slave 192.168.2.101:6379 192.168.2.101 6379 @ redis01 192.168.2.102 6375
22449:X 22 Apr 2024 11:18:03.629 # +sdown slave 192.168.2.101:6379 192.168.2.101 6379 @ redis01 192.168.2.102 6375

5.在102和190主机上查看

如下为102主机的redis,我使用的是6375端口,190使用的6376端口

127.0.0.1:6375> info replication
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:eecf88568f1ffefcdc315f73427f371d0496c878
master_replid2:321f7c50f38e8c9dd042bb88080a381d0baef84d
master_repl_offset:605938
second_repl_offset:44936
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:605938
​
127.0.0.1:6376> info replication
# Replication
role:slave
master_host:192.168.2.102
master_port:6375
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_read_repl_offset:44935
slave_repl_offset:44935
master_link_down_since_seconds:2743
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:321f7c50f38e8c9dd042bb88080a381d0baef84d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:44935
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:44893

6.当101恢复后的情况

他重新进来后是作为slave身份了,现在的集群中的master就是102主机了

127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.2.102
master_port:6375
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_read_repl_offset:0
slave_repl_offset:0
master_link_down_since_seconds:-1
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:f9eec4b7a919560dbce7aa6117067414d9a891de
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

六.Ansible+Shell快速部署redis一主双从哨兵模式

主要都在master上做,文件有点长,很多需要改进的地方,按需修改吧,文件内部的主机、密码、目录、文件名等参数请自行修改。

先执行redis.sh,把自己的环境部好,然后通过ansible-playbook redis-backup.yaml来为两台从redis部署环境,于2024/4/22日成功快速搭建,redis版本为7.0.15,Ansible版本为2.9.27,如有疑问请于CSDN私聊或发送邮箱至sulibao2003@163.com,脚本文件和剧本文件放在百度/迅雷网盘了。

分享文件:Ansible+Shell-redis
链接:https://pan.xunlei.com/s/VNw5EfaHp-_r1h9Ud5e9vjAdA1#
提取码:47xf
复制这段内容后打开手机迅雷App,查看更方便
链接:https://pan.baidu.com/s/12TYqW8GWEAH0qt_Pm6MJWA 
提取码:tdbe

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot Aop使用篇

Getting Started SpringBoot AOP的实践 AOP相关的概念: Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。就是抽离出来的逻辑类,比如日志、权限…

《苍穹外卖》Day08部分知识点记录

一、useGeneratedKeys和keyProperty useGeneratedKeys和keyProperty是<insert>标签中的两个属性&#xff0c;用于处理自动生成的主键值。 1. useGeneratedKeys userGeneratedKeys"true"表示启用自动生成主键功能&#xff1b;当useGeneratedKeys设置为true时…

VScode使用cmake编译

一&#xff1a;输入 ctrlshiftp打开用于命令执行的输入框 二&#xff1a;输入cmake&#xff0c;选择quick start 模式 三&#xff1a;选择版本最高的gcc版本 四&#xff1a;输入项目名称 选择C 五&#xff1a;选择executable 这样便创建好了最简单的cmake例程&#xff0c;一个…

同态加密原理解析

目录 1.数学介绍2.使用多项式环进行加密2.1 私钥和公钥的产生2.2 加密2.3 解密 3.同态计算3.1 同态加法3.2 同态乘法 1.数学介绍 同态加密方案基于一个难以计算的问题Ring Learning with Errorsred。这些方案中的数据在加密和未加密时都用多项式表示。 这里举一个简单的多项式…

AWTK MODBUS Client channel 模型

名称&#xff1a;modbus_client_channel 功能&#xff1a;通过 modbus 协议访问远程 slave 设备上的数据&#xff0c;需要配合 modbus_client模型一起使用。用于将 modbus client 中的 channel 包装成view_model或者view_model_array 一般来说不需要&#xff0c;直接使用modbus…

docker常用基本命令

把jar包和 dockerfile文件放到同一目录下#构建Docker镜像 注意后面的 . 不能省略 docker build -t your-image-name .#运行并创建一个容器 docker run -d -p 8080:8080 --name container_name your-image-name# 停止容器 767fce4cb990 容器ID (容器名也可以) docker stop 767f…

柱形图“变个装”,跟上时尚步伐!

前言 职场中&#xff0c;日报、周报、月报、年度总结&#xff0c;都离不开图表的制作&#xff0c;而柱状图又是最常用的一种&#xff0c;怎样的柱状图&#xff0c;才能让领导更容易阅读&#xff0c;甚至是眼前一亮呢&#xff1f;今天小编就将为大家介绍一下如何借助葡萄城公司…

4月26日 阶段性学习汇报

1.毕业设计与毕业论文 毕业设计已经弄完&#xff0c;加入了KNN算法&#xff0c;实现了基于四种常见病的判断&#xff0c;毕业论文写完&#xff0c;格式还需要调整&#xff0c;下周一发给指导老师初稿。目前在弄答辩ppt&#xff08;25%&#xff09;。25号26号两天都在参加校运会…

六西格玛管理培训并未过气:深挖其现代价值与应用

在众多管理培训中&#xff0c;六西格玛管理培训因其卓越的成效和广泛的适用性而备受推崇。尽管有人认为六西格玛管理培训已经过时&#xff0c;但实际上&#xff0c;它在现代企业中仍具有不可忽视的价值和应用。深圳天行健六西格玛培训公司解析如下&#xff1a; 一、六西格玛管理…

1Panel - 现代化、开源的 Linux 服务器运维管理面板

产品介绍 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。 1Panel的官方网站&#xff1a;https://1panel.cn 1Panel的GitHub仓库&#xff1a;https://github.com/1Panel-dev/1Panel 体验环境&#xff1a;https://demo.1panel.cn 1Panel 特点 开源特性 Star 数…

详细解析什么是期权交易的获利方法

期权交易的获利方法 在期权交易之前进行充分的准备工作和风险评估是至关重要的。其中行情结构、策略方法、预期收益和风险评估&#xff0c;是期权交易成功的关键要素。它们能帮助我们更好地制定交易计划&#xff0c;控制风险&#xff0c;并追求稳定的利润。以下是对这四点的详…

比较好的平民衣服品牌有哪些?平价质量好短袖品牌推荐

随着气候变暖&#xff0c;夏天的持续时间似乎越来越长&#xff0c;短袖作为夏季的必备服装&#xff0c;受到了广大男士的青睐。然而&#xff0c;面对市场上众多的短袖品牌和不同的质量&#xff0c;大家都觉得选短袖的时候实在难以找到质量好且合适自己的。 选择合适的短袖确实…

SimCal(ECCV2020)

文章目录 AbstractMethodUsing Existing Long-tail Classification ApproachesLoss Re-weightingFocal Loss略 Proposed SimCal:Calibrating the ClassifierDual Head Inference Experiment创新 原文 代码 Abstract 本文主要研究了长尾分布下的实例分割问题&#xff0c;并提出…

Open CASCADE学习|一个点的坐标变换

gp_Trsf 类是 Open CASCADE Technology (OCCT) 软件库中的一个核心类&#xff0c;用于表示和操作三维空间中的变换。以下是该类的一些关键成员和方法的介绍&#xff1a; 成员变量&#xff1a; scale: Standard_Real 类型&#xff0c;表示变换的缩放因子。 shape: gp_TrsfFor…

网络安全之防范钓鱼邮件

随着互联网的快速发展&#xff0c;新的网络攻击形式“网络钓鱼”呈现逐年上升的趋势&#xff0c;利用网络钓鱼进行欺骗的行为越来越猖獗&#xff0c;对互联网的安全威胁越来越大。网络钓鱼最常见的欺骗方式就是向目标群体发送钓鱼邮件&#xff0c;而邮件标题和内容&#xff0c;…

用于肺结节分类的常规 EHR 的纵向多模态Transformer集成成像和潜在临床特征

Longitudinal Multimodal Transformer Integrating Imaging and Latent Clinical Signatures from Routine EHRs for Pulmonary Nodule Classification 摘要 该研究提出了一种基于Transformer 的多模态策略&#xff0c;用于将重复成像与常规电子健康记录&#xff08;EHRs&…

AbstractRoutingDataSource实现多数据源切换以及事务中无法切换问题

一、AbstractRoutingDataSource实现多数据源切换 为了实现数据源的动态切换&#xff0c;我们采用了AbstractRoutingDataSource结合AOP反射来自定义注解。通过这种机制&#xff0c;我们可以在运行时根据自定义注解来选择不同的数据源&#xff0c;从而实现灵活高效的数据访问策略…

C++内存分布 new和delete介绍

目录 C/C内存分布 栈区 堆区 静态区 常量区 C new和delete 分配空间形式对比 new delete与malloc free的区别 可不可以串着使用new和free呢 C/C内存分布 C的内存分布&#xff0c;大体上分为栈区 堆区 静态区 常量区 栈区 栈区是用于存储函数调用时的局部变量 函…

C语言中,如何判断两个数组是否包含相同元素?

在C语言中判断两个数组是否包含相同元素可以采用多种方法&#xff0c;其中最常见的方法是使用排序和比较两个数组的元素。在解释这个问题之前&#xff0c;我们需要了解一下C语言中的数组、排序算法和比较方法。 数组 数组是C语言中一种基本的数据结构&#xff0c;它是一系列相…

mysql的DDL语言和DML语言

DDL语言&#xff1a; 操作数据库&#xff0c;表等&#xff08;创建&#xff0c;删除&#xff0c;修改&#xff09;&#xff1b; 操作数据库 1&#xff1a;查询 show databases 2:创建 创建数据库 create database 数据库名称 创建数据库&#xff0c;如果不存在就创建 crea…
最新文章