一主双从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.mzph.cn/bicheng/3516.shtml

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

相关文章

stm32——GPIO学习

对于许多刚入门stm32的同学们来说,GPIO是我们的第一课,初出茅庐的我们会对GPIO的配置感到疑惑不解,也是劝退我们的第一课,今天我们就来一起学习一下stm32的GPIO,提振一下信心。好的,发车了小卷卷们&#xf…

CDR2024版本免费Windows10包含免费激活码序列号

CorelDRAW2024作为一款专业的平面设计软件,专注于矢量图形编辑与排版,其强大的功能和丰富的工具集为设计师们提供了无限可能。在最新版本中,CorelDRAW引入了一系列令人瞩目的新功能,进一步提升了用户体验和工作效率。以下是对Core…

【css】select实现placeholder效果

场景&#xff1a;使用select下拉选择框的时候&#xff0c;需要像其他控件一样提示默认信息。 问题&#xff1a;表单控件select没有placeholder属性。 解决方案&#xff1a;通过css实现&#xff0c;不需要js <style>select > option[disabled]{ color:#999;cursor: n…

【springMVC】@RequestMapping的作用

1.作用 将指定 URL 的请求绑定到一个特定的方法或类上&#xff0c;从而实现对请求的处理和响应。 RequestMapping注解只能出现在类上或者方法上。 2.value属性 Ant风格的value&#xff08;模糊匹配路径&#xff09;&#xff1a; 1&#xff09;?&#xff0c;代表任意一个字符 …

用docker方式安装openGauss数据库的事项记录

文章目录 &#xff08;一&#xff09;背景&#xff08;二&#xff09;安装&#xff08;2.1&#xff09;安装docker&#xff08;2.2&#xff09;安装openGauss &#xff08;三&#xff09;运行&#xff08;3.1&#xff09;运行openGauss镜像&#xff08;3.2&#xff09;连接open…

30 OpenCV 点多边形测试

文章目录 点多边形测试pointPolygonTest示例 点多边形测试 pointPolygonTest pointPolygonTest( InputArray contour,// 输入的轮廓 Point2f pt, // 测试点 bool measureDist // 是否返回距离值&#xff0c;如果是false&#xff0c;1表示在内面&#xff0c;0表示在边界上&a…

定时器使用

最近工作中遇到了一个场景&#xff0c;需要定时请求后台数据并更新到界面上&#xff0c;在C#中&#xff0c;有三种定时器&#xff1a; 1.System.Timers.Timer 2.System.Threading.Timer 3.System.Windows.Threading.DispatcherTimer 1&#xff0c;2两种方式差不多&#xff0c;都…

白嫖游戏指南,Epic喜加二:《INDUSTRIA》《LISA: Definitive Edition》

前言 Epic喜加二&#xff1a;《INDUSTRIA》《LISA: Definitive Edition》《INDUSTRIA》简介&#xff1a; 《LISA: Definitive Edition》简介&#xff1a; 前言 接下来有时间会分享一些游戏相关可以白嫖的资源&#xff0c;包括游戏本体、游戏素材资源等等。 有需要的小伙伴可以…

ABAP json解析使用引用代替预定义数据结构

背景&#xff1a;在解析JSON数据时&#xff0c;通常会事先为定义相应的ABAP数据结构。但是&#xff0c;当遇到一些结构纵深较为复杂的情况时&#xff0c;会比较麻烦。 处理&#xff1a;使用引用类型来定义结构中的纵深部分来达到“省事”的目的&#xff0c;缺点在于访问时需要使…

JavaScript基础学习(7)

⭐ 作者简介&#xff1a;码上言 ⭐ 代表教程&#xff1a;Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容&#xff1a;个人博客系统 ⭐我的文档网站&#xff1a;http://xyhwh-nav.cn/ ⭐微信公众号&#xff1a;码上言 文章目录 操作符1. 乘性操作符1.1 乘法…

零拷贝的几种实现

mmapwrite() sendfile系统调用 sendfile SG-DMA

Python 中range和xrange有什么区别

Python 中range和xrange有什么区别 在Python中&#xff0c;range 和 xrange 是两个用于生成数字序列的函数&#xff0c;但它们之间有一些区别。让我详细解释一下&#xff1a; range 函数&#xff1a; range 函数用于生成一个数字序列&#xff0c;返回一个列表对象。语法&…

Linux I2C(二) - I2C软硬件架构

1&#xff0c;I2C的总线拓扑 2&#xff0c;I2C S/W topology linux kernel I2C framework使用如下的软件拓扑抽象I2C硬件&#xff08;我们可以一起领会一下其中的“设备模型”思想&#xff09;&#xff1a; 1&#xff09;platform bus&#xff08;/sys/bus/platform&#xff0…

七、四个步骤实现FFmpeg推流播放实战

目录 1.Windows安装已经集成nginx-http-flv-module的nginx, 2.nginx.conf配置文件 3.ffmpeg推流 4.v

jmeter分布式压力测试搭建

配置master&#xff08;controller&#xff09; 配置jmeter.properties文件 remote_hostsxxx:1099,xxx:1099 #remote_hostslocalhost:1099,localhost:2010 # RMI port to be used by the server (must start rmiregistry with same port) server_port1099 server.rmi.ssl.dis…

excel文件导入dbeaver中文乱码

1.将excel文件进行另存为&#xff0c;保存类型选择【CSV】 2.选择【工具】–>【web选项】–> 【编码】–> 【简体中文&#xff08;GB18030&#xff09;】 3.在DBeaver进行数据导入 直接导入应该就可以&#xff0c;如果不行的话按下面处理。 选择【导入数据——选择cs…

软考 - 系统架构设计师 - 基于口令的认证方式和基于公钥体系的认证方式

基于口令的认证方式和基于公钥体系的认证方式在网络安全领域都有广泛的应用&#xff0c;但它们各自具有不同的特点和使用场景。 基于口令的认证方式 基于口令的认证方式是一种传统的身份认证技术&#xff0c;用户通过输入预设的密码来验证身份。这种方式实现简单&#xff0c;成…

Python函数小知识

目录 一、函数的定义和调用 二、函数参数 三、函数作用域 四、递归函数和匿名函数 一、函数的定义和调用 def 函数名(参数): 自定义函数可以分为有参函数和无参函数 。 函数的作用&#xff1a; 在Python中定义函数可以提高代码的复用率&#xff0c;避免重复的代码&#xff0c;…

PLL深度解析第一篇——PLL的知识图谱

在硬件电路中&#xff0c;时钟就像心脏一样&#xff0c;在时钟的节拍下&#xff0c;不同的芯片、不同的电路、不同的接口都可以有序的进行工作或者通信&#xff08;类似流水线一样&#xff0c;必须有节奏的运行&#xff09;。 但是在芯片中&#xff0c;不同的模块和接口工作的频…