编译安装Redis及使用systemd管理
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,环境OSredis 版本防火墙和selinuxCentOS74.0.14关闭安装步骤安装前装备1.因为redis是用C编写的,所以需要安装gcc#yum -y install gcc2.下载redis
千家信息网最后更新 2025年02月05日编译安装Redis及使用systemd管理
环境
OS | redis 版本 | 防火墙和selinux |
---|---|---|
CentOS7 | 4.0.14 | 关闭 |
安装步骤
安装前装备
1.因为redis是用C编写的,所以需要安装gcc#yum -y install gcc2.下载redis源码包#wget -P /usr/local/src/ http://download.redis.io/releases/redis-4.0.14.tar.gz
编译安装
#cd /usr/local/src/#tar xf redis-4.0.14.tar.gz#cd redis-4.0.14#make PREFIX=/apps/redis install #PREFIX表示指定redis的安装目录#mkdir /apps/redis/{etc,logs,data,run} #创建配置文件、日志、数据等目录#cp redis.conf /apps/redis/etc/
编辑redis服务启动脚本,使用systemd管理该服务
注:该脚本是从yum安装的redis生成的service文件拿过来稍作修改后用的
#cat > /usr/lib/systemd/system/redis.service <
注:该脚本中关闭redis服务是通过另一个脚本/usr/libexec/redis-shutdown来实现的,yum安装的redis有该脚本,如果是编译安装的redis没有该脚本,内容如下:
#cat /usr/libexec/redis-shutdown #!/bin/bash## Wrapper to close properly redis and sentineltest x"$REDIS_DEBUG" != x && set -xREDIS_CLI=/usr/bin/redis-cli# Retrieve service nameSERVICE_NAME="$1"if [ -z "$SERVICE_NAME" ]; then SERVICE_NAME=redisfi# Get the proper config file based on service nameCONFIG_FILE="/apps/redis/etc/$SERVICE_NAME.conf"# Use awk to retrieve host, port from config fileHOST=`awk '/^[[:blank:]]*bind/ { print $2 }' $CONFIG_FILE | tail -n1`PORT=`awk '/^[[:blank:]]*port/ { print $2 }' $CONFIG_FILE | tail -n1`PASS=`awk '/^[[:blank:]]*requirepass/ { print $2 }' $CONFIG_FILE | tail -n1`SOCK=`awk '/^[[:blank:]]*unixsocket\s/ { print $2 }' $CONFIG_FILE | tail -n1`# Just in case, use default host, portHOST=${HOST:-127.0.0.1}if [ "$SERVICE_NAME" = redis ]; then PORT=${PORT:-6379}else PORT=${PORT:-26739}fi# Setup additional parameters# e.g password-protected redis instances[ -z "$PASS" ] || ADDITIONAL_PARAMS="-a $PASS"# shutdown the service properlyif [ -e "$SOCK" ] ; then $REDIS_CLI -s $SOCK $ADDITIONAL_PARAMS shutdownelse $REDIS_CLI -h $HOST -p $PORT $ADDITIONAL_PARAMS shutdownfi#chmod +x /usr/libexec/redis-shutdown
创建redis用户和设置相关权限
#groupadd -g 888 redis && useradd -r -u 888 -g 888 redis -s /sbin/nologin#chown redis.redis -R /apps/redis/
创建软连接
#ln -s /apps/redis/bin/* /usr/bin/#ll /usr/bin/redis-*lrwxrwxrwx 1 root root 31 Feb 9 21:34 /usr/bin/redis-benchmark -> /apps/redis/bin/redis-benchmark #redis性能测试工具lrwxrwxrwx 1 root root 31 Feb 9 21:34 /usr/bin/redis-check-aof -> /apps/redis/bin/redis-check-aof #AOF文件检查工具lrwxrwxrwx 1 root root 31 Feb 9 21:34 /usr/bin/redis-check-rdb -> /apps/redis/bin/redis-check-rdb #RDB文件检查工具lrwxrwxrwx 1 root root 25 Feb 9 21:34 /usr/bin/redis-cli -> /apps/redis/bin/redis-cli #redis客户端工具lrwxrwxrwx 1 root root 30 Feb 9 21:34 /usr/bin/redis-sentinel -> /apps/redis/bin/redis-sentinel #哨兵,软连接到serverlrwxrwxrwx 1 root root 28 Feb 9 21:34 /usr/bin/redis-server -> /apps/redis/bin/redis-server #redis服务启动命令
更改rdb文件存放的目录路径和设置相关权限
#sed -i '/^dir/s#./#/apps/redis/data#' /apps/redis/etc/redis.conf
验证redis启动
解决redis的错误和警告
Failed opening the RDB file dump.rdb (in server root dir /) for saving: Permission denied
参考资料:https://stackoverflow.com/questions/22160753/redis-failed-opening-rdb-for-saving-permission-denied
执行systemctl stop redis命令的时候,在/var/log/messages日志中发现上面的错误,出现该错误的原因是因为关闭redis之前需要将数据保存到rdb文件中,但是因为权限原因导致报错,解决方法如下:在redis的配置文件中指定保存rdb文件的目录,并确保相关的权限正确#ll /apps/redis/data/ -ddrwxr-xr-x 2 redis redis 22 Feb 11 20:33 /apps/redis/data/#vim /apps/redis/etc/redis.confdir /apps/redis/data
Socket Maximum Connection
参考资料:https://stackoverflow.com/questions/36880321/why-redis-can-not-set-maximum-open-file
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.backlog参数控制的是三次握手的时候server端收到client ack确认号之后的队列值。
Memory Overcommit
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2:表示内核允许分配超过所有物理内存和交换空间总和的内存
由于这两个是相关的,所以一块解决
#vim /etc/sysctl.confvm.overcommit_memory = 1net.core.somaxconn = 1024
要使这些配置生效,需要重新加载配置
#sysctl -p
Transparent Huge Pages
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.大页内存动态分配,需要关闭让redis负责内存管理。
临时生效
echo never > /sys/kernel/mm/transparent_hugepage/enabled
要永久解决此问题,请遵循日志的建议并修改rc.local
#vim /etc/rc.localif test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabledfi#chmod +x /etc/rc.d/rc.local
内存
文件
脚本
工具
权限
目录
错误
服务
配置
内核
日志
分配
检查
管理
编译
原因
参考资料
命令
数据
时候
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器4616安全状态更改
人工智能网络安全工程师
数据库服务器英文名称
闵行区网络技术咨询
后台密码在数据库那个文件
国际贸易公司服务器租赁
国家对网络安全措施
水务网络安全和信息化
生物药图谱数据库
海门选择网络技术创新服务
南京农业大学网络安全专题网
网络安全的环境有哪些
睿达互联网科技公司丁睿
仓库软件开发独立服务器
服务器安全性只有37
服务器密码改了别人还能进去吗
银行软件开发中心待遇如何
擎天退税 数据库无效
春节绘画软件开发
网络技术类兼职
服务器硬件运维巡检报告pdf
小学网络安全防范班会教案
大商圈互联网科技
手机app软件开发教
新乡磐石网络技术
网络安全软件正版化培训
acctcl数据库可以
同时在线3000人服务器
多线程阻塞占满数据库连接
上海电话软件开发产品介绍