本操作基於 CentOS7.6操作系統
redis版本為 6.0.5
關閉防火牆以及selinux
關閉防火牆
iptables -F #臨時關閉防火牆
systemctl stop firewalld # 關閉防火牆
systemctl disable firewalld # 開機防火牆不啟動
關閉selinux
臨時關閉
setenforce 0
永久關閉
vim /etc/selinux/conf
把SELINUX=enforcing
改為SELINUX=disabled
安裝編譯工具包
CentOS有一套很好的編譯工具包,只需要安裝即可編譯redis
安裝命令:
yum groupinstall "Development Tools"
下載redis並編譯安裝
我使用的版本是6.0.5 ,下面是下載地址:
https://redis.io/download
下載完畢,上傳到服務器上
解壓:
tar -xvf redis-6.0.5.tar.gz
解壓完畢,進入解壓后的文件夾,進行編譯安裝
我習慣性安裝在/app 下,如果該目錄不存在,可以新建
cd ./redis-6.0.5
make PREFIX=/app/redis install
沒有完成編譯,報錯了,centos7 默認的 gcc 版本為:4.8.5 < 5.3 無法編譯
所以安裝如下內容:
yum install gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash # 臨時有效,退出 shell 或重啟會恢復原 gcc 版本
然后在執行編譯:
make PREFIX=/app/redis install
編譯安裝完成后,在/app/redis 中只有一個bin目錄,里面有幾個可執行文件:
.
├── bin
│ ├── redis-benchmark
│ ├── redis-check-aof
│ ├── redis-check-rdb
│ ├── redis-cli
│ ├── redis-sentinel -> redis-server
│ └── redis-server
然后在/app/redis/下創建我需要的目錄,如下:
.
├── bin
│ ├── redis-benchmark
│ ├── redis-check-aof
│ ├── redis-check-rdb
│ ├── redis-cli
│ ├── redis-sentinel -> redis-server
│ └── redis-server
├── conf
├── data
├── logs
然后將解壓的redis目錄中的兩個配置文件拷貝到安裝目錄的conf下面
.
├── bin
│ ├── redis-benchmark
│ ├── redis-check-aof
│ ├── redis-check-rdb
│ ├── redis-cli
│ ├── redis-sentinel -> redis-server
│ └── redis-server
├── conf
│ ├── redis.conf
│ └── sentinel.conf
├── data
├── logs
然后備份一下原配置文件,然后對配置文件進行修改,修改完畢的配置文件如下:
cp ~/redis-6.0.5/{redis.conf,sentinel.conf} /app/redis/conf
bind 20.58.32.11
protected-mode no
port 16379
tcp-backlog 511
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/app/redis/logs/redis-server.log"
always-show-logo yes
dir /app/redis/data
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
配置守護進程並啟動
我喜歡使用supervisor作為守護進程在管理應用,所以在此,使用該軟件來管理redis的開機啟動等
安裝supervisor
yum install -y supervisor
vim /etc/supervisord.conf
cd /etc/supervisord.d/
修改主配置/etc/supervisord.conf
[unix_http_server]
file=/var/run/supervisor/supervisor.sock ; (the path to the socket file)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = supervisord.d/*.ini
添加redis的配置
cd /etc/supervisord.d/
vim redis.ini
內容如下:
[program:redis]
command=/app/redis/bin/redis-server /app/redis/conf/redis.conf ; 程序啟動命令
autostart=true ; 在supervisord啟動的時候也自動啟動
startsecs=10 ; 啟動10秒后沒有異常退出,就表示進程正常啟動了,默認為1秒
autorestart=true ; 程序退出后自動重啟,可選值:[unexpected,true,false],默認為unexpected,表示進程意外殺死后才重啟
startretries=3 ; 啟動失敗自動重試次數,默認是3
user=root ; 用哪個用戶啟動進程,默認是root
priority=999 ; 進程啟動優先級,默認999,值小的優先啟動
redirect_stderr=true ; 把stderr重定向到stdout,默認false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默認50MB
stdout_logfile_backups = 20 ; stdout 日志文件備份數,默認是10
; stdout 日志文件,需要注意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日志文件)
stdout_logfile=/app/redis/logs/redis_supervisor.log
stopasgroup=false ;默認為false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程
killasgroup=false ;默認為false,向進程組發送kill信號,包括子進程
然后在~/.bashrc中添加alias,這樣,我們在執行supervisorctl命令時,就不用在后面跟上配置文件
vim ~/.bashrc
添加如下配置
export REDIS_HOME='/app/redis' # redis命令的環境變量
export PATH=$REDIS_HOME/bin/:$PATH
# 添加alias
alias supervisorctl="sudo supervisorctl -c /etc/supervisord.conf"
然后從新加載配置文件
source ~/.bashrc
啟動supervisor,redis會跟隨啟動
systemctl start supervisord
systemctl enable supervisord # 設置supervisor開機啟動
下面是查看redis狀態和啟動重啟redis的命令
supervisorctl status
supervisorctl restart redis
supervisorctl start redis