[ redis ] 安裝redis 3.2.4遇到的雷 與 額外的設定on Ubuntu


 byobu, 安裝 sudo apt-get install byobu
如果要每次透過文字介面登入時都自動啟動byobu,請輸入byobu-enable

這次為了要使用redis當作cache
所以馬上抓了一台ec2來裝

至於為什麼不用Amazon Elasticache ?
因為我們需要處理geo query
這個feature從3.2.0才出現..
Amazon Elasticache只有2.8
所以只能含淚跳過了Orz

進入正題


################################################################
完美安裝 redis的方法
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-redis-on-ubuntu-16-04
################################################################

首先先去 redis.io 上面下載stable版本的tar.gz檔
( cmd中使用 wget http://download.redis.io/releases/redis-3.2.4.tar.gz )

接著解壓縮
tar zxfv redis-3.2.4.tar.gz

然後進去解出來的目錄中
cd redis-3.2.4

然後直接make ...       不一定會出問題
不過我用Ubuntu 14.04 LTS 真的踩了一堆雷

( 記得先把make, gcc裝一裝 )
第一個遇到的問題
jemalloc/jemalloc.h: No such file or directory
這個是什麼問題 ?!
答案請看README.md

說關於分配器allocator, 如果有MALLOC 這個環境變量
會有用這個環境變量的去建立Redis。
而且libc 並不是默認的分配器, 默認的是jemalloc,
因為jemalloc 被證明有更少的 fragmentation problems 比libc。
但是如果你又沒有jemalloc 而只有libc 當然make 出錯。所以加這麼一個參數。
所以要輸入 make MALLOC=libc
嗚嗚.. 不過我後來還是把jemalloc給裝下去了XD

再來遇到一個卡關很久的問題
只能說我真的太嫩了 很少自己make
所以接下來跑到最後就跑出
undefined reference to dladdr
查了很多都跟我說少了什麼 -ldl
我真的不知道那是啥QQ
有知道的麻煩在底下教我拜託Orz

後來輾轉查到 ldflags=-ldl
不過加了根本沒用啊(翻桌
後再仔細的看README.md
才知道...
要靠這個
make distclean
sudo apt-get install libc6-dev-i386
github上原文

Fixing problems building 32 bit binaries

If after building Redis with a 32 bit target you need to rebuild it with a 64 bit target, or the other way around, you need to perform a make distclean in the root directory of the Redis distribution.
In case of build errors when trying to build a 32 bit binary of Redis, try the following steps:


  • Install the packages libc6-dev-i386 (also try g++-multilib).
  • Try using the following command line instead of make 32bitmake CFLAGS="-m32 -march=native" LDFLAGS="-m32"

然後 make 才成功
接著 make install 
大功告成
Google了一堆..結果最後還是在README.md中找到解決方法!
特別以此文紀念一下Orz

####################################
感覺安裝這個 在make時會少走很多冤枉路..
sudo apt-get install build-essential tcl
####################################

額外設定


sudo vi /etc/sysctl.conf
然後在裡面寫入底下兩行
vm.overcommit_memory = 1

kernel/mm/transparent_hugepage/enabled = never

redis server會說要使用
echo never >/sys/kernel/mm/transparent_hugepage/enabled

不過在ubuntu 14.04會出現 Permission Denied
所以有兩個解決方法
1.
切換成root的身份輸入上面的指令
echo never >/sys/kernel/mm/transparent_hugepage/enabled
不過這個指令再重開機後就會失效,所以推薦第二個

2.
寫入 /etc/rc.local
sudo vi /etc/rc.local
加入這段
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
接著重開機即可完成!







留言

這個網誌中的熱門文章

[MySQL] schema 與資料類型優化

[翻譯] 介紹現代網路負載平衡與代理伺服器