CentOS安装Redis教程-shell脚本一键安装配置

文章目录

  • 前言
  • 一、Redis单机版安装教程
    • 1. 复制脚本
    • 2. 增加执行权限
    • 3. 执行脚本
  • 二、Redis扩展集群版安装教程
    • 1. 安装Redis单机版
    • 2. 复制脚本
    • 3. 增加执行权限
    • 4. 执行脚本
    • 5. 测试
    • 6. redis_cluster.sh 命令
      • 6.1 启动Redis扩展集群
      • 6.2 停止Redis扩展集群
      • 6.3 查看Redis扩展集群节点信息
      • 6.4 查看Redis扩展集群实时日志
      • 6.5 清除Redis扩展集群目录所有数据
      • 6.6 清除Redis扩展集群目录日志数据
  • 总结


前言

本文将介绍如何安装和配置Redis单机版和扩展集群版。首先,我们会详细说明如何安装Redis单机版,并提供了相应的脚本来简化安装过程。然后,我们会介绍如何在已经安装好的Redis单机版基础上搭建扩展集群,并提供了相应的脚本来帮助您完成这一步骤。最后,我们还会演示一些测试命令以验证集群是否正常工作。


一、Redis单机版安装教程

1. 复制脚本

首先,将以下脚本内容复制并保存为/tmp/install_redis.sh文件。

#!/bin/bash

# 安装版本
redis_version="6.2.7"
# 安装目录
#redis_installDir="/opt/module/redis"
redis_installDir="/opt/bigdata/redis"

install_redis() {
  local version=$1
  local installDir=$2
  local redisconf_file=$installDir/redis-$version/redis.conf
  # 安装工具包
  yum -y install epel-release gcc make tcl

  # 下载地址
  local downloadUrl="http://download.redis.io/releases/redis-$version.tar.gz"
  if [ -z "$(command -v wget)" ]; then
    yum -y install wget
    if [ $? -eq 0 ]; then
      echo "wget安装完成"
    else
      echo "wget安装失败,请检查"
      exit 1
    fi
  fi
  if [ ! -d "${installDir}" ]; then
    mkdir -p "${installDir}"
    if [ $? -eq 0 ]; then
      echo "安装目录${installDir}已创建"
    else
      echo "请确保您有足够的权限来创建目录,请增加权限后再次执行"
      exit 1
    fi
  fi
  if [ ! -f "/tmp/redis-$version.tar.gz" ] ; then
    wget "$downloadUrl" -P /tmp
    if [ $? -eq 0 ]; then
      echo "redis-$version.tar.gz下载成功"
    else
      echo "redis-$version.tar.gz下载失败,请重试或手动下载到/tmp目录下再次执行"
      echo "下载地址:$downloadUrl"
      exit 1
    fi
  else
    echo "/tmp/redis-$version.tar.gz文件已存在"
  fi
  if [ -d "${installDir}/redis-$version" ]; then
    echo "${installDir}/redis-$version 已存在,正在删除..."
    rm -rf "${installDir}/redis-$version"
  fi
  tar -zxvf "/tmp/redis-$version.tar.gz" -C "${installDir}"
  if [ $? -eq 0 ]; then
    echo "redis-$version.tar.gz解压成功"
  else
    echo "redis-$version.tar.gz解压失败,请查看异常信息后重试"
    exit 1
  fi
  # 编译和安装
  cd ${installDir}/redis-$version
  make && make install

  sed -i "s|daemonize no|daemonize yes|" "$redisconf_file"
  sed -i "s|bind 127.0.0.1 -::1|bind 127.0.0.1 -::1\nbind 0.0.0.0|" "$redisconf_file"
  sed -i "s|# requirepass foobared|# requirepass foobared|" "$redisconf_file"

#  sed -i "s|port 6379|port 6379|" "$redisconf_file"
#  sed -i "s|# cluster-enabled yes|cluster-enabled yes|" "$redisconf_file"
#  sed -i "s|# cluster-config-file nodes-6379.conf|cluster-config-file nodes.conf|" "$redisconf_file"
#  sed -i "s|# cluster-node-timeout 15000|cluster-node-timeout 5000|" "$redisconf_file"
#  sed -i "s|appendonly no|appendonly yes|" "$redisconf_file"

  echo "redis 单机版下载、安装、配置完成"
  echo "redis安装目录:${installDir}/redis-$version"
  echo "单机版 进入 redis 交互界面命令:redis-cli -h $(ip addr | grep 'inet ' | awk '{print $2}'| tail -n 1 | grep -oP '\d+\.\d+\.\d+\.\d+') -p 6379"
  echo "集群版 进入 redis 交互界面命令:redis-cli -h $(ip addr | grep 'inet ' | awk '{print $2}'| tail -n 1 | grep -oP '\d+\.\d+\.\d+\.\d+') -c -p 30001"

#  mkdir -p "${installDir}/redis-$version/cluster-test"
#  for cluster_dir in {7000..7005}
#  do
#    local create_dir="${installDir}/redis-$version/cluster-test/$cluster_dir"
#    mkdir -p "$create_dir"
#    cp "$redisconf_file" "$create_dir"
#    sed -i "s|port 6379|port $cluster_dir|" "$create_dir/redis.conf"
#    redis-server "$create_dir/redis.conf"
#    echo "$cluster_dir 端口的redis启动成功"
#  done

#  local dir=${installDir}/redis-$version/utils/create-cluster
#  sed -i "s|CLUSTER_HOST=127.0.0.1|CLUSTER_HOST=192.168.145.105|" "$dir/create-cluster"
#  sed -i "s|PROTECTED_MODE=yes|PROTECTED_MODE=no|" "$dir/create-cluster"
#  $dir/create-cluster start
#  $dir/create-cluster create

}

