生產環境部署單臺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
# make
# make install
# 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
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
未經授權的登錄是不能訪問數據的
127.0.0.1:6379> auth 71840de8c369958
OK
127.0.0.1:6379> keys *
1) "name"

也可以在登錄直接輸入密碼
# redis-cli -h 127.0.0.1 -p 6379 -a 71840de8c369958
127.0.0.1:6379> keys *
1) "name"

第二種情景:不能重啓redis.當redis已經在生產環境中運行了,不能重啓redis時可以如下操作:
# redis-cli
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
此時requirepass對應的值是空的""
127.0.0.1:6379> config set requirepass 71840de8c369958
OK
現在我們爲redis設置了密碼
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> config get requirepass
(error) NOAUTH Authentication required.
獲取keys和requirepass都遭到拒絕
127.0.0.1:6379> auth 71840de8c369958
OK
使用密碼進行認證,返回OK表示通過認證,現在執行任何操作都是被允許的.
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "71840de8c369958"
127.0.0.1:6379> keys *
1) "name"

最後在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主從集羣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章