修改网络、内存及资源限制相关内核参数
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
yum install -y gcc gcc-c++ automake autoconf libtool make
redis 6.0.5版本(含)推荐使用jemalloc管理内存
yum install -y jemalloc
如果是redis 6.0版本(含)以上需要升级gcc到9版本(gcc --version 命令可看gcc版本),scl命令启用只是临时
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils centos-release-scl
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
软件下载地址: http://download.redis.io/releases
解压,上传至 /data
tar xzf redis-5.0.14.tar.gz
安装:
cd redis-5.0.14
make PREFIX=/usr/local/redis install
环境变量:
echo "export PATH=\$PATH:/usr/local/redis/bin">>/etc/profile
source /etc/profile
创建目录:
mkdir /data/redis -p
参数配置
cat > /data/redis/redis.conf<<EOF
### Server ###
pidfile /data/redis/redis.pid
port 6379
bind 0.0.0.0
logfile "/data/redis/redis.log"
dbfilename redis_dump.rdb
dir /data/redis
appendfilename "redis.aof"
daemonize yes
loglevel notice
databases 16
activerehashing yes
hz 10
### Auth ###
requirepass "sdfdSDFwer124"
masterauth "sdfdSDFwer124"
### Memory ###
maxmemory 2gb
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
EOF
启动:
redis-server /data/redis/redis.conf &
连接:
redis-cli -a "sdfdSDFwer124"
配置Redis启动脚本 /etc/init.d/redis
#!/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='sdfdSDFwer124'
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/data/redis/redis.pid
CONF="/data/redis/redis.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
启动:
/etc/init.d/redis start