centos 源码安装 redis | server 运维论坛-江南app体育官方入口
已在业务中运行
本篇记录源码编译安装新版本 redis,配置,以及开机启动。
下载源码包
在 /opt
目录下载并解压
cd /opt && wget https://github.com/redis/redis/archive/refs/tags/7.4.1.tar.gz
你可以运行源码文件夹 /utils/install_server.sh 完成安装、运行、加入服务(systemctl)、开机启动,它加入服务的方式是本篇末尾(chkconfig),现在通常是服务文件的方式(service文件),对于这两种方式在本篇有介绍,不过 /utils 中也提供了 systemd-redis_server.service
文件。
install_server.sh 未实践于业务
无论脚本自动安装还是接下来的手动安装,/utils/ 中这几个与安装有关的文件值得借鉴和学习。
install_server.sh、
redis_init_script、
redis_init_script.tpl、
systemd-redis_server.service
编译安装
/usr/local/redis741
是安装的位置,安装后只生成一个 bin 目录 (redis-cli 等可执行程序)
cd /opt/redis-7.4.1
make
make install prefix=/usr/local/redis741
[root@vm-6-8-centos redis741]# ll /usr/local/redis741
drwxr-xr-x 2 root root 4096 dec 23 11:44 bin
配置
我们发现安装目录没有配置文件,需要手动从源码包复制一份过来
cd /usr/local/redis741
mkdir etc
mkdir var
cp /opt/redis7.4.1/redis.conf /usr/local/redis741/etc/redis.conf
chown -r redis:redis etc
chown -r redis:redis var
以上在 /usr/local/redis741 创建了 etc 和 var 目录,etc 存放 conf 文件,var 存放数据。从源码包复制一份 redis.conf 到 etc,因为 redis 服务是以 redis 用户启动,所以要对 etc 和 var 目录设置权限。
[root@vm-6-8-centos redis741]# ll
drwxr-xr-x 2 root root 4096 dec 23 11:44 bin
drwxr-xr-x 2 redis redis 4096 dec 24 13:41 etc
drwxr-xr-x 2 redis redis 4096 dec 24 14:59 var
配置redis.conf
# bind 127.0.0.1 -::1
bind 127.0.0.1
port 6379
bind 代表对哪些 ip 地址开放,只允许本机的话就是 127.0.0.1
,完全开放是 0.0.0.0
,-::1
代表 ipv6,如果系统未启用 ipv6 的话可能会启动报错,去掉即可。
protected-mode yes
requirepass youpassword
尽管只允许本机访问,还是建议开启密码。如果不需要,改为 no。
logfile /usr/local/redis741/var/redis.log
dir /usr/local/redis741/var
dir 是数据文件存储位置(刚刚创建的 var 目录)。
daemonize yes
loglevel notice
maxclients 10000
daemonize 一般是 yes,代表守护进程。maxclients 是限制每个 redis 实例的最大客户端连接数,减少暴力破解,视实际情况配置。
pidfile /var/run/redis/redis.pid
pidfile 是 pid 文件的位置,通常运行 pid 放在 /var/run/
下,但直接 /var/run/redis.pid
是不建议的,/var/run/
对于 redis 用户没有权限创建和读写。当然先确保 /var/run/
下存在 redis 目录,可以手动创建,别忘了给予 redis 用户权限:
cd /var/run/
mkdir redis
chown -r redis:redis redis
但也可以不手动创建,接下来的开机启动会自动完成。
添加为服务并开机启动
我们用熟知的也是推荐的编写服务文件的方式,其实在老的 centos 中还有一种方式,放在文章最后了。
用户自定义服务文件的位置一般在 /etc/systemd/system
cd /etc/systemd/system
touch redis-server.service
编辑 redis-server.service
[unit]
description=redis in-memory data store
after=network.target
[service]
type=forking
pidfile=/var/run/redis/redis_6379.pid
user=redis
group=redis
environment=statedir=/var/run/redis
permissionsstartonly=true
execstartpre=/bin/mkdir -p ${statedir}
execstartpre=/bin/chown -r redis:redis ${statedir}
execstart=/usr/local/redis741/bin/redis-server /usr/local/redis741/etc/redis.conf
execstop=/bin/kill -s term $mainpid
restart=always
limitnofile=10000
limitnproc=1000
limitcore=10000
[install]
wantedby=multi-user.target
以上配置已运行几年
直接甩给 ai 解释下就行,但是个人觉的启动时为 pid 文件创建目录是图省事了,不是必要的,手动创建一样,这里就可以不写。
启动:
systemctl start redis-server
加入开机启动:
systemctl enable redis-server
为命令行 redis-cli 等配置软链(看需要选择)
ln -s /usr/local/redis741/bin/redis-cli /usr/local/bin/redis-cli
ln -s /usr/local/redis741/bin/redis-server /usr/local/bin/redis-server
ln -s /usr/local/redis741/bin/redis-sentinel /usr/local/bin/redis-sentinel
ln -s /usr/local/redis741/bin/redis-check-aof /usr/local/bin/redis-check-aof
ln -s /usr/local/redis741/bin/redis-check-rdb /usr/local/bin/redis-check-rdb
ln -s /usr/local/redis741/bin/redis-benchmark /usr/local/bin/redis-benchmark
添加为服务并开机启动(其他方式)
/etc/init.d
是 linux 系统中存放系统服务的启动和停止脚本,在其中创建 redis-server
文件,内容如下:
#! /bin/sh
### begin init info
# provides: redis-server
# required-start: $syslog
# required-stop: $syslog
# should-start: $local_fs
# should-stop: $local_fs
# default-start: 2 3 4 5
# default-stop: 0 1 6
# short-description: redis-server - persistent key-value db
# description: redis-server - persistent key-value db
### end init info
path=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
daemon=/usr/local/redis/bin/redis-server
daemon_args=/usr/local/redis/etc/redis.conf
name=redis-server
desc=redis-server
pidfile=/var/run/redis.pid
test -x $daemon || exit 0
test -x $daemonbootstrap || exit 0
set -e
case "$1" in
start)
echo -n "starting $desc: "
touch $pidfile
chown redis:redis $pidfile
if start-stop-daemon --start --quiet --pidfile $pidfile --chuid redis:redis --exec $daemon -- $daemon_args
then
echo "[ok]"
else
echo "failed"
fi
;;
stop)
echo -n "stopping $desc: "
if start-stop-daemon --stop --retry 10 --quiet --oknodo --pidfile $pidfile --exec $daemon
then
echo "[ok]"
else
echo "failed"
fi
rm -f $pidfile
;;
status)
if [ ! -r $pidfile ] ; then
echo "redis-server is stopped"
exit 0
fi
pid=`cat $pidfile`
if ps -p $pid | grep -q $pid; then
echo "redis-server (pid $pid) is running..."
else
echo "redis-server dead but pid file exists"
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "usage: /etc/init.d/$name {start|stop|restart|status|force-reload}" >&2
exit 1
;;
esac
exit 0
以上配置已运行几年
然后给予脚本执行权限
chmod x /etc/init.d/redis-server
可以用/etc/init.d/redis-server {start|stop|restart|status|force-reload}
命令控制服务的状态。
添加到服务中并开机启动,
chkconfig --add redis
chkconfig redis on
通过 chkconfig --list
可以查看
redis-server 0:off 1:off 2:on 3:on 4:on 5:on 6:off
--add
是向 list 加一条记录,on
是对应的 0 1 2 3 4 5 6 运行级别开启(不指定默认 2345),运行级别在 /etc/rc.d
目录,这块就不解释了,直接问 ai 即可。
此时 redis 就可以开机启动了,也可以使用 systemctl status redis-server
管理服务。
本作品采用《cc 协议》,转载必须注明作者和本文链接