OS | redis 版本 | 防火墙和selinux |
---|---|---|
CentOS7 | 4.0.14 | 关闭 |
1.由于redis是用C编写的,因此须要安装gcc #yum -y install gcc 2.下载redis源码包 #wget -P /usr/local/src/ http://download.redis.io/releases/redis-4.0.14.tar.gz
#cd /usr/local/src/ #tar xf redis-4.0.14.tar.gz #cd redis-4.0.14 #make PREFIX=/apps/redis install #PREFIX表示指定redis的安装目录 #mkdir /apps/redis/{etc,logs,data,run} #建立配置文件、日志、数据等目录 #cp redis.conf /apps/redis/etc/
#cat > /usr/lib/systemd/system/redis.service <<EOF [Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target [Service] ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd ExecStop=/usr/libexec/redis-shutdown Type=notify User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF
#cat /usr/libexec/redis-shutdown #!/bin/bash # # Wrapper to close properly redis and sentinel test x"$REDIS_DEBUG" != x && set -x REDIS_CLI=/usr/bin/redis-cli # Retrieve service name SERVICE_NAME="$1" if [ -z "$SERVICE_NAME" ]; then SERVICE_NAME=redis fi # Get the proper config file based on service name CONFIG_FILE="/apps/redis/etc/$SERVICE_NAME.conf" # Use awk to retrieve host, port from config file HOST=`awk '/^[[:blank:]]*bind/ { print $2 }' $CONFIG_FILE | tail -n1` PORT=`awk '/^[[:blank:]]*port/ { print $2 }' $CONFIG_FILE | tail -n1` PASS=`awk '/^[[:blank:]]*requirepass/ { print $2 }' $CONFIG_FILE | tail -n1` SOCK=`awk '/^[[:blank:]]*unixsocket\s/ { print $2 }' $CONFIG_FILE | tail -n1` # Just in case, use default host, port HOST=${HOST:-127.0.0.1} if [ "$SERVICE_NAME" = redis ]; then PORT=${PORT:-6379} else PORT=${PORT:-26739} fi # Setup additional parameters # e.g password-protected redis instances [ -z "$PASS" ] || ADDITIONAL_PARAMS="-a $PASS" # shutdown the service properly if [ -e "$SOCK" ] ; then $REDIS_CLI -s $SOCK $ADDITIONAL_PARAMS shutdown else $REDIS_CLI -h $HOST -p $PORT $ADDITIONAL_PARAMS shutdown fi #chmod +x /usr/libexec/redis-shutdown
#groupadd -g 888 redis && useradd -r -u 888 -g 888 redis -s /sbin/nologin #chown redis.redis -R /apps/redis/
#ln -s /apps/redis/bin/* /usr/bin/ #ll /usr/bin/redis-* lrwxrwxrwx 1 root root 31 Feb 9 21:34 /usr/bin/redis-benchmark -> /apps/redis/bin/redis-benchmark #redis性能测试工具 lrwxrwxrwx 1 root root 31 Feb 9 21:34 /usr/bin/redis-check-aof -> /apps/redis/bin/redis-check-aof #AOF文件检查工具 lrwxrwxrwx 1 root root 31 Feb 9 21:34 /usr/bin/redis-check-rdb -> /apps/redis/bin/redis-check-rdb #RDB文件检查工具 lrwxrwxrwx 1 root root 25 Feb 9 21:34 /usr/bin/redis-cli -> /apps/redis/bin/redis-cli #redis客户端工具 lrwxrwxrwx 1 root root 30 Feb 9 21:34 /usr/bin/redis-sentinel -> /apps/redis/bin/redis-sentinel #哨兵,软链接到server lrwxrwxrwx 1 root root 28 Feb 9 21:34 /usr/bin/redis-server -> /apps/redis/bin/redis-server #redis服务启动命令
#sed -i '/^dir/s#./#/apps/redis/data#' /apps/redis/etc/redis.conf
参考资料:https://stackoverflow.com/questions/22160753/redis-failed-opening-rdb-for-saving-permission-deniedlinux
执行systemctl stop redis命令的时候,在/var/log/messages日志中发现上面的错误,出现该错误的缘由是由于关闭redis以前须要将数据保存到rdb文件中,可是由于权限缘由致使报错,解决方法以下: 在redis的配置文件中指定保存rdb文件的目录,并确保相关的权限正确 #ll /apps/redis/data/ -d drwxr-xr-x 2 redis redis 22 Feb 11 20:33 /apps/redis/data/ #vim /apps/redis/etc/redis.conf dir /apps/redis/data
参考资料:https://stackoverflow.com/questions/36880321/why-redis-can-not-set-maximum-open-fileredis
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. backlog参数控制的是三次握手的时候server端收到client ack确认号以后的队列值。
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 0:表示内核将检查是否有足够的可用内存供应用进程使用;若是有足够的可用内存,内存申请容许;不然,内存申请失败,并把错误返回给应用进程。 1:表示内核容许分配全部的物理内存,而无论当前的内存状态如何。 2:表示内核容许分配超过全部物理内存和交换空间总和的内存
#vim /etc/sysctl.conf vm.overcommit_memory = 1 net.core.somaxconn = 1024
#sysctl -p
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. 大页内存动态分配,须要关闭让redis负责内存管理。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
#vim /etc/rc.local if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi #chmod +x /etc/rc.d/rc.local