我的Redis叢集搭建之路

來源:互聯網
上載者:User
要做一個平台,設計要求每秒能夠在一個800-1000萬條記錄的資料庫內讀寫1萬次。
我是選用redis叢集。我的做法是按照大神龔-java提供的文檔和自己加入的一些發現結合實現的。
首先就是下載redis-3.2.1.tar.gz,這個沒有什麼說的,去官網上找連結然後wget就可以了。
下載完成後tar -zxvf解壓縮,我的習慣是解壓縮之後放到/usr/local/目錄下面。
到/usr/local/redis-3.2.1/目錄下面,如果沒有安裝gcc就需要用命令yum install gcc安裝一下。
gcc裝好後,就在/usr/local/redis-3.2.1/目錄下面編譯,執行make,如果執行失敗看一下錯誤,如果錯誤如下,
編譯中斷。
make[1]: *** [adlist.o] 錯誤 1
make[1]: 離開目錄“/usr/local/redis-stable/src”
make: *** [all] 錯誤 2
解決辦法是:
make MALLOC=libc
編譯完成後執行make install。作用是將 /usr/local/redis/redis-3.2.1/src/相關redis的執行命令複製到/usr/local/bin目錄下
下面就要修改設定檔了。設定檔在/usr/local/redis/redis-3.2.1/redis.conf。主要修改下面幾個參數。
bind 0.0.0.0 表示不限制連結本機服務的ip地址。任何電腦都可以發起串連。這裡要特別注意,我一開始以為這裡綁定的ip才能訪問原生6379連接埠,結果一修改就啟動不了redis服務,後來仔細看了一下設定檔上的說明才明白,原來這個bind的不是來訪問的ip,而是本機網卡的物理地址。
daemonize yes 表示允許後台運行
cluster-enabled yes 表示開啟叢集
cluster-node-timeout 15000 表示設定逾時時間
cluster-config-file node 儲存叢集設定檔
配置好之後啟動redis服務,redis-server redis.conf
[root@t91 redis-3.2.1]# ps -ef | grep redis
root      2352     1  0 09:39 ?        00:00:00 redis-server 192.168.1.91:7001 [cluster]
root      2450  2006  0 09:56 pts/0    00:00:00 grep --color=auto redis
如果用ps -ef | grep redis,列印上面內容,就表示啟動成功了。
下一步,因為redis cluster的配置是用的ruby指令碼寫得,那麼就需要你最少安裝了ruby (apt-get install ruby )和gem。更主要的是你還要用安裝ruby所需要的redis模組
yum -y install zlib ruby rubygems
# 安裝ruby的redis庫

gem install redis

【補充:如果執行時報錯,無法串連。可以手動下載下來安裝

1、去https://rubygems.org/gems/redis/下載redis-x.x.x.gem檔案

2、gem install -l /root/redis-3.3.1.gem

】 好了,現在可以開始建立叢集了。我用的是redis-trib.rb create
redis-trib.rb create --replicas 1 192.168.1.91:7001 192.168.1.92:7002 192.168.1.93:7003 192.168.1.94:7004 192.168.1.95:7005 192.168.1.96:7006
建立過程折騰了我好久,一開始總是報錯:
>>> Creating cluster
[ERR] Sorry, can't connect to node 192.168.1.91:7001
我從網上找了很多文章,大部分都是說ruby或者gem的版本太低。我嘗試升級過但還是不行。也就沒再研究原因。因為後來遇到大神龔-java,我完全按照他的文檔操作,在一台伺服器上成功的建立了6個執行個體的redis叢集。
這時我以為已經大功告成了,沒想到後面的事情真是一波三折。
既然在一台伺服器上叢集成功了,也應該可以在6台上實現吧。
我馬上開始部署。結果建立的時候又開始報錯
>>> Creating cluster
[ERR] Sorry, can't connect to node 192.168.1.91:7001
檢查來檢查去,發現原來是我前面提過的設定檔redis.conf裡面bind 0.0.0.0的問題。經過好多次失敗,才不得不耐心的看看說明,結果才明白。哎,以後真要好好看說明了。
然後執行建立,順利連結,我正高興呢,結果發現執行到Waiting for the cluster to join.........不向下進行了。一直是這個狀態。
沒說的,上網查吧。網上有位兄弟是這麼說的:
建立叢集時一直處於"Waiting for the cluster to join...................................."的狀態
這個問題原因不知,但解決方案是在redis.conf檔案中把bind 127.0.0.1本地環回口改為物理介面.
可是我已經把redis.conf的bind配置好了呀。又是一次次的嘗試,結果我發現,在我建立叢集後,叢集成員要通過一個隨機連接埠,向建立叢集的伺服器通訊。這個通訊不是redis.conf裡面port。
行了,二話不說修改iptables
-A INPUT -s 192.168.1.91 -j ACCEPT
-A INPUT -s 192.168.1.92 -j ACCEPT
-A INPUT -s 192.168.1.93 -j ACCEPT
-A INPUT -s 192.168.1.94 -j ACCEPT
-A INPUT -s 192.168.1.95 -j ACCEPT
-A INPUT -s 192.168.1.96 -j ACCEPT
然後建立叢集,還是老樣子……這時想起了redis叢集通訊方式,叢集成員應該不會只與叢集建立者通訊吧。於是把叢集成員的iptables全都做了相同配置。
然後建立叢集,大功告成。
特別感謝龔-java同志的大力協助。
附龔-java的文檔:https://github.com/gonghard/redis

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.