安装依赖包
yum install gcc gcc-c++ automake autoconf lib tool make tcl zlib-devel -y
下载地址:
http://download.redis.io/releases/
创建用户
groupadd --gid 500 redis
useradd redis --uid 500 --gid 500
echo "redis" | passwd redis --stdin
创建目录
mkdir -p /data/redis/{base,redis_port,conf}
mkdir -p /data/redis/data/6379
修改网络、内存及资源限制相关内核参数
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_max_syn_backlog = 65535
net.core.somaxconn = 65535
net.ipv4.tcp_max_tw_buckets = 262144
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_time = 120
vm.overcommit_memory = 1
vm.swappiness = 1
fs.file-max = 1024000
EOF
sysctl -p
检查THP(Transparent Huge Pages)是否开启(以下情况为开启)
cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
禁用THP(立即生效)
echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
cat /sys/kernel/mm/transparent_hugepage/defrag
cat /sys/kernel/mm/transparent_hugepage/enabled
禁用THP(重启生效)
cat >> /etc/rc.d/rc.local << EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod +x /etc/rc.d/rc.local
修改 ulimit
cat >> /etc/security/limits.conf <<EOF
redis soft nofile 1024000
redis hard nofile 1024000
EOF
cat >> /etc/security/limits.d/redis.conf <<EOF
redis soft nofile 1024000
redis hard nofile 1024000
EOF
安装Redis软件
tar xf redis-4.0.14.tar.gz -C /data/redis/base
cd /data/redis/base
mv redis-4.0.14 4.0.14
cd /data/redis/base/4.0.14/deps
make hiredis lua linenoise jemalloc
cd /data/redis/base/4.0.14
make
make PREFIX=/data/redis/base/4.0.14 install
chown -R redis:redis /data/redis
配置环境变量,添加REDIS_HOME并且修改PATH,
注意:切换到redis用户下操作
su - redis
vi ~/.bash_profile
### REDIS ###
REDIS_HOME=/data/redis/base/4.0.14
PATH=$PATH:$REDIS_HOME/bin
source ~/.bash_profile
参数配置
vi /data/redis/conf/redis_6379.conf
### Server ###
pidfile /data/redis/data/6379/redis_6379.pid
port 6379
bind 0.0.0.0
logfile "/data/redis/data/6379/redis_6379.log"
dbfilename dump_6379.rdb
dir /data/redis/data/6379
appendfilename "redis_6379.aof"
daemonize yes
loglevel notice
databases 16
activerehashing yes
hz 10
### Auth ###
requirepass "AY*s23y7Qt5w+J#rz^FoEBBB*Rc$u^qg"
masterauth "AY*s23y7Qt5w+J#rz^FoEBBB*Rc$u^qg"
### Memory ###
maxmemory 20gb
maxmemory-policy noeviction
maxmemory-samples 5
### Persistence ###
save " "
stop-writes-on-bgsave-error no
rdbcompression yes
rdbchecksum yes
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 2gb
aof-load-truncated yes
### Clients ###
maxclients 10000
tcp-backlog 65535
timeout 0
tcp-keepalive 60
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
### Replication ###
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-ping-slave-period 10
repl-disable-tcp-nodelay no
repl-backlog-size 2gb
repl-backlog-ttl 3600
slave-priority 100
### Command ###
rename-command flushall ""
rename-command flushdb ""
### Slowlog ###
slowlog-log-slower-than 1000
slowlog-max-len 1024
### Redis 4.0 New ###
lazyfree-lazy-eviction no
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
slave-lazy-flush yes
配置Redis启动脚本
使用root用户操作
vi /etc/init.d/redis_6379
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
REDIS_PORT=6379
PASSWORD='AY*s23y7Qt5w+J#rz^FoEBBB*Rc$u^qg'
EXEC=/data/redis/base/4.0.14/bin/redis-server
CLIEXEC=/data/redis/base/4.0.14/bin/redis-cli
PIDFILE=/data/redis/data/${REDIS_PORT}/redis_${REDIS_PORT}.pid
CONF="/data/redis/conf/redis_${REDIS_PORT}.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDIS_PORT -a $PASSWORD shutdown 2>/dev/null
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
status)
PID=$(cat $PIDFILE)
if [ ! -x /proc/${PID} ]
then
echo 'Redis is not running'
else
echo "Redis is running ($PID)"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Please use start, stop, restart or status as first argument"
;;
esac
修改启动脚本权限
chmod 770 /etc/init.d/redis_6379
chown redis.redis /etc/init.d/redis_6379
使用Redis用户启动redis server
su - redis
/etc/init.d/redis_6379 start