Redis多实例部署

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 测试环境中经常使用多实例,需要指定不同实例的相应的端口,配置文件,日志文件等相关配置

一、 编译安装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
目录
相关文章
|
3月前
|
Kubernetes NoSQL Redis
k8s快速部署Redis单机
k8s快速部署Redis单机
|
7天前
|
监控 NoSQL 网络协议
【Azure Redis】部署在AKS中的应用,连接Redis高频率出现timeout问题
查看Redis状态,没有任何异常,服务没有更新,Service Load, CPU, Memory, Connect等指标均正常。在排除Redis端问题后,转向了AKS中。 开始调查AKS的网络状态。最终发现每次Redis客户端出现超时问题时,几乎都对应了AKS NAT Gateway的更新事件,而Redis服务端没有任何异常。因此,超时问题很可能是由于NAT Gateway更新事件导致TCP连接被重置。
|
5月前
|
存储 运维 NoSQL
Redis Cluster集群模式部署
Redis Cluster集群模式部署
123 4
|
5月前
|
缓存 运维 NoSQL
Redis主从模式部署
Redis主从模式部署
65 4
|
5月前
|
运维 监控 NoSQL
Redis Sentinel哨兵模式部署
Redis Sentinel哨兵模式部署
113 2
|
1月前
|
NoSQL Linux Shell
Redis 的安装与部署(图文)
Redis 的安装与部署(图文)
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
3月前
|
Kubernetes NoSQL Redis
【Azure Redis】部署在AKS中的应用连接Redis时候出现Unable to connect to Redis server
【Azure Redis】部署在AKS中的应用连接Redis时候出现Unable to connect to Redis server
【Azure Redis】部署在AKS中的应用连接Redis时候出现Unable to connect to Redis server
|
4月前
|
NoSQL Redis 开发工具
Redis性能优化问题之检查 Redis 实例是否启用了透明大页机制,如何解决
Redis性能优化问题之检查 Redis 实例是否启用了透明大页机制,如何解决
|
3月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】遇见Azure Redis不能创建成功的问题:至少一个资源部署操作失败,因为 Microsoft.Cache 资源提供程序未注册。
【Azure Redis 缓存】遇见Azure Redis不能创建成功的问题:至少一个资源部署操作失败,因为 Microsoft.Cache 资源提供程序未注册。
下一篇
无影云桌面