install_redis "$redis_version" "$redis_installDir"

exit 0

2. 增加执行权限

在终端中执行以下命令,为脚本添加执行权限。

chmod a+x /tmp/install_redis.sh

3. 执行脚本

执行以下命令,运行脚本开始下载、安装和配置Redis。

/tmp/install_redis.sh

请等待安装完成,如有异常会有提示。

成功如下图所示:

在这里插入图片描述


二、Redis扩展集群版安装教程

1. 安装Redis单机版

要安装Redis扩展集群版,要先安装好单机版。

2. 复制脚本

首先,将以下脚本内容复制并保存为/opt/bigdata/redis/redis-6.2.7/redis_cluster.sh文件。

#!/bin/bash

# 安装版本
version="6.2.7"
# 安装目录
#installDir="/opt/module/redis"
installDir="/opt/bigdata/redis"
# Settings
BIN_PATH="${installDir}/redis-$version/src/"
CLUSTER_HOST=$(ip addr | grep 'inet ' | awk '{print $2}'| tail -n 1 | grep -oP '\d+\.\d+\.\d+\.\d+')
PORT=30000
TIMEOUT=2000
NODES=6
REPLICAS=1
PROTECTED_MODE=yes
ADDITIONAL_OPTIONS=""
BIND='0.0.0.0 -::1'
#REQUIREPASS="redisroot"

# 您可能需要将上述配置参数放入config.sh中,以便执行以下命令
# 覆盖默认值而不修改此脚本。

if [ -a config.sh ]
then
    source "${installDir}/redis-$version/utils/create-cluster/config.sh"
fi

# 结束端口
ENDPORT=$((PORT+NODES))

if [ "$1" == "start" ]
then
    while [ $((PORT < ENDPORT)) != "0" ]; do
        PORT=$((PORT+1))
        port_dir=${installDir}/redis-$version/redis_cluster/$PORT
        mkdir -p "$port_dir"
        echo "Starting $PORT"
        cd $port_dir
#        $BIN_PATH/redis-server --bind $BIND --requirepass $REQUIREPASS --port $PORT  --protected-mode $PROTECTED_MODE --cluster-enabled yes --cluster-config-file "$port_dir/nodes-${PORT}.conf" --cluster-node-timeout $TIMEOUT --appendonly yes --appendfilename "appendonly-${PORT}.aof" --dbfilename "$port_dir/dump-${PORT}.rdb" --logfile "$port_dir/${PORT}.log" --daemonize yes "${ADDITIONAL_OPTIONS}"
#        $BIN_PATH/redis-server --bind $BIND --requirepass $REQUIREPASS --port $PORT  --protected-mode $PROTECTED_MODE --cluster-enabled yes --cluster-config-file nodes-${PORT}.conf --cluster-node-timeout $TIMEOUT --appendonly yes --appendfilename appendonly-${PORT}.aof --dbfilename dump-${PORT}.rdb --logfile ${PORT}.log --daemonize yes ${ADDITIONAL_OPTIONS}
        $BIN_PATH/redis-server --bind $BIND --port $PORT  --protected-mode $PROTECTED_MODE --cluster-enabled yes --cluster-config-file nodes-${PORT}.conf --cluster-node-timeout $TIMEOUT --appendonly yes --appendfilename appendonly-${PORT}.aof --dbfilename dump-${PORT}.rdb --logfile ${PORT}.log --daemonize yes ${ADDITIONAL_OPTIONS}
    done
    exit 0
