Redis多实例部署

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,倚天版 1GB 1个月
简介: 测试环境中经常使用多实例,需要指定不同实例的相应的端口,配置文件,日志文件等相关配置

一、 编译安装Redis

VERSION=redis-6.2.4 #安装的版本
PASSWORD=000000 #密码
INSTALL_DIR=/apps/redis #安装目录

color () {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$1" && $MOVE_TO_COL
    echo -n "["
    if [ $2 = "success" -o $2 = "0" ] ;then
        ${SETCOLOR_SUCCESS}
        echo -n $"  OK  "    
    elif [ $2 = "failure" -o $2 = "1"  ] ;then 
        ${SETCOLOR_FAILURE}
        echo -n $"FAILED"
    else
        ${SETCOLOR_WARNING}
        echo -n $"WARNING"
    fi
    ${SETCOLOR_NORMAL}
    echo -n "]"
    echo 
}

install() {
yum  -y install gcc jemalloc-devel || { color "安装软件包失败,请检查网络配置" 1 ; exit; }

wget http://download.redis.io/releases/${VERSION}.tar.gz || { color "Redis 源码下载失败" 1 ; exit; }

tar xf ${VERSION}.tar.gz
cd ${VERSION}
make -j 4 PREFIX=${INSTALL_DIR} install && color "Redis 编译安装完成" 0 || { color "Redis 编译安装失败" 1 ;exit ; }

ln -s ${INSTALL_DIR}/bin/redis-*  /usr/bin/
mkdir -p ${INSTALL_DIR}/{etc,log,data,run}
cp redis.conf  ${INSTALL_DIR}/etc/

sed -i -e 's/bind 127.0.0.1/bind 0.0.0.0/'  -e "/# requirepass/a requirepass $PASSWORD"  -e "/^dir .*/c dir ${INSTALL_DIR}/data/"  -e "/logfile .*/c logfile ${INSTALL_DIR}/log/redis-6379.log"  -e  "/^pidfile .*/c  pidfile ${INSTALL_DIR}/run/redis_6379.pid" ${INSTALL_DIR}/etc/redis.conf

if id redis &> /dev/null ;then 
    color "Redis 用户已存在" 1 
else
    useradd -r -s /sbin/nologin redis
    color "Redis 用户创建成功" 0
fi

chown -R redis.redis ${INSTALL_DIR}

cat >> /etc/sysctl.conf <<EOF
net.core.somaxconn = 1024
vm.overcommit_memory = 1
EOF
sysctl -p 

echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
/etc/rc.d/rc.local

cat > /usr/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target

[Service]
ExecStart=${INSTALL_DIR}/bin/redis-server ${INSTALL_DIR}/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s QUIT \$MAINPID
#Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

EOF
systemctl daemon-reload 
systemctl enable --now  redis &> /dev/null && color "Redis 服务启动成功,Redis信息如下:"  0 || { color "Redis 启动失败" 1 ;exit; } 
sleep 2
redis-cli -a $PASSWORD INFO Server 2> /dev/null
}

install 

查看Redis端口是否开启
image.png

关于Redis启动时告警的问题,脚本末尾已做修改(告警不做修改也不会影响使用)

编译安装后存在的一些工具

[root@localhost redis]# ls /usr/bin|grep redis
redis-benchmark #Redis性能测试工具
redis-check-aof #AOF文件检查工具
redis-check-rdb #RDB文件检查工具
redis-cli#客户端工具
redis-sentinel#哨兵,软连接到server
redis-server#Redis服务启动命令

二、Redis多实例

进入编译安装的目录

[root@localhost etc]# pwd
/apps/redis/etc

之后配置注意所在的目录位置

复制配置文件

[root@localhost etc]# cp redis.conf redis_6379.conf
[root@localhost etc]# cp redis.conf redis_6380.conf
[root@localhost etc]# cp redis.conf redis_6381.conf

修改配置文件中对应的端口号

[root@localhost etc]# sed -i 's/port 6379/port 6380/' redis_6380.conf
[root@localhost etc]# sed -i 's/port 6379/port 6381/' redis_6381.conf
[root@localhost etc]# grep "^port" redis_6380.conf
port 6380
[root@localhost etc]# grep "^port" redis_6381.conf
port 6381
[root@localhost etc]# grep "^port" redis_6379.conf
port 6379

修改对应的数据文件指向

[root@localhost etc]# sed -i 's/dbfilename dump.rdb/dbfilename dump_6379.rdb/' redis_6379.conf
[root@localhost etc]# sed -i 's/dbfilename dump.rdb/dbfilename dump_6380.rdb/' redis_6380.conf
[root@localhost etc]# sed -i 's/dbfilename dump.rdb/dbfilename dump_6381.rdb/' redis_6381.conf
[root@localhost etc]# grep "^dbfilename" redis_6379.conf
dbfilename dump_6379.rdb
[root@localhost etc]# grep "^dbfilename" redis_6380.conf
dbfilename dump_6380.rdb
[root@localhost etc]# grep "^dbfilename" redis_6381.conf
dbfilename dump_6381.rdb

修改对应的日志文件指向

