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的叢集就搭建完畢,多臺主機也是同樣的道理。