linux安裝單機版redis已經在另一篇文章說過了,下邊來搞集群,環境是新浪雲服務器:
redis3.0以后開始支持集群。
前言:redis用什么做集群?
用一個叫redis-trib.rb的ruby腳本。redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源碼src目錄下(redis-xxx/src/)。是基於redis提供的集群命令封裝成簡單、便捷、實用的操作工具。redis-trib.rb是redis作者用ruby完成的。所以redis集群需要先安裝ruby環境。
先瞅瞅在哪:進入到redis的源代碼目錄,就可以看到redis-trib.rb腳本
正文,一:安裝ruby環境:(前提條件)
上文已經說了,redis集群是用的ruby腳本,所以要想執行該腳本,需要ruby環境。
安裝ruby環境:
yum install ruby
yum install rubygems (ruby包的管理器,用來下載ruby的包)
顯示Nothing todo,說明服務器已經安裝了ruby。
二:安裝ruby包redis-3.3.0.gem
redis-trib.rb的運行需要的ruby包,正如我們的java程序需要的jar包一樣。
這個包和redis版本不是非得匹配,只要支持就行,我在網上找了個和redis -3.2.9版本接近的3.3.0版本。切換到redistar目錄,用secureCRT的rz命令redis-3.3.0.gem上傳到redistar目錄,這個包安裝到哪都行,只是提供一個環境而已。
用的secureCRT的rz命令上傳到服務器,進入到redistar目錄,執行rz命令,即可上傳文件。
執行gem install redis-3.0.0.gem命令安裝。
安裝完成:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
這里是介紹性東西:
進入到redis的src目錄,用ll *.rb找到redis-trib.rb文件,
執行命令./redis-trib help 可以查看該工具包提供的命令和功能
-rwxrwxr-x 1 root root 60852 May 17 15:39 redis-trib.rb [root@lihaoyang /redistar/redis-3.2.9/src]# ./redis-trib.rb help Usage: redis-trib <command> <options> <arguments ...> create host1:port1 ... hostN:portN --replicas <arg> check host:port info host:port fix host:port --timeout <arg> reshard host:port --from <arg> --to <arg> --slots <arg> --yes --timeout <arg> --pipeline <arg> rebalance host:port --weight <arg> --auto-weights --use-empty-masters --timeout <arg> --simulate --pipeline <arg> --threshold <arg> add-node new_host:new_port existing_host:existing_port --slave --master-id <arg> del-node host:port node_id set-timeout host:port milliseconds call host:port command arg arg .. arg import host:port --from <arg> --copy --replace help (show this help) For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
下邊是從別人文章找的解釋:
可以看到redis-trib.rb具有以下功能:
- 1、 create :創建集群
- 2、 check :檢查集群
- 3、 info :查看集群信息
- 4、 fix :修復集群
- 5、 reshard :在線遷移slot
- 6、 rebalance :平衡集群節點slot數量
- 7、 add-node :將新節點加入集群
- 8、 del-node :從集群中刪除節點
- 9、 set-timeout :設置集群節點間心跳連接的超時時間
- 10、 call :在集群全部節點上執行命令
- 11、 import :將外部redis數據導入集群
- redis-trib.rb主要有兩個類:
ClusterNode
和RedisTrib
。ClusterNode
保存了每個節點的信息,RedisTrib
則是redis-trib.rb各個功能的實現。 - ++++++++++++++++++++++++++++++++++++++++
暫且只關注創建集群的功能。先簡單介紹下redis-trib.rb腳本的使用,以create為例:
create host1:port1 ... hostN:portN
--replicas <arg>
host1:port1 ... hostN:portN
表示子參數,這個必須在可選參數之后, --replicas <arg>
是可選參數,帶 的表示后面必須填寫一個參數,像 --slave
這樣,后面就不帶參數,掌握了這個基本規則,就能從help命令中獲得redis-trib.rb的使用方法。
例子:create創建集群
create命令可選replicas參數,replicas表示需要有幾個slave。
有一個slave的集群的創建命令如下:
$ruby redis-trib.rb create--replicas 1 10.180.157.199:6379 10.180.157.200:6379 10.180.157.201:6379 10.180.157.202:6379 10.180.157.205:6379 10.180.157.208:6379
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
三:搭建我們的集群:
集群中有三個節點的集群,每個節點有一主一備。需要6台虛擬機。
搭建一個偽分布式的集群,使用6個redis實例來模擬。
1,在user/local 下創建redis-cluster目錄:
mkdir redis-cluster
在創建redis01目錄
進入usr/local/redis,把redis-cli、redis-server、redis.conf復制到/usr/local/redis-cluster/redis01目錄
查看:
說明:這里安裝redis單機版的時候,只用了make命令,沒有make install,然后把redis-cli、redis-server、redis.conf三個文件copy到了自己手動建的/usr/local/redis目錄,
如果用[root@bogon redis-3.0.0]# make install PREFIX=/usr/local/redis安裝的redis單機版,還會有其他幾個文件在/usr/local/redis目錄,至於區別用途還不很清楚。
第一步:創建6個redis實例,端口號從7001~7006
第二步:修改redis的配置文件,后端啟動daenonize改為yes是之前安裝單機版已經做過的。
1、 修改端口號,進入vim編輯模式后,非insert模式下(insert了按esc即可退出)輸入/port 回車可快速定位
2,打開cluster-enable前面的注釋。:wq!保存編輯
3,復制redis01到當前目錄,cp是復制,-r是連帶子目錄一並復制,並起名redis02、redis03、redis04、redis05、redis06
cp –r redis01/ redis02
修改redis02、redis03、redis04、redis05、redis06的端口號為7002、7003、7004、7005、7006
4:把創建集群的ruby腳本復制到redis-cluster目錄下。
進入redis源碼redistar/redis-3.2.9/src去copy:
cp *.rb /usr/local/redis-cluster/ *通配符,src目錄只有一個.rb文件就是redis-trib.rb
查看
:
啟動6個redis實例,一個一個去啟動有點復雜,在redis-cluster目錄創建一個腳本來啟動6個實例:
cd /usr/local/redis-cluster
vim startall.sh就會打開vim編輯器,創建一個空的文本:
:wq!保存腳本,創建成功:
執行./startall.sh 提示permission denied說明權限不足,執行命令chmod 777 startall.sh修改權限
再執行./startall.sh, ps -aux|grep redis查看redis運行情況,6379是之前的redis沒有停止
可以看到端口7001、7002、7003、7004、7005、7006的redis都起來了。
5:創建集群。
基於上邊分割線內的介紹:在redis-cluster目錄下執行以下命令:
./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
[root@lihaoyang /usr/local/redis-cluster]# ./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
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters: 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001 Adding replica 127.0.0.1:7005 to 127.0.0.1:7002 Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
M: b370efb2e0dd8dd09aeee2177099d68c5982a01c 127.0.0.1:7001 slots:0-5460 (5461 slots) master M: 387d8975195982ed96a08cd0d14587bfa68659db 127.0.0.1:7002 slots:5461-10922 (5462 slots) master M: bc46045f41d337e4316230fb40bdfb8c1784d419 127.0.0.1:7003 slots:10923-16383 (5461 slots) master
S: d99c5ba8d944a45d3393a5c84b014446ff16c1e0 127.0.0.1:7004
replicates b370efb2e0dd8dd09aeee2177099d68c5982a01c
S: a3352a69d5f1b69bed39d4ffe636305dc808f891 127.0.0.1:7005
replicates 387d8975195982ed96a08cd0d14587bfa68659db
S: ad04e4409aae4295d1198403330e967285396d05 127.0.0.1:7006
replicates bc46045f41d337e4316230fb40bdfb8c1784d419
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join....
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: b370efb2e0dd8dd09aeee2177099d68c5982a01c 127.0.0.1:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: a3352a69d5f1b69bed39d4ffe636305dc808f891 127.0.0.1:7005
slots: (0 slots) slave
replicates 387d8975195982ed96a08cd0d14587bfa68659db
S: ad04e4409aae4295d1198403330e967285396d05 127.0.0.1:7006
slots: (0 slots) slave
replicates bc46045f41d337e4316230fb40bdfb8c1784d419
M: bc46045f41d337e4316230fb40bdfb8c1784d419 127.0.0.1:7003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: d99c5ba8d944a45d3393a5c84b014446ff16c1e0 127.0.0.1:7004
slots: (0 slots) slave
replicates b370efb2e0dd8dd09aeee2177099d68c5982a01c
M: 387d8975195982ed96a08cd0d14587bfa68659db 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@lihaoyang /usr/local/redis-cluster]#
集群搭建好了
測試集群
[root@lihaoyang /usr/local/redis-cluster]# redis01/redis-cli -h 192.168.25.153 -p 7002 –c
說明:-h+host –p+端口號 –c 是要連接集群,注意坑,不加會報錯的
可以看到連接的是7001的節點,set name的時候計算了存在哪個hash槽上,會跳轉到那個槽對應的節點。
不寫-c的坑:
----------------------先寫到這里,明天在補充,2017-05-25:23:20