[root@localhost redis]# grep log/redis-6379.log etc/redis_6379.conf
logfile /apps/redis/log/redis-6379.log
[root@localhost redis]# sed -i 's/redis-6379.log/redis-6380.log/' etc/redis_6380.conf
[root@localhost redis]# sed -i 's/redis-6379.log/redis-6381.log/' etc/redis_6381.conf

修改对应的PID文件指向

[root@localhost redis]# grep run/redis_6379.pid etc/redis_6379.conf
pidfile /apps/redis/run/redis_6379.pid
[root@localhost redis]#
[root@localhost redis]# sed -i 's/redis_6379.pid/redis_6380.pid/' etc/redis_6380.conf
[root@localhost redis]# sed -i 's/redis_6379.pid/redis_6381.pid/' etc/redis_6381.conf

修改对应的service文件

[root@localhost redis]# cp -a /lib/systemd/system/redis.service /lib/systemd/system/redis6379.service
[root@localhost redis]# cp -a /lib/systemd/system/redis.service /lib/systemd/system/redis6380.service
[root@localhost redis]# cp -a /lib/systemd/system/redis.service /lib/systemd/system/redis6381.service

修改对应的service文件中,redis_6381.conf 文件指向

[root@localhost redis]# vim /lib/systemd/system/redis6379.service
[root@localhost redis]# vim /lib/systemd/system/redis6380.service
[root@localhost redis]# vim /lib/systemd/system/redis6381.service
[root@localhost redis]# cat /lib/systemd/system/redis6381.service
[Unit]
Description=Redis persistent key-value database
After=network.target

[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis_6381.conf --supervised systemd #
ExecStop=/bin/kill -s QUIT $MAINPID
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

三、测试结果

先停止原有编译安装的Redis服务

Redis原有服务端口为6379

[root@localhost redis]# systemctl stop redis
[root@localhost redis]# systemctl daemon-reload
[root@localhost redis]# systemctl start redis6379 redis6380 redis6381

这里需要注意配置文件中允许访问的IP地址,这里没做修改是因为安装时的脚本已经修改

image.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
NoSQL 关系型数据库 Redis
Docker的通俗理解和通过宿主机端口访问Redis容器的实例
本文目标:引导初学者入门Docker,理解镜像、容器和宿主机概念,学习常用Docker命令,特别是如何创建并从Redis容器通过宿主机端口访问。 关键点: - Docker核心:镜像(类)、容器(实例)、宿主机(运行环境)。 - `docker pull` 拉取镜像,如 `redis:3.0`。 - `docker run -d --name` 后台运行容器,如 `my-redis`。 - `-p` 参数做端口映射,如 `6379:6379`。 - `docker exec -it` 交互式进入容器,如 `bash` 或执行命令。
206 4
|
3月前
|
NoSQL Java Redis
使用Redis实例搭建网上商城的商品相关性分析程序
本教程将指导您如何快速创建实例并搭建网上商城的商品相关性分析程序。(ApsaraDB for Redis)是兼容开源Redis协议标准的数据库服务,基于双机热备架构及集群架构,可满足高吞吐、低延迟及弹性变配等业务需求。
17568 0
|
2月前
|
存储 运维 NoSQL
Redis Cluster集群模式部署
Redis Cluster集群模式部署
83 4
|
2月前
|
缓存 运维 NoSQL
Redis主从模式部署
Redis主从模式部署
46 4
|
2月前
|
运维 监控 NoSQL
Redis Sentinel哨兵模式部署
Redis Sentinel哨兵模式部署
69 2
|
3月前
|
存储 监控 负载均衡
保证Redis的高可用性是一个涉及多个层面的任务,主要包括数据持久化、复制与故障转移、集群化部署等方面
【5月更文挑战第15天】保证Redis高可用性涉及数据持久化、复制与故障转移、集群化及优化策略。RDB和AOF是数据持久化方法,哨兵模式确保故障自动恢复。Redis Cluster实现分布式部署,提高负载均衡和容错性。其他措施包括身份认证、多线程、数据压缩和监控报警,以增强安全性和稳定性。通过综合配置与监控,可确保Redis服务的高效、可靠运行。
214 2
|
20天前
|
运维 NoSQL Serverless
Serverless 应用引擎使用问题之首次启动无法获取redis连接,重启实例后可以获取,是什么原因
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
Serverless 应用引擎使用问题之首次启动无法获取redis连接,重启实例后可以获取,是什么原因
|
26天前
|
NoSQL Redis 开发工具
Redis性能优化问题之检查 Redis 实例是否启用了透明大页机制,如何解决
Redis性能优化问题之检查 Redis 实例是否启用了透明大页机制,如何解决
|
3天前
|
存储 缓存 NoSQL
Redis深度解析:部署模式、数据类型、存储模型与实战问题解决
Redis深度解析:部署模式、数据类型、存储模型与实战问题解决
|
26天前
|
NoSQL Redis 容器
Redis性能优化问题之如何判断 Redis 实例是否写入了 bigkey
Redis性能优化问题之如何判断 Redis 实例是否写入了 bigkey