天天看點

Linux下Redis詳細安裝及配置

分享知識 傳遞快樂

在安裝前先安裝以下插件:

yum install gcc-c++

yum install pcre pcre-devel

yum install zlib

zlib-devel yum install openssl openssl–devel

否則不能編譯通過。

連接配接時一定要關閉防火強:

[root@WEB redis-3.0.6]# make
cd src && make all
make[1]: 進入目錄“/root/lnmp_soft/redis-3.0.6/src”
CC adlist.o
In file included from adlist.c:34:0:
zmalloc.h:50:31: 緻命錯誤:jemalloc/jemalloc.h:沒有那個檔案或目錄
#include <jemalloc/jemalloc.h>
^
編譯中斷。
make[1]: [adlist.o] 錯誤 1
make[1]: 離開目錄“/root/lnmp_soft/redis-3.0.6/src”
make: [all] 錯誤 2      

如果出現上術問題,直接輸入:make MALLOC=libc。

Linux啟動Redis時出現警告

./redist-server

或者指定配置檔案

./redis-server redis.conf

則可以看到啟動日志,這裡會有三個WARN:

11980:M 08 Dec 11:30:51.347 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
11980:M 08 Dec 11:30:51.347 # 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.
11980:M 08 Dec 11:30:51.347 # 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.      

按照提示分别修複

1.第一個提示somaxconn這個值為128太小了,這個值是系統的網絡連接配接隊列大小,而redis的TCP backlog設定的值為511,是以受限,是以修改下系統的值

$ vim /etc/sysctl.conf
$ net.core.somaxconn = 20480  #最大隊列長度,應付突發的大并發連接配接請求,預設為128
$ net.ipv4.tcp_max_syn_backlog = 20480  #半連接配接隊列長度,此值受限于記憶體大小,預設為1024
$ sysctl -p  #使參數生效      

2.​

​overcommit_memory​

​設定為0,在低記憶體條件下可能會儲存失敗,修複方法是在sysctl.conf下添加​

​vm.overcommit_memory = 1​

vm.overcommit_memory不同的值說明:

0 表示檢查是否有足夠的記憶體可用,如果是,允許配置設定;如果記憶體不夠,拒絕該請求,并傳回一個錯誤給應用程式。

1 允許配置設定超出實體記憶體加上交換記憶體的請求

2 核心總是傳回true

redis的資料回寫機制分為兩種

同步回寫即SAVE指令。redis主程序直接寫資料到磁盤。當資料量大時,這個指令将阻塞,響應時間長。

異步回寫即BGSAVE指令。redis 主程序fork一個子程序,複制主程序的記憶體并通過子程序回寫資料到磁盤。

由于RDB檔案寫的時候fork一個子程序。相當于複制了一個記憶體鏡像。當時系統的記憶體是4G,而redis占用了近3G的記憶體,是以肯定會報記憶體無法配置設定。如果 「vm.overcommit_memory」設定為0,在可用記憶體不足的情況下,就無法配置設定新的記憶體。如果 「vm.overcommit_memory」設定為1。 那麼redis将使用交換記憶體。

修改方案:

$ vim /etc/sysctl.conf
$ vm.overcommit_memory = 1  
$ sysctl -p  #使參數生效      

3.關閉THP透明記憶體

​Transparent Huge Pages (THP)​

​告警,這是一個關于透明記憶體巨頁的話題。簡單來說記憶體可管理的最小機關是page,一個page通常是4kb,那1M記憶體就會有256個page,CPU通過内置的記憶體管理單元管理page表記錄。Huge Pages就是表示page的大小已超過4kb了,一般是2M到1G,它的出現主要是為了管理超大記憶體。個人了解上TB的記憶體。而THP就是管理Huge Pages的一個抽象層次,根據一些資料顯示THP會導緻記憶體鎖影響性能,是以一般建議關閉此功能。

/sys/kernel/mm/transparent_hugepage/enabled有三個值,如下:

$ cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
####
# always 盡量使用透明記憶體,掃描記憶體,有512個 4k頁面可以整合,就整合成一個2M的頁面
# never 關閉,不使用透明記憶體
# madvise 避免改變記憶體占用      

修改方法:

$ vim /etc/rc.local
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled  #在開機腳本裡追加此指令      

再啟動,則不報錯了。

以上配置隻能在本機通路,不能遠端通路

redis 遠端連接配接方法

在虛拟機上安裝了redis,啟動後本機用戶端可以連接配接通路,但是外部主機一直通路不了,解決方法如下:

修改redis伺服器的配置檔案:

vim redis.conf

注釋以下綁定的主機位址:

# bind 127.0.0.1 (開啟這個配置時:redis 隻接收來自于該 IP 位址清單的請求,如果不進行設定,那麼将處理所有請求。)      

或分别修改以下值:

bind 0.0.0.0

此時還是不能通路redis,redis預設開啟了保護模式,繼續檢視redis.conf檔案,發現3.2後新增protected-mode配置,預設是yes,即開啟。

解決方法分為兩種:

1、關閉protected-mode模式

protected-mode no

2、配置bind或者設定密碼

requirepass admini (在redis.conf配置檔案中)

繼續閱讀