(九)centos7案例实战——redis一主二从三哨兵高可用服务搭建

news2024/11/18 15:44:41

前言

本节内容是使用centos服务器搭建一套高可用的redis服务,采用的是一主二从三哨兵的模式。
需要注意的是搭建集群的过程中,我们要保证集群服务器之间可以相互访问,并且redis所需要访问的端口是开放的。我们从redis的下载,源码的编译,到redis的集群部署搭建,redis服务高可用的演示以及将redis安装成为一个服务都有详细的过程记录。使redis哨兵模式的搭建变得如此轻松。

  • 下载redis安装包并上传到服务器解压

①下载redis安装包

Download | Redis

②上传安装包到服务器

③解压redis安装包

命令:tar -zxvf redis-6.0.16.tar.gz

  • 编译安装redis

①编译redis安装包

②出现编译错误,升级gcc

③查看gcc版本

 gcc -v

④升级gcc到9的版本

yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutil

 

⑤切换到gcc 9.3版本,临时使用

scl enable devtoolset-9 bash

 ⑥设置永久使用gcc9.3版本

 ⑦重新编译redis,没有错误,编译成功 

⑧将redis安装到指定目录

make install PREFIX=/usr/local/redis

⑨将配置文件redis.conf、sentinel.conf及utils文件夹复制到redis安装目录/usr/local/redis

cp redis.conf /usr/local/redis/redis.conf

cp sentinel.conf /usr/local/redis/sentinel.conf

cp -r utils/ /usr/local/redis/utils

  • 启动redis并测试

①redis启动

./redis-server /usr/local/redis/redis.conf

②连接客户端测试

 ./redis-cli

  •  修改redis.conf与sentinel.conf配置

①redis.conf

#端口
port 6379
#ip配置
bind 0.0.0.0
#后台执行
daemonize yes
#pid
pidfile "/var/run/redis.pid"
#标记是否是从节点
#replicaof 192.168.0.57 6379
#日志记录文件
logfile "/data/redis/log/redis.log"
#RDB数据记录文件
dbfilename dump.rdb
save 900 1 #表示900秒内如果至少有1个 key 的值变化,则保存
save 300 10 #表示300秒内如果至少有10个key 的值变化,则保存
save 60 10000 #表示60秒内如果至少有10000个 key 的值变化则保存
#存储目录
dir "/data/redis/data"
#开启AOF持久化方式
appendonly yes
#追加文件名称
appendfilename "appendonly.aof"
#aof持久化策略的配置
appendfsync everysec
#RDB-AOF混合持久化
aof-use-rdb-preamble yes
#redis访问密码
requirepass 5Bw3PSNvnK8UiH8Y
#从节点配置主节点密码
masterauth 5Bw3PSNvnK8UiH8Y

②sentinel.conf

#绑定的ip地址
bind 0.0.0.0
#是否后台运行
daemonize yes
#是否开启密码保护模式
protected-mode yes
#sentinel端口
port 26379
#进程ID
pidfile "/var/run/sentinel.pid"
#日志文件名
logfile "sentinel.log"
#日志目录
dir "/data/redis/log"
# ip
sentinel announce-ip 192.168.0.56
# 主节点,2代表选举的票数
sentinel monitor mymaster 192.168.0.56 6379 2
# 哨兵连接主节点多长时间没有响应就代表主节点宕机
sentinel down-after-milliseconds mymaster 30000
# 在进行同步的过程中,多长时间完成算有效,系统默认值是 3 分钟。
sentinel failover-timeout mymaster 60000
# 故障转移时,最多有多少个从节点对新的主节点进行同步
sentinel parallel-syncs mymaster 1
# 密码配置
sentinel auth-pass mymaster 5Bw3PSNvnK8UiH8Y

  • 同步redis安装包到其它服务器

 ①同步redis安装包到192.168.0.57服务器

 ②同步redis安装包到192.168.0.59服务器

  • 修改其它服务器redis.conf与sentinel.conf的配置信息

①其它服务器redis.conf

 

 ②其它服务器sentinel.conf

  • 根据配置文件创建redis存储目录和日志目录

  • 启动redis节点 

①启动所有服务器节点,执行命令

./redis-server /usr/local/redis/redis.conf

 

②连接redis,查看节点状态

命令:

./redis-cli -h 192.168.0.56 -p 6379

 ③启动所有服务器哨兵节点,执行命令

