Linux安装redis(单机和集群)

news2024/10/5 13:45:16

一、单机安装

1.源码安装(方式一)

1.1 下载并上传tar包

 将redis-6.2.6.tar.gz 上传到/home/data/install_pkg/redis下

1.2 解压缩

cd /home/data/install_pkg/redis    //切到指定目录

tar -xvf redis-6.2.6.tar.gz               //解压缩

1.3 编译安装

cd redis-6.2.6/

make && make PREFIX=/usr/local/redis6 install   #安装目录

1.4 配置redis.conf

mkdir /usr/local/redis6/conf

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

mkdir -p /home/data/redis6/data /home/data/redis6/logs  #数据目录和日志目录

vi /usr/local/redis6/conf/redis.conf

#配置参数,其他默认
bind 0.0.0.0
protected-mode no
port 6379
daemonize yes
logfile "/home/data/redis6/logs/redis.log"
dir /home/data/redis6/data/
maxmemory 2048MB
io-threads 4
requirepass redis@4.105

1.5 配置systemd 

vi /lib/systemd/system/redis6.service

[Unit]
Description=Redis
After=network.target

[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis6/bin/redis-server /usr/local/redis6/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

1.6 服务启停及开机启动 

systemctl daemon-reload && systemctl start redis6 && systemctl enable redis6 

1.7 登录验证

ln -s /usr/local/redis6/bin/redis-cli /usr/bin/redis-cli  //创建软链接

redis-cli -p 6379 -a redis@4.105 

2.Docker离线安装(方式二)

 ps:确保服务器上(/home/data/install_pkg/redis目录下已上传如下内容:

2.1 redis.conf配置文件

port 6379
pidfile  /home/data/redis/6379data/redis.pid
bind 0.0.0.0
requirepass redis@4.105
masterauth redis@4.105
cluster-enabled no
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
appendfsync everysec
daemonize no
protected-mode no
io-threads-do-reads yes
io-threads 1
cluster-require-full-coverage no
dir /data/data
save ""
stop-writes-on-bgsave-error yes
maxmemory 1000M
maxclients 10000
maxmemory-policy allkeys-lru
logfile /data/redis.log
cluster-node-timeout 15000
no-appendfsync-on-rewrite yes
tcp-backlog 65535
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
slave-lazy-flush yes
activedefrag yes
active-defrag-cycle-min 5
active-defrag-cycle-max 10
active-defrag-threshold-lower 50
active-defrag-threshold-upper 100
active-defrag-ignore-bytes 104857600
maxmemory-policy volatile-ttl
maxmemory 1000000000

2.2 安装脚本(install_redis.sh)

 #!/bin/bash

##########################
# redis6-docker 安装脚本 #
##########################
WORK_PATH=/home/data/install_pkg
PKG_PATH=$WORK_PATH/redis

#检查安装目录
if [ ! -d $PKG_PATH ];
then
    echo -e "${PKG_PATH} 缺失,结束进程"
    exit 1
fi

#docker 导入tar包
docker load < $PKG_PATH/redis6.tar

#新建redis目录 注册配置文件
mkdir -p /home/data/redis/6379/data
cd /home/data/redis/6379
cp -rf $PKG_PATH/redis.conf ./

#docker启动redis
docker run -d -v /home/data/redis/6379:/data --privileged=true --restart=always --net host --name redis-6379 redis:6.2.1 redis-server /data/redis.conf

echo redis-server installed.
docker ps | grep redis

执行redis安装脚本:sh install_redis.sh

2.3 启动脚本(op_redis.sh)

#!/bin/sh
# ./op_redis.sh start 启动 stop 停止 restart 重启 status 状态 monitor 监控(未启动->自动重启)
# JVM参数
AppName=redis
opUser=root
RE_LOG_HOME=/home/data/monitorlog/crontab
RE_LOG_FILE=$RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txt
STATE_HOME=/home/data/monitorlog/component-status
STATE_FILE=$STATE_HOME/$AppName

if [ `whoami` != "$opUser" ];then
    echo -e " only $opUser can run me"
    exit 1
fi

if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status|monitor} \033[0m"
    exit 1
fi

if [ "$AppName" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi

if [ ! -d "$RE_LOG_HOME/$(date +%F)/" ];
then
    mkdir $RE_LOG_HOME/$(date +%F)
fi

function start()
{
    PID=`ps -ef|grep redis-server |grep -v 'grep' | awk '{print $2}'`

    if [ x"$PID" != x"" ]; then
        echo "$AppName is running..."
    else
        docker start redis-6379
        echo "Start $AppName success..."
    fi
}

function stop()
{
    echo "Stop $AppName"

    PID=""
    query(){
        PID=`ps -ef|grep redis-server |grep -v 'grep' | awk '{print $2}'`
    }

    query
    if [ x"$PID" != x"" ]; then
        docker stop redis-6379
        echo "$AppName (pid:$PID) exiting..."
        while [ x"$PID" != x"" ]
        do
            sleep 1
            query
        done
        echo "$AppName exited."
    else
        echo "$AppName already stopped."
    fi
}

function restart()
{
    stop
    sleep 2
    start
}

function status()
{
    PID=`ps -ef|grep redis-server |grep -v 'grep' | awk '{print $2}' |wc -l`
    if [ $PID != 0 ];then
        echo "$AppName is running..."
    else
        echo "$AppName is not running..."
    fi
}

function monitor()
{
    PID=`ps -ef|grep redis-server |grep -v 'grep' | awk '{print $2}' |wc -l`
    if [ $PID != 0 ];then
        echo "$AppName is running..."
        echo $(date +%Y-%m-%d%n%H:%M:%S)_running > $STATE_FILE
    else
    start
        echo "$AppName is not running,and restarting..."
        # 重启保存到日志
        echo $(date +%Y-%m-%d%n%H:%M:%S)_notrunning > $STATE_FILE
        echo $(date +%Y-%m-%d%n%H:%M:%S) >> $RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txt
        echo "$AppName is not running,and restarting..." >> $RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txt
    fi
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    monitor)
    monitor;;
    *)
    echo "操作名"$1"错误";;
esac

 二、集群部署

1. 集群配置脚本

vi redis-config.sh

for port in $(seq 6379 6384); \
do \
rm -rf /home/data/redis/node-${port}

mkdir /home/data/redis/node-${port}
touch /home/data/redis/node-${port}/redis.conf
cat << EOF > /home/data/redis/node-${port}/redis.conf

port ${port}
requirepass redis@198.62
masterauth redis@198.62

appendonly yes
appendfsync everysec
daemonize no
protected-mode no

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 宿主机ip
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}
io-threads-do-reads yes
io-threads 1
cluster-require-full-coverage no
#dir /home/data/redis/
save ""
stop-writes-on-bgsave-error yes
maxmemory 1000M
maxclients 10000
maxmemory-policy allkeys-lru
#logfile /home/data/redis/redis.log
no-appendfsync-on-rewrite yes
tcp-backlog 65535
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
slave-lazy-flush yes
activedefrag yes
active-defrag-cycle-min 5
active-defrag-cycle-max 10
active-defrag-threshold-lower 50
active-defrag-threshold-upper 100
active-defrag-ignore-bytes 104857600
#maxmemory-policy volatile-ttl
#maxmemory 10000000000
#notify-keyspace-events Egx
EOF
done;

2. 集群启动脚本

vi  redis-start.sh

docker stop  redis-6379 redis-6380 redis-6381 redis-6382 redis-6383 redis-6384
docker rm  redis-6379 redis-6380 redis-6381 redis-6382 redis-6383 redis-6384

for port in $(seq 6379 6384);\
do \
  docker run -it -d -p ${port}:${port} -p 1${port}:1${port} \
  --privileged=true -v /home/data/redis/node-${port}/redis.conf:/redis/data/redis.conf \
  --privileged=true -v /home/data/redis/node-${port}/:/redis/data/ \
  --restart always \
  --name redis-${port} \
    redis:6.2.1 redis-server /redis/data/redis.conf
done

3.创建redis集群

可随意选择一个节点进入,创建Redis集群。

3.1进入容器

docker exec -it redis-6379 /bin/bash

3.2 创建集群

hostip=配置文件中的IP地址

redis-cli  -a redis密码 --cluster create $hostip:6379 $hostip:6380 $hostip:6381 $hostip:6382 $hostip:6383 $hostip:6384   --cluster-replicas 1

 

4.查看节点信息

 进入容器后,通过redis-cli --raw -c -a redis密码,进入redis

cluster info

cluster nodes 

 

5.其他

排查redis连接数是否超限: netstat -an |grep 6379 |grep ESTABLISHED |wc -l 

批量停止容器: 

 for port in $(seq 6379 6384);\

 do \

  docker stop redis-${port}

 done

批量删除容器: 

 for port in $(seq 6379 6384);\

 do \

  docker rm redis-${port}

done

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

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

相关文章

Esp8266 - USB开关分享(开源)

文章目录 简介推广自己gitee项目地址:嘉立创项目地址&#xff1a;联系我们 功能演示视频原理图嘉立创PCB开源地址原理图PCB预览 固件烧录代码编译烧录1. 软件和驱动安装2. 代码编译1. 安装所需要的依赖库文件2. 下载源代码3. 烧录代码 使用说明1. 设备配网2. 打开设备操作页面3…

vue3去掉el-table底部白色边框

加入下面这一行代码就行了&#xff0c;我用的是less :deep(.el-table__inner-wrapper:before) {background: none;}效果图

腾讯云向量数据库-RAG介绍2

1.chunk拆分对最终效果的影响 2.改进知识的拆分方案 3.AI套件 4.相似性检索的关键&#xff1a;embedding技术 嵌入技术是相似性检索的关键&#xff0c;它能够将数据转换为向量表示&#xff0c;并通过比较向量之间的相似性来实现相似性检索&#xff1b;embedding&#xff1a;将…

全面解析平台工程与 DevOps 的区别与联系

平台工程的概念非常流行&#xff0c;但很多开发人员仍然不清楚它是如何实际运作的&#xff0c;这是非常正常的。 平台工程是与 DevOps 并行吗&#xff1f;还是可以相互替代&#xff1f;或者 DevOps 和平台工程是两个完全不同的概念&#xff1f; 一种比较容易将两者区分开来的方…

网站在线生成链接

源码简介 输入前缀、开始数字、结束数字、后缀 即可快速生成 几万、十万、百万 条链接。 支持 一键复制、 一键导出本地 txt 文件。 安装教程 纯HTML&#xff0c;直接将压缩包上传网站目录解压即可 首页截图 源码下载 网站在线生成链接-小8源码屋源码简介 输入前缀、开始…

算法练习(2)——约瑟夫环和坐标公式的推导

看一下上面的牛客题。题目的意思是n个小朋友围成一个圆环&#xff0c;编号从0开始&#xff0c;数m个数时&#xff0c;让小朋友出列&#xff0c;然后出列小朋友的下一个位置为0&#xff0c;继续数m个数&#xff0c;然后小朋友出来&#xff0c;直到最后一个小朋友&#xff0c;然后…

【Java Spring MVC项目异常解决】HTTP 500

HTTP 500状态码表示“内部服务器错误”&#xff08;Internal Server Error&#xff09;。这是一个通用的错误响应&#xff0c;表明服务器在处理请求时遇到了预料之外的情况&#xff0c;导致无法完成请求。500错误是服务器端错误的一种&#xff0c;与客户端无关。在Web开发中&am…

Docker常用命令(镜像、容器、网络)

一、镜像 1.1 存出镜像 将镜像保存成为本地文件 格式&#xff1a;docker save -o 存储文件名 存储的镜像docker save -o nginx nginx:latest 1.2 载入镜像 将镜像文件导入到镜像库中 格式&#xff1a;docker load < 存出的文件或docker load -i 存出的文件…

网络基础3

目录 网络层基本概念IP协议头格式网段划分特殊的IP地址IP地址的数量限制运营商的理解全球网络的理解私有IP地址和公网IP地址路由IP层分片与组装数据链路层以太网帧格式以太网通信原理ARP协议ARP数据报的格式DNS域名简介ICMP协议NAT技术NAPT技术代理服务器 网络层基本概念 一个…

PostgreSQL 免费的对象-关系数据库

目录 一、什么是数据库 二、ORDBMS 的一些术语 三、PostgreSQL 概述 四、PostgreSQL数据库优点和缺点 4.1PostgreSQL数据库的优点 4.2PostgreSQL数据库的缺点 4.3PostgreSQL 特征 五、Linux 上安装 PostgreSQL 5.1Yum 安装 PostgreSQL 5.1.1安装postgreSQL的官方yum仓…

【学习】软件测试自动化,是未来的趋势还是当前的必需

在当今快速迭代的软件开发周期中&#xff0c;速度和质量成为了企业生存的关键。随着DevOps实践的普及和持续集成/持续部署&#xff08;CI/CD&#xff09;流程的标准化&#xff0c;软件测试自动化已经从未来的趋势转变为当前的必要性。本文将探讨自动化测试的现状、必要性以及其…

[Qt的学习日常]--初识Qt

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、Qt的基本…

漫谈AI 时代的信息模型

模型化- 数字化转型的重要基石 在各行各业推行数字化转型过程中&#xff0c;构建信息化模型十分重要&#xff0c;它是数字化转型的基石。事实上&#xff0c;数字化转型的核心是“万物皆模型”&#xff0c;在工业领域&#xff0c;以德国为主导的工业4.0 发展进程中&#xff0c;…

53 语言模型【动手学深度学习v2】

https://www.bilibili.com/read/cv17622666/?jump_opus1https://www.bilibili.com/read/cv17622666/?jump_opus1

【C语言回顾】操作符详解

前言1. 操作符分类2. 二进制和进制转换2.1 二进制2.2 进制转换2.2.1 二进制转十进制2.2.2 二进制转八进制2.2.3 二进制转十六进制 3. 原码、反码、补码4. 移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符6. 单目操作符7. 逗号表达式8. 下标引用操作符9. 函数调用操作符10.…

《ESP8266通信指南》4-以Client进行TCP通信(AT指令)

往期 《ESP8266通信指南》3-常用AT指令详解-8266连WIFI-CSDN博客 《ESP8266通信指南》2-ESP8266 AT测试-CSDN博客 《ESP8266通信指南》1-ESP8266 简介-CSDN博客 1. 小节目标 通过 AT 指令使用 8266 进行 TCP 通信 2. 书接上回 复习以下&#xff0c;上一小节我们讲到了 8…

ESP32开发

目录 1、简介 1.1 种类 1.2 特点 1.3 管脚功能 1.4 接线方式 1.5 工作模式 2、基础AT指令介绍 2.1 AT指令类型 2.2 基础指令及其描述 2.3 使用AT指令需要注意的事 3、AT指令分类和提示信息 3.1 选择是否保存到Flash的区别 3.2 提示信息 3.3 其他会保存到Flash的A…

数据结构(Wrong Question)

一、绪论 1.1 数据结构的基本概念 D 因为抽象数据类型&#xff08;ADT&#xff09;描述了数据的逻辑结构和抽象运算&#xff0c;通常用&#xff08;数据对象&#xff0c;数据对象&#xff0c;基本操作集&#xff09;这样的三元组来表示&#xff0c;从而可构成一个完整的数据结…

【笔记django】创建一个app

创建app 错误 raise ImproperlyConfigured( django.core.exceptions.ImproperlyConfigured: Cannot import rules. Check that dvadmin.rules.apps.RulesConfig.name is correct.原因 刚创建的rules的app被手动移动到了dvadmin目录下 而dvadmin/rules/apps.py的内容还是&…

文字转粤语语音怎么转?文字转语音

文字转粤语语音怎么转&#xff1f;文字转粤语语音的应用&#xff0c;不仅展现了现代科技的魅力&#xff0c;也为我们提供了更加便捷的交流方式。它们将文字转化为粤语发音&#xff0c;让我们能够更直观地感受粤语的韵味和魅力。同时&#xff0c;这些软件还具备高度的可定制性&a…