生産環境部署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,如需轉載請自行聯系原作者