fi

if [ "$1" == "create" ]
then
    HOSTS=""
    while [ $((PORT < ENDPORT)) != "0" ]; do
        PORT=$((PORT+1))
        HOSTS="$HOSTS $CLUSTER_HOST:$PORT"
    done
    OPT_ARG=""
    if [ "$2" == "-f" ]; then
        OPT_ARG="--cluster-yes"
    fi
    $BIN_PATH/redis-cli --cluster create $HOSTS --cluster-replicas $REPLICAS $OPT_ARG
    exit 0
fi

if [ "$1" == "stop" ]
then
    while [ $((PORT < ENDPORT)) != "0" ]; do
        PORT=$((PORT+1))
        echo "Stopping $PORT"
        $BIN_PATH/redis-cli -p $PORT shutdown nosave
#        $BIN_PATH/redis-cli -p $PORT shutdown
    done
    exit 0
fi

if [ "$1" == "watch" ]
then
    PORT=$((PORT+1))
    while [ 1 ]; do
        clear
        date
        $BIN_PATH/redis-cli -p $PORT cluster nodes | head -30
        sleep 1
    done
    exit 0
fi

if [ "$1" == "tail" ]
then
    INSTANCE=$2
    PORT=$((PORT+INSTANCE))
    tail -f "${installDir}/redis-$version/redis_cluster/$PORT/${PORT}.log"
    exit 0
fi

if [ "$1" == "tailall" ]
then
    while [ $((PORT < ENDPORT)) != "0" ]; do
        PORT=$((PORT+1))
        log_dir="${installDir}/redis-$version/redis_cluster/$PORT/$PORT.log"
        tail -f "$log_dir"
    done
    exit 0
fi

if [ "$1" == "call" ]
then
    while [ $((PORT < ENDPORT)) != "0" ]; do
        PORT=$((PORT+1))
        $BIN_PATH/redis-cli -p $PORT $2 $3 $4 $5 $6 $7 $8 $9
    done
    exit 0
fi

