centos 源码安装 redis

已在业务中运行

本篇记录源码编译安装新版本 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

添加为服务并开机启动(非 service 文件的另一种方式)

这是比较旧的方式,一般来说建议采用上面的创建 .service 的方式,这两种方式二选一。
/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 协议》,转载必须注明作者和本文链接
welcome come back
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
98
粉丝
25
喜欢
159
收藏
359
排名:316
访问:3.0 万
私信
所有博文
社区赞助商