コンパイルとインストールRedisのはsystemdに管理を使用します

環境

THE 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/

用途は、サービスを管理するにsystemdという編集Redisのサービス起動スクリプト

注:このスクリプトは、Redisのから取得するためにサービスによって生成されたyumのファイルをインストールすることにより、軽微な変更の後に来ました

#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

注:このスクリプトは、閉じたRedisのサービスが別のスクリプトは/ usr / libexecに/ Redisのシャットダウンによって行われている、それをコンパイルしてインストールされている場合は、yumのインストールのRedisは、スクリプトを持っているのRedisない、次のように読み込むスクリプト:

#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

Redisのは、ユーザーを作成して権限を設定します

#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服务启动命令

ディレクトリパスRDBファイルストレージとセット権限を変更

#sed -i '/^dir/s#./#/apps/redis/data#' /apps/redis/etc/redis.conf

Redisの開始を確認してください

コンパイルとインストールRedisのはsystemdに管理を使用します

Redisのの解決エラーと警告

保存する(サーバのルートディレクトリ/中)RDBファイルdump.rdbを開く失敗しました:アクセス許可が拒否されました

参考:https://stackoverflow.com/questions/22160753/redis-failed-opening-rdb-for-saving-permission-denied

执行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-file

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:表示内核允许分配超过所有物理内存和交换空间总和的内存

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

この問題への恒久的な解決策をお勧めするには、ログを追跡し、rc.localに変更してください

#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

おすすめ

転載: blog.51cto.com/hexiaoshuai/2470421