1. 程式人生 > >redis的叢集(偽叢集)

redis的叢集(偽叢集)

一臺虛擬機器搭建redis的叢集(3主3從)

1.首先在你自己的redis安裝目錄下分別建立一個

建立叢集配置資料夾:mkdir cluster-conf
                  cd cluster-conf

2.建立叢集埠資料夾:

mkdir 7001 7002 7003 7004 7005 7006

3.進入7001資料夾,複製redis.conf配置檔案 和 redis安裝後的bin目錄(拷貝的指令這裡忽略了)

4.修改配置檔案:vim conf/redis.conf(這根據自己檔案目錄)

port 7001
logfile "/usr/local/redis/cluster-conf/7001/redis.log"
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
  • #埠號port
  • #指定了記錄日誌的檔案。logfile
  • #是否開啟叢集:cluster-enabled
  • ##叢集配置檔案的名稱,每個節點都有一個叢集相關的配置檔案,持久化儲存叢集的資訊。這個檔案並不需要手動配置,這個配置檔案有Redis生成並更新,每個Redis叢集節點需要一個單獨的配置檔案,請確保與例項執行的系統中配置檔名稱不衝突

cluster-config-file nodes.conf

  • #節點互連超時的閥值。叢集節點超時毫秒數 :cluster-node-timeout
  • #預設redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途宕機,會導致可能有幾分鐘的資料丟失,根據save來策略進行持久化,Append Only File是另一種持久化方式,可以提供更好的持久化特性。Redis會把每次寫入的資料在接收後都寫入 appendonly.aof 檔案,每次啟動時Redis都會先把這個檔案的資料讀入記憶體裡,先忽略RDB檔案。:appendonly

注意:在這裡還要繫結ip地址,要不然後面叢集可能報錯

5.複製redis.conf和bin至7002並修改埠及儲存路徑

同樣修改redis.conf檔案如下圖:(其實和7001中修改是基本類似的,只是改變埠而已)

同樣需要bind 0.0.0.0

以此類推分別拷貝redis.conf檔案和bin目錄到7003 7004 7005 7006,然後修改redis.conf檔案和bind 0.0.0.0

6.上面全部修改之後我們就可以啟動redis了

注意啟動的時候要分別進入相對應的7001 7002...要不然產生的叢集的節點檔案nodes.conf只有一個

[[email protected]
7001]# ./bin/redis-server ./conf/redis.conf

然後我們看看redis的啟動情況:

6臺redis都啟動成功了。

7。建立叢集(以下語句可能報錯,下面有解決辦法)注意這個ip要寫自己主機的ip不要寫127.0.0.1,要不然後面用jedisCluster客戶端測試會報錯的。

ruby redis-trib.rb create --replicas 1 192.168.37.129:7001 192.168.37.129:7002 192.168.37.129:7003 192.168.37.129:7004 192.168.37.129:7005 192.168.37.129:7006

以上命令的意思就是讓 redis-trib 程式建立一個包含三個主節點和三個從節點的叢集。命令的意義如下:

1、給定 redis-trib.rb 程式的命令是 create , 這表示我們希望建立一個新的叢集。

2、選項 --replicas 1 表示我們希望為叢集中的每個主節點建立一個從節點(百分比 選舉master按先後順序)。

3之後跟著的其他引數則是例項的地址列表, 我們希望程式使用這些地址所指示的例項來建立新叢集。

注意上面的執行的指令要指定到redis原始碼包中src下,或者進去src下

 

注意如果執行上面的語句報錯: (三個基本都需要安裝)

一、在執行./redis-trib.rb create報
/usr/bin/env: ruby: No such file or directory
解決:yum install ruby


二、在執行./redis-trib.rb create報
./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
解決:yum install rubygems

在執行./redis-trib.rb create報
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
        from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
解決:gem install redis


不過還有可能在執行gem install redis時,提示如下錯誤:

gem install redis
    ERROR:  Error installing redis:
     redis requires Ruby version >= 2.2.2.

CentOS7 yum庫中ruby的版本支援到 2.0.0,可gem 安裝redis需要最低是2.2.2,採用rvm來更新ruby:

1、安裝RVM(具體命令可以檢視官網,Ruby官網地址Ruby官網安裝教程):

//具體RVM安裝命令地址:http://rvm.io/
  [[email protected] redis-3.2.9]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB 

  [[email protected] redis-3.2.9]# curl -sSL https://get.rvm.io | bash -s stable

  [[email protected] redis-3.2.9]# find / -name rvm -print

輸出:(和我輸出應該是不太一樣的,因為我這是安裝ruby2.4.1之後的)

source /usr/local/rvm/scripts/rvm    

2、檢視rvm庫中已知的ruby版本:

rvm list known

 3、安裝一個ruby版本:(自己選擇)

rvm install 2.4.1

4、使用一個ruby版本:

rvm use 2.4.1

輸出:

5、設定預設版本:(設定ruby2.4.1為預設的ruby,因為還安裝有其他的版本)

rvm use 2.4.1 --default

6、解除安裝一個已知版本:

rvm remove 2.0.0

7、檢視ruby版本:

ruby --version

8、安裝redis:

gem install redis

然後就可以執行以下語句了(一定要指定redis原始碼的目錄下src

ruby redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 

如果叢集成功後會顯示以下:

 上面的一些欄位的含義如下:

節點ID:如702ab73495433a291966fc379b69d4bf0a75ab6c

IP:埠:192.168.37.129:7001

標誌: master, slave, myself, fail

如果是個從節點, 後面的節點id是它的主節點的NODE ID

叢集最近一次向節點發送 PING 命令之後, 過去了多長時間還沒接到回覆。.

節點最近一次返回 PONG 回覆的時間。

本節點的網路連線情況

節點目前包含的槽:例如 192.168.37.129:7001 目前包含號碼為 0至 5460的雜湊槽(master)。

8.檢視

 ps -ef |grep redis或者netsta -tnlp |grep redis

[[email protected] 7001]# ./bin/redis-cli -c -p 7001

表示安裝成功了

注意:

如果你的叢集是不是第一次啟動的,有可能報以下的錯。

解決方法:

刪除7001。。。7006目錄下的dump.rdb,(appendonly.aof)和node.conf後,又殺掉所有redis程序,然後重啟redis叢集搞定

 

到此redis的叢集就搭建完畢,多臺主機也是同樣的道理。