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 协议》,转载必须注明作者和本文链接
welcome come back
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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