./redis-sentinel /usr/local/redis/sentinel.conf

 ④连接redis,查看哨兵节点状态

命令:

./redis-cli -h 192.168.0.56 -p 26379

  • 测试redis的高可用

①关闭主节点

 ②查看其它节点状态

③重新启动宕机的redis

 

  •  redis设置为服务并开机自启

①在linux启动目录/etc/init.d下创建一个redis服务脚本

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

### BEGIN INIT INFO
# Provides:     redis_6379
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Redis data structure server
# Description:          Redis data structure server. See https://redis.io
### END INIT INFO

#redis节点配置
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis.pid
CONF="/usr/local/redis/redis.conf"

#哨兵配置
SENTINELPORT=26379
SENTINELEXEC=/usr/local/redis/bin/redis-sentinel
SENTINELCLIEXEC=/usr/local/redis/bin/redis-cli
SENTINELPIDFILE=/var/run/sentinel.pid
SENTINELCONF="/usr/local/redis/sentinel.conf"


case "$1" in
    start)
	    # redis node start
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        
		
		# redis sentinel start
		if [ -f $SENTINELPIDFILE ]
        then
                echo "$SENTINELPIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis sentinel..."
                $SENTINELEXEC $SENTINELCONF
        fi
        ;;
    stop)
		# redis node stop
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT -a 5Bw3PSNvnK8UiH8Ya shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
		
		# redis sentinel stop
		if [ ! -f $SENTINELPIDFILE ]
        then
                echo "$SENTINELPIDFILE does not exist, process is not running"
        else
                PID=$(cat $SENTINELPIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $SENTINELPORT  shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis Sentinel to shutdown ..."
                    sleep 1
                done
                echo "Redis Sentinel stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac

 ②授予执行权限

命令:chmod +x /etc/rc.d/init.d/redis

③设置redis服务开机自启

命令:chkconfig redis on

④查看是否已经添加到服务

命令:chkconfig --list 

⑤redis服务操作命令

启动:systemctl start redis

查看状态:systemctl status redis

停止:systemctl st redis

结语

至此,关于redis的集群安装到这里就结束了,需要注意的是我们要保证不同服务器之间是可以相互访问,并且端口是通的。最好关闭防火墙或者提供端口访问映射,下期见。。。

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

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

相关文章

ffmpeg 安装教程

官网:Download FFmpeg window 转:ffmpeg安装教程_moon son的博客-CSDN博客_ffmpeg安装 然后解压,配置全局变量环境。点击“系统属性->高级系统设置->环境变量->系统变量”,选择“Path”条目,点击“编辑->…

将项目部署到Linux系统上

目的是让我们的项目在linux上也能运行起来 有两种部署方式,手工部署或者是通过shell脚本自动部署 手工部署 准备工作:使用ifconfig指令查出服务器的ip地址:192.168.58.130 1.在本地Idea中开发一个springboot项目,并且打包成ja…

以太网模块的传输距离怎么看

光模块的关键标准组织主要有两个:IEEE和MSA。其中GBASE开头的标准主要是IEEE802.3提出与定义的。要弄清光模块的传输距离,首先让我们要弄清楚它的命名是怎样的。 100G光模块的命名规则: 400G光模块的命名规则: 其中100G和400G光模…

SpringBoot整合Mybatis方式1:使用XML方式整合Mybatis

SpringBoot整合Mybatis简介SpringBoot整合Mybatis方式1:使用XML方式整合Mybatis1.用idea创建一个添加mybatis需要的相关依赖的工程。2.准备数据库和表3.创建表映射类4.创建mapper文件4.1 创建UsersMapper.xml文件,并添加sql语句4.2 创建mapper对应的代理…

Docker的Cgroup资源限制

Docker通过Cgroup来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面,基本覆盖了常见的资源配颡和使用量控制。 Cgoup 是CotrolGroups 的缩写,是Linux 内核提供的一种可以限制、记录、隔高进程组所使用的物理资源(如CPU、内存…

基于jsp的学生培训管理系统

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

【教学类-18-01】20221123《蒙德里安红黄蓝格子画》(大班)

效果展示: 单页效果 多页效果 预设效果 背景需求: 2022年11月23日,作为艺术特色幼儿园,蒙德里安风格装饰在我们幼儿园的环境中。 蒙德里安是几何抽象画派的先驱,以几何图形为绘画的基本元素,与德士堡等创…

MyBatis-Plus 和swagger

MyBatis-Plus 1.1MyBatis Plus 简介 mybatisplus 官网: https://baomidou.com/ MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变, 为简化开发、提高效率而生。 1.2主要特性&a…

【项目管理】Java使用pdfbox调用打印机打印PDF文件

【项目管理】Java使用pdfbox调用打印机打印PDF文件1.项目前言2.项目实现3.关键代码4.效果演示5.问题处理5.1 安装对应字体5.2 修改对应代码系统:Win10 Java:1.8.0_333 IDEA:2020.3.4 Gitee:https://gitee.com/lijinjiang01/Printe…

如何使用轮播图实现水平内容自动切换

通过轮播图实现一个水平内容自动切换 效果展示 前置准备 三张背景图片 具体步骤 添加一个轮播图组件 添加一个图片 添加一个标题 添加数据表 添加事件 添加触发器 绑定数据 步骤拆解 添加一个轮播图组件 1.1 拖拽 轮播图 到 编辑区 1.2 调整 轮播图 样式 添加一个图片 …

有关QT的问题大全

文章目录现在2022年,Qt发展如何?是就业的好选择吗?如何学习Qt,c到什么程度可以去学qt?现在 Qt 好找工作吗?为什么工业软件开发一般用的都是QT?初学QT怎么学?请问目前做windows桌面应用程序,MFC…

工作中Java Stream的简单应用

标题开发使用filter() and map()max()根据集合对象中的某个属性取最大值先解释一下各变量含义: temps集合是userids的子集(大前提) cache是temps集合在userids集合中的补集 简单来说就是,userids集合-temps集合cache补集,如下图所示目标:此次为工作中实际遇到的问题,需要得到c…

C++编译链接

文章目录C编译链接C编译模式分离式编译是个啥?怎么实现上述过程?定义与声明引出新的问题头文件有关头文件用来干啥?include头文件中应该写什么?#ifndef通过gcc/g命令来看完整的编译链接过程预处理(Preprocessing)编译(Compilation…

院内导航系统哪家口碑好?医疗院内导航地图公司排名

“医生,请问验血怎么走?”   “护士,请问药房在哪儿?”   “您好,做CT在什么地方?”   这些问题是医生和护士经常遇到的问题。的确,患者就诊时,由于对医院环境不熟悉&#xff…

云计算(虚拟化)面试宝典

一:服务器虚拟化 1.名词解释 (1)资源动态调整(对象是虚拟机) 管理员操作,对CPU、内存、网卡、硬盘、GPU进行调整。 FusionCompute支持虚拟机资源动态调整,用户可以根据业务负载动态调整资源的使用情况。 虚拟机资源调整包括: 离线/在线调整vCPU数目 无论虚拟机处于离线…

如何使用C++图形界面开发框架Qt创建一个应用程序?(Part 3)

Qt是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 点击获取Qt组件下载 …

Flink的状态编程

Flink 处理机制的核心,就是“有状态的流式计算”。在流处理中,数据是连续不断到来和处理的。每个任务进行计算处理时,可以基于当前数据直接转换得到输出结果;也可以依赖一些其他数据。这些由一个任务维护,并且用来计算…

【HAL库】STM32CubeMX开发----STM32F407----CAN通信实验

STM32CubeMX 下载和安装 详细教程 【HAL库】STM32CubeMX开发----STM32F407----目录 前言 本次实验以 STM32F407VET6 芯片为MCU,使用 25MHz 外部时钟源。 CAN通信波特率为 500K bps。 CAN通信引脚 与 MCU引脚 对应关系如下: CAN通信引脚MCU引脚TXPB9RXP…

虹科教您 | 虹科Automation softPLC入门操作指南(2)——子程序和用户自定义功能块 UDFB

虹科KPA Automation softPLC是为Linux、Xenomai、INtime、Windows等实时操作系统开发PLC的编程环境,适合需要使用IEC61131-3和PLCopen标准的控制技术和进行PLC编程的用户。本篇文章将帮助您创建和使用IEC语言开发的函数和功能块。 Automation softPLC Studio 命名规…

kettle 9.2源码打包和idea环境启动及常见错误

一:源码打包 这里为什么是kettle 9.2,因为kettle 9.3需要jdk11 这里直接去下载kettle的源码,tag9.2.0.4-R。这里需要自己搭建一个nexus仓库,因为有些包从kettle的仓库里面下载不下来。 nexus新建仓库代理, 记得加到public里面去 …