Redis安装部署记录

说明

仅记录安装部署过程

不保证ctrl+cctrl+v可以跑起来,自己判断哪些要改的!

操作系统使用的CentOS-7.6.1810 x86_64

Redis版本使用4.0.14

【根据自己的环境灵活调整,生产环境请务必提供独立数据盘!】

环境准备

关闭SELINUX

1
2
sed -i 's,SELINUX=enforcing,SELINUX=disabled,' /etc/selinux/config
setenforce 0

关闭防火墙

1
2
systemctl stop firewalld
systemctl disable firewalld

添加sysctl参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
cat > /etc/sysctl.d/99-redis.conf <<EOF 
# 最大文件句柄数
fs.file-max=1048576
# 在CentOS7.4引入了一个新的参数来控制内核的行为。
# /proc/sys/fs/may_detach_mounts 默认设置为0
# 当系统有容器运行的时候,需要将该值设置为1。
fs.may_detach_mounts = 1
# 最大文件打开数
fs.nr_open=1024000
# 修改动态NAT跟踪记录参数
net.netfilter.nf_conntrack_max = 655350
net.netfilter.nf_conntrack_tcp_timeout_established = 1200
# 加快系统关闭处于 FIN_WAIT2 状态的 TCP 连接
net.ipv4.tcp_fin_timeout = 30
# 系统中处于 SYN_RECV 状态的 TCP 连接数量
net.ipv4.tcp_max_syn_backlog = 8192
# 内核中管理 TIME_WAIT 状态的数量
net.ipv4.tcp_max_tw_buckets = 5000
# 端口最大的监听队列的长度
net.core.somaxconn=512
# 允许应用程序能够绑定到不属于本地网卡的地址
net.ipv4.ip_nonlocal_bind=1
# 内存耗尽才使用swap分区
vm.swappiness = 0
vm.panic_on_oom = 0
# 内核允许超量使用内存直到用完为止
vm.overcommit_memory = 1
EOF

修改limits参数

1
2
3
4
5
6
cat > /etc/security/limits.d/99-redis.conf <<EOF
* soft nproc 1048576
* hard nproc 1048576
* soft nofile 1048576
* hard nofile 1048576
EOF

修改journal设置

1
2
3
4
5
sed -e 's,^#Compress=yes,Compress=yes,' \
-e 's,^#SystemMaxUse=,SystemMaxUse=1G,' \
-e 's,^#Seal=yes,Seal=yes,' \
-e 's,^#RateLimitBurst=1000,RateLimitBurst=2000,' \
-i /etc/systemd/journald.conf

更新系统软件

1
yum update -y

安装编译环境

1
yum install gcc make jemalloc tcl -y

安装Redis

创建用户

1
2
groupadd redis
useradd -g redis -s /bin/false redis

创建目录

1
mkdir -p /opt/software /opt/redis-data

下载Redis代码

1
wget http://download.redis.io/releases/redis-4.0.14.tar.gz -O - | tar xz --directory=/opt/software/

创建软链接

1
ln -sv /opt/software/redis-4.0.14 /opt/software/redis

切换目录

1
cd /opt/software/redis

编译安装

1
make MALLOC=jemalloc && make test && make install

创建配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
cat > /opt/redis-data/redis.conf <<EOF
# 监听地址
bind 0.0.0.0
# 监听端口
port 6379
tcp-backlog 2048
timeout 0
tcp-keepalive 300
# 是否以守护进程的方式启动
daemonize yes
protected-mode yes
supervised no
# 设置Redis有多少数据库
databases 16
save 900 1
save 300 10
save 60 10000
# 定义数据目录
dir "/opt/redis-data"
dbfilename "dump_6379.rdb"
pidfile "/opt/redis-data/redis_6379.pid"
logfile "/opt/redis-data/redis_6379.log"
loglevel notice
# 定义访问redis的密码
requirepass "abcd1234"
appendonly no
appendfilename "redis_6379.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
# 限制最大内存使用量
maxmemory 4gb
EOF

修改目录权限

1
chown -R redis:redis /opt/redis-data

启动Redis

这里以前台方式运行Redis,查看输出日志,确认是否正常运行

1
su -s /bin/sh -c "/usr/local/bin/redis-server /opt/redis-data/redis.conf --daemonize no" redis

systemd服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cat > /usr/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /opt/redis-data/redis.conf --daemonize no
ExecStop=/usr/local/bin/redis-cli -a abcd1234 shutdown
Restart=on-failure
RestartSec=60s
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

设置开机自启动

1
2
3
systemctl daemon-reload
systemctl enable redis.service
systemctl start redis.service

验证功能

登录redis

1
redis-cli -h 127.0.0.1 -p 6379

认证登录

1
2
redis> auth abcd1234
ok

测试功能

1
2
redis> ping
"PONG"