host="$(ip addr | grep 'inet ' | awk '{print $2}'| tail -n 1 | grep -oP '\d+\.\d+\.\d+\.\d+')"
if [ "$1" == "clean" ]
then
    while [ $((PORT < ENDPORT)) != "0" ]; do
        PORT=$((PORT+1))
        port_dir=${installDir}/redis-$version/redis_cluster/$PORT
        rm -rf $port_dir/*.log
        rm -rf $port_dir/appendonly*.aof
        rm -rf $port_dir/dump*.rdb
        rm -rf $port_dir/nodes*.conf
        echo "flushdb" | redis-cli -c -h "$host" -p $PORT
        echo "cluster reset" | redis-cli -c -h "$host" -p $PORT
    done
    exit 0
fi

if [ "$1" == "clean-logs" ]
then
    while [ $((PORT < ENDPORT)) != "0" ]; do
        PORT=$((PORT+1))
        port_dir=${installDir}/redis-$version/redis_cluster/$PORT
        rm -rf $port_dir/*.log
    done
    exit 0
fi

echo "Usage: $0 [start|create|stop|watch|tail|clean|call]"
echo "start       -- Launch Redis Cluster instances."
echo "create [-f] -- Create a cluster using redis-cli --cluster create."
echo "stop        -- Stop Redis Cluster instances."
echo "watch       -- Show CLUSTER NODES output (first 30 lines) of first node."
echo "tail <id>   -- Run tail -f of instance at base port + ID."
echo "tailall     -- Run tail -f for all the log files at once."
echo "clean       -- Remove all instances data, logs, configs."
echo "clean-logs  -- Remove just instances logs."
echo "call <cmd>  -- Call a command (up to 7 arguments) on all nodes."

3. 增加执行权限

在终端中执行以下命令,为脚本添加执行权限。

cd /opt/bigdata/redis/redis-6.2.7
chmod a+x ./redis_cluster.sh

4. 执行脚本

执行以下命令,运行脚本开始创建Redis扩展集群的目录。

./redis_cluster.sh start

如下图所示:

在这里插入图片描述
执行以下命令创建Redis扩展集群。

echo yes | ./redis_cluster.sh create

成功的开始和结束的截图如下图所示:

在这里插入图片描述

5. 测试

执行以下命令进入Redis扩展集群交互界面。

redis-cli -h 192.168.145.105 -c -p 30001

使用命令测试是否正常,如下图所示。

在这里插入图片描述

6. redis_cluster.sh 命令

6.1 启动Redis扩展集群

cd /opt/bigdata/redis/redis-6.2.7
./redis_cluster.sh start

6.2 停止Redis扩展集群

cd /opt/bigdata/redis/redis-6.2.7
./redis_cluster.sh stop

6.3 查看Redis扩展集群节点信息

cd /opt/bigdata/redis/redis-6.2.7
./redis_cluster.sh watch

6.4 查看Redis扩展集群实时日志

cd /opt/bigdata/redis/redis-6.2.7
./redis_cluster.sh tail 1

6.5 清除Redis扩展集群目录所有数据

cd /opt/bigdata/redis/redis-6.2.7
./redis_cluster.sh clean

6.6 清除Redis扩展集群目录日志数据

cd /opt/bigdata/redis/redis-6.2.7
./redis_cluster.sh clean-logs

总结

通过本教程,您学习到了如何在Linux系统上进行Redis的安装和配置。首先,您学习到了如何使用脚本自动下载、编译和安装Redis单机版,并对其进行必要的配置修改以满足实际需求。然后,在已经部署好的单机版基础上,您学习到了如何使用另一个脚本创建并启动一个具有多个节点(主节点+从节点)组成的扩展集群。

希望本教程对您有所帮助!如有任何疑问或问题,请随时在评论区留言。感谢阅读!

参考链接:

  • https://redis.io/docs/management/scaling/

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

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

相关文章

mysql 基础(三)

一、多表设计 数据库设计范式 第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值&#xff0c;就说明该数据库表满足了第一范式。第二范式就是要有主键&#xff0c;要求其他字段都依赖于主键。 没有主键就没有唯一性&…

知识产权实缴注册资金的流程

随着新《公司法》的出台&#xff0c;很多企业老板几乎睡不着&#xff0c;都在为实缴注册资本苦恼。前文有谈到目前比较靠谱的实缴方式是知识产权实缴。那么知识产权实缴的流程是怎么样的&#xff1f;需要准备哪些资料&#xff1f; 下面用一张图为各位企业老板们解读知识产权实…

ios上架缺少info.plist文件

app打包ios提示修改info.plist文件&#xff0c;在iOS原生开发中提供了配置 Info.plist 和 资源文件&#xff08;Bundle Resources&#xff09;。uni-app中对常用项进行了封装&#xff0c;提供了manifest.json。 但manifest.json不能包含所有iOS的配置。需要自定义一个Info.plis…

掌握大语言模型技术: 推理优化

掌握大语言模型技术_推理优化 堆叠 Transformer 层来创建大型模型可以带来更好的准确性、少样本学习能力&#xff0c;甚至在各种语言任务上具有接近人类的涌现能力。 这些基础模型的训练成本很高&#xff0c;并且在推理过程中可能会占用大量内存和计算资源&#xff08;经常性成…

【本科生机器学习】【北京航空航天大学】课题报告:支持向量机(Support Vector Machine, SVM)初步研究【上、原理部分】

说明&#xff1a; &#xff08;1&#xff09;、仅供个人学习使用&#xff1b; &#xff08;2&#xff09;、本科生学术水平有限&#xff0c;故不能保证全无科学性错误&#xff0c;本文仅作为该领域的学习参考。 一、课程总结 1、机器学习&#xff08;Machine Learning, ML&am…

【9.DAC数模转换器】蓝桥杯嵌入式一周拿奖速成系列

系列文章目录 蓝桥杯嵌入式系列文章目录(更多此系列文章可见) DAC数模转换器 系列文章目录一、STM32CUBEMX配置二、项目代码1.main.c --> DACProcess 总结 一、STM32CUBEMX配置 STM32CUBEMX PA4 -> DAC1_OUT1 ; PA5 -> DAC1_OUT2DACProcess 二、项目代码 1.main.c -…

司铭宇老师:销售人员心态激励培训:销售心态调整与情绪压力管理

销售人员心态激励培训&#xff1a;销售心态调整与情绪压力管理&#xff1a;迈向成功的关键要素 导语&#xff1a;在竞争激烈的销售行业中&#xff0c;心态调整与情绪压力管理成为销售人员至关重要的能力。如何在这场博弈中保持良好的心态&#xff0c;有效应对压力&#xff0c;…

C++的关键字,命名空间,缺省参数,函数重载以及原理

文章目录 前言一、C关键字(C98)二、命名空间命名空间介绍命名空间的使用 三、C输入【cin】& 输出【cout】四、缺省参数缺省参数概念缺省参数分类缺省参数的使用小结一下 五、函数重载函数重载介绍函数重载类型 六、C支持函数重载的原理--名字修饰(name Mangling)【重点】 前…

科普栏目|负氧离子水壁炉低能耗的背后的原因与生活优势

科普栏目&#xff5c;负氧离子水壁炉低能耗的背后的原因与生活优势 在当今追求绿色生活和能源高效利用的潮流中&#xff0c;负氧离子水壁炉以其低能耗的特性成为了家庭装饰领域的一颗明珠。究竟是什么原因使得这项技术在能耗方面脱颖而出呢&#xff1f;而低能耗又能为生活带来…

freeswitch智能外呼系统搭建流程

1.获取实时音频数据 media_bug &#xff08;好多mrcp方式也崩溃所以用以下方式&#xff09; 可以参考 方式可以通过socket或者webscoket freeswitch[1.05]用websocket发送mediabug语音流到ASRProxy实现实时质检和坐席辅助 - 知乎 2.webscoket 好多c的库放模块容易崩溃 可以…

适合孩子读书用什么的落地灯?落地护眼灯测评推荐

现代人用眼负荷极大&#xff0c;不仅白天要办公&#xff0c;晚上更是玩手机、刷短视频或是晚间看书阅读&#xff0c;所以营造一个健康的照明环境很重要&#xff01; 如何营造一个健康的照明环境呢&#xff1f;那就不得不提起最近就很火的落地护眼灯。不同于其他台灯灯具&#…

flutter极光推送配置厂商通道(华为)笔记--进行中

一、基础集成按照下面官方文档进行 厂商通道相关参数申请教程 集成厂商 集成指南 官方文档&#xff1a;厂商通道回执配置指南 注意&#xff1a;不同厂商对app上架的要求不同&#xff0c;华为、荣耀 对app上架没有硬性要求 遇到问题 1、引入apply plugin: com.huawei.agconn…

Java玩转《啊哈算法》排序之桶排序

过去心不可得&#xff0c;现在心不可得&#xff0c;未来心不可得 目录在这里 楔子代码地址桶排序代码核心部分优缺点 完整代码演示 升级版核心代码完整代码演示 楔子 大家好&#xff01;本人最近看了下《啊哈算法》&#xff0c;写的确实不错&#xff0c;生动形象又有趣&#x…

k8s的安全机制

k8s是分布式集群管理工具&#xff0c;k8s作用是容器编排 1、安全机制核心&#xff1a;API server。API server作为整个集群内部通信的中介&#xff0c;也是外部控制的入口&#xff0c;所有的安全机制都是围绕api sserver来进行设计的。请求api server资源要满足3个条件&#x…

Garbage First收集器(简称G1)

概述&#xff1a;Garbage First&#xff08;简称G1&#xff09;收集器是垃圾收集器技术发展历史上的里程碑式的成果&#xff0c;它开创了收集器面向局部收集的设计思路和基于Region的内存布局形式。 G1开创的基于Region的堆内存布局是它能够实现这个目标的关键。虽然G1也仍是遵…

开始学习Vue(路由)

一、什么是路由 SPA 指的是一个 web 网站只有唯一的一个 HTML 页面&#xff0c;所有组 件的展示与切换都在这唯一的一个页面内完成。 此时&#xff0c;不同组件之间的切换需要通过前端路由来实现。 结论&#xff1a;在 SPA 项目中&#xff0c;不同功能之间的切换&#xff0…

无人机航迹规划(六):七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、七种算法&#xff08;DBO、LO、SWO、COA、LSO、KOA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…

LP-AM243x EtherNet/IP 连接施耐德 M241 EIP主站测试

硬件环境&#xff1a;LP-AM243x 开发板 施耐德 Modicon M241 软件环境&#xff1a; INDUSTRIAL-COMMUNICATIONS-SDK-AM243X MCU-PLUS-SDK-AM243X — MCU SDK for AM243x 调试过程&#xff1a; 首先&#xff0c;让AM243x能够运行 Null Boot&#xff0c; Starting NULL Boo…

力扣hot100 除自身以外数组的乘积 前后缀积

Problem: 238. 除自身以外数组的乘积 文章目录 思路前后缀积 思路 前后缀积 ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) class Solution {public int[] productExceptSelf(int[] nums){int n nums.length;int[] p new int[n];//除…

Obsidian - 使用小记(Typora切换过来)

文章目录 关于 Obsidian打开已有的 文件夹将图片改为 Typora 的保存文件夹 关于 Obsidian 官网 https://obsidian.md/github : https://github.com/obsidianmd 个人版免费 一直习惯用 Typora 编写markdown git 记录笔记&#xff0c;多次被安利 Obsidian 后&#xff0c;今天尝…