天天看點

生産環境部署單台redis

生産環境部署redis方案

1.騰訊雲有redis主從

2.自己部署redis也很簡單

(1)redis使用編譯安裝方式,是以需要安裝編譯基本元件

# yum install gcc cpp glibc glibc-devel gcc-c++

(2)redis依賴jemalloc,是以先安裝此元件

# wget http://www.canonware.com/download/jemalloc/jemalloc-4.2.1.tar.bz2

後續讀者可以檢視此連結擷取更新版本jemalloc,http://www.canonware.com/download/jemalloc/

# tar -xf jemalloc-4.2.1.tar.bz2

cd jemalloc-4.2.1

# ./configure --prefix=/usr/local/

# make

# make install

(3)下載下傳安裝redis-server

# cd /usr/local/src/

# wget http://download.redis.io/redis-stable.tar.gz

後續讀者可以檢視此連結擷取更新版本redis,http://download.redis.io/或者從官網位址開始查找下載下傳位址

# tar -xf redis-stable.tar.gz

# cd redis-stable

# mkdir /etc/redis

# cp /usr/local/src/redis-stable/redis.conf /etc/redis

先嘗試前台啟動redis,檢視其日志輸出

/usr/local/bin/redis-server /etc/redis/redis.conf

例如本文作者遇到了三個核心參數相關的警告

(1)WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

(2)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.

(3)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.

解決辦法:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

sysctl -w net.core.somaxconn = 65536

sysctl -w vm.overcommit_memory = 1

讀者可以把上述設定分别加入/etc/rc.local和/etc/sysctl.conf檔案中

此時啟動redis無任何警告.可以修改配置檔案/etc/redis/redis.conf

daemonize no => daemonize yes

redis預設隻監聽本機IP:127.0.0.1.是以,如果允許redis可以由内網其他主機通路,可以在bind指令後添加本主機的内網IP即可.注意:redis由程式通路使用,通常是不會監聽公網IP的.

登入通路redis-server

redis-cli:可以直接通路本主機的redis-server

redis-cli -h redis-server_内網IP -p 6379:其他内網主機通路

127.0.0.1:6379> set name Tom

OK

127.0.0.1:6379> get name

"Tom"

127.0.0.1:6379> keys *

1) "name"

127.0.0.1:6379> quit

測試可正常使用

(4)接下來我們要為redis設定一個密碼

第一種情景:可以重新開機redis的情景.當redis重新部署

vim /etc/redis/redis.conf

# requirepass foobared =>

requirepass YOUR_PASSWORD

[随機密碼生成指令: openssl rand -base64 16]

然後修改redis.conf僅root可讀寫: chmod 600 /etc/redis/redis.conf

最後kill掉redis程序再啟動

kill -9 `pgrep redis` && /usr/local/bin/redis-server /etc/redis/redis.conf

然後再次登入redis.需要輸入密碼驗證通過後才能通路資料

# redis-cli

(error) NOAUTH Authentication required.

未經授權的登入是不能通路資料的

127.0.0.1:6379> auth 71840de8c369958

也可以在登入直接輸入密碼

# redis-cli -h 127.0.0.1 -p 6379 -a 71840de8c369958

第二種情景:不能重新開機redis.當redis已經在生産環境中運作了,不能重新開機redis時可以如下操作:

127.0.0.1:6379> config get requirepass

1) "requirepass"

2) ""

此時requirepass對應的值是空的""

127.0.0.1:6379> config set requirepass 71840de8c369958

現在我們為redis設定了密碼

擷取keys和requirepass都遭到拒絕

使用密碼進行認證,傳回OK表示通過認證,現在執行任何操作都是被允許的.

2) "71840de8c369958"

最後在redis.conf配置檔案中添加requirepass 71840de8c369958.

這樣重新開機redis後,密碼同樣生效.然後修改redis.conf僅root可通路

# chmod 600 /etc/redis/redis.conf

安裝過程中可能會遇到的問題以及解決辦法

1、不能編譯沒有GCC 編譯工具

安裝報錯:

問題1:make時可能會報如下錯誤

cc -c -std=c99 -pedantic -O2 -Wall -W   -g -rdynamic -ggdb   adlist.c

make: cc:指令未找到

make: *** [adlist.o] 錯誤 127

解決方法:安裝gcc

指令如下:yum install gcc

2、make時可能會報如下錯誤:

collect2: ld returned 1 exit status

make[1]: *** [redis-server] Error 1

make[1]: Leaving directory `/usr/local/redis/src'

make: *** [all] Error 2

解決辦法:編輯src/.make-settings裡的OPT,改為OPT=-O2 -march=i686

3、提示找不到jemalloc

zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory

zmalloc.h:55:2: error: #error "Newer version of jemalloc required"

解決辦法: 安裝jemalloc,請參考前文

4、make時可能會報如下錯誤:

cc: error: ../deps/hiredis/libhiredis.a: No such file or directory

cc: error: ../deps/lua/src/liblua.a: No such file or directory

cc: error: ../deps/jemalloc/lib/libjemalloc.a: No such file or directory

make: *** [redis-server] Error 1

分别進入redis下的deps下的hiredis、lua運作make

注意:jemalloc下可能要先運作./configure,然後make

回到src目錄運作make.結果還是報cc: error: ../deps/lua/src/liblua.a: No such file or directory

這下子我把redis的解壓包删除掉:rm -rf redis-stable 

重新解壓,進入redis-stable;make還真沒報錯了。

參考部落格文章如下

http://blog.csdn.net/steve1018/article/details/26737277

http://blog.csdn.net/jy0902/article/details/19248299

http://blog.csdn.net/lxpbs8851/article/details/8136126

後續可以部署redis主從叢集

本文轉自 zhuhc1988 51CTO部落格,原文連結:http://blog.51cto.com/changeflyhigh/1932241,如需轉載請自行聯系原作者

繼續閱讀