您好,登錄后才能下訂單哦!
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-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:表示內核允許分配超過所有物理內存和交換空間總和的內存
#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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。