LINUX安装REDIS集群
linux安裝單機(jī)版redis已經(jīng)在另一篇文章說過了,下邊來搞集群,環(huán)境是新浪云服務(wù)器:
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環(huán)境。
先瞅瞅在哪:進(jìn)入到redis的源代碼目錄,就可以看到redis-trib.rb腳本
正文,一:安裝ruby環(huán)境:(前提條件)
上文已經(jīng)說了,redis集群是用的ruby腳本,所以要想執(zhí)行該腳本,需要ruby環(huán)境。
? 安裝ruby環(huán)境:
yum install ruby
yum install rubygems ? ? ?(ruby包的管理器,用來下載ruby的包)
顯示Nothing todo,說明服務(wù)器已經(jīng)安裝了ruby。
二:安裝ruby包redis-3.3.0.gem
redis-trib.rb的運(yùn)行需要的ruby包,正如我們的java程序需要的jar包一樣。
這個包和redis版本不是非得匹配,只要支持就行,我在網(wǎng)上找了個和redis -3.2.9版本接近的3.3.0版本。切換到redistar目錄,用secureCRT的rz命令redis-3.3.0.gem上傳到redistar目錄,這個包安裝到哪都行,只是提供一個環(huán)境而已。
用的secureCRT的rz命令上傳到服務(wù)器,進(jìn)入到redistar目錄,執(zhí)行rz命令,即可上傳文件。
執(zhí)行g(shù)em install redis-3.0.0.gem命令安裝。
安裝完成:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
這里是介紹性東西:
進(jìn)入到redis的src目錄,用ll? *.rb找到redis-trib.rb文件,
執(zhí)行命令./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:portinfo host:portfix 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_idset-timeout host:port millisecondscall host:port command arg arg .. argimport host:port--from <arg>--copy--replacehelp (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?:創(chuàng)建集群
- 2、?check?:檢查集群
- 3、?info?:查看集群信息
- 4、?fix?:修復(fù)集群
- 5、?reshard?:在線遷移slot
- 6、?rebalance?:平衡集群節(jié)點(diǎn)slot數(shù)量
- 7、?add-node?:將新節(jié)點(diǎn)加入集群
- 8、?del-node?:從集群中刪除節(jié)點(diǎn)
- 9、?set-timeout?:設(shè)置集群節(jié)點(diǎn)間心跳連接的超時時間
- 10、?call?:在集群全部節(jié)點(diǎn)上執(zhí)行命令
- 11、?import?:將外部redis數(shù)據(jù)導(dǎo)入集群
- redis-trib.rb主要有兩個類:?ClusterNode?和?RedisTrib?。?ClusterNode?保存了每個節(jié)點(diǎn)的信息,?RedisTrib?則是redis-trib.rb各個功能的實現(xiàn)。
- ++++++++++++++++++++++++++++++++++++++++
暫且只關(guān)注創(chuàng)建集群的功能。先簡單介紹下redis-trib.rb腳本的使用,以create為例:
?
create host1:port1 ... hostN:portN--replicas <arg>?
host1:port1 ... hostN:portN?表示子參數(shù),這個必須在可選參數(shù)之后,?--replicas <arg>?是可選參數(shù),帶?的表示后面必須填寫一個參數(shù),像?--slave?這樣,后面就不帶參數(shù),掌握了這個基本規(guī)則,就能從help命令中獲得redis-trib.rb的使用方法。
?
?例子:create創(chuàng)建集群
?create命令可選replicas參數(shù),replicas表示需要有幾個slave。
?有一個slave的集群的創(chuàng)建命令如下:
$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?
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
三:搭建我們的集群:
?
集群中有三個節(jié)點(diǎn)的集群,每個節(jié)點(diǎn)有一主一備。需要6臺虛擬機(jī)。
?
搭建一個偽分布式的集群,使用6個redis實例來模擬。
1,在user/local 下創(chuàng)建redis-cluster目錄:
?mkdir redis-cluster?
在創(chuàng)建redis01目錄
進(jìn)入usr/local/redis,把redis-cli、redis-server、redis.conf復(fù)制到/usr/local/redis-cluster/redis01目錄
?查看:
說明:這里安裝redis單機(jī)版的時候,只用了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單機(jī)版,還會有其他幾個文件在/usr/local/redis目錄,至于區(qū)別用途還不很清楚。
第一步:創(chuàng)建6個redis實例,端口號從7001~7006
第二步:修改redis的配置文件,后端啟動daenonize改為yes是之前安裝單機(jī)版已經(jīng)做過的。
1、? 修改端口號,進(jìn)入vim編輯模式后,非insert模式下(insert了按esc即可退出)輸入/port 回車可快速定位
2,打開cluster-enable前面的注釋。:wq!保存編輯
?
3,復(fù)制redis01到當(dāng)前目錄,cp是復(fù)制,-r是連帶子目錄一并復(fù)制,并起名redis02、redis03、redis04、redis05、redis06
?cp –r redis01/? redis02
修改redis02、redis03、redis04、redis05、redis06的端口號為7002、7003、7004、7005、7006
4:把創(chuàng)建集群的ruby腳本復(fù)制到redis-cluster目錄下。
進(jìn)入redis源碼redistar/redis-3.2.9/src去copy:
cp *.rb /usr/local/redis-cluster/ ? ?*通配符,src目錄只有一個.rb文件就是redis-trib.rb
查看
:
啟動6個redis實例,一個一個去啟動有點(diǎn)復(fù)雜,在redis-cluster目錄創(chuàng)建一個腳本來啟動6個實例:
cd /usr/local/redis-cluster
vim startall.sh就會打開vim編輯器,創(chuàng)建一個空的文本:
?
:wq!保存腳本,創(chuàng)建成功:
執(zhí)行./startall.sh 提示permission denied說明權(quán)限不足,執(zhí)行命令chmod 777 startall.sh修改權(quán)限
再執(zhí)行./startall.sh,? ps? -aux|grep redis查看redis運(yùn)行情況,6379是之前的redis沒有停止
可以看到端口7001、7002、7003、7004、7005、7006的redis都起來了。
5:創(chuàng)建集群。
?基于上邊分割線內(nèi)的介紹:在redis-cluster目錄下執(zhí)行以下命令:
./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:7001slots:0-5460 (5461 slots) master M: 387d8975195982ed96a08cd0d14587bfa68659db 127.0.0.1:7002slots:5461-10922 (5462 slots) master M: bc46045f41d337e4316230fb40bdfb8c1784d419 127.0.0.1:7003slots:10923-16383 (5461 slots) master S: d99c5ba8d944a45d3393a5c84b014446ff16c1e0 127.0.0.1:7004replicates b370efb2e0dd8dd09aeee2177099d68c5982a01c S: a3352a69d5f1b69bed39d4ffe636305dc808f891 127.0.0.1:7005replicates 387d8975195982ed96a08cd0d14587bfa68659db S: ad04e4409aae4295d1198403330e967285396d05 127.0.0.1:7006replicates 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:7001slots:0-5460 (5461 slots) master1 additional replica(s) S: a3352a69d5f1b69bed39d4ffe636305dc808f891 127.0.0.1:7005slots: (0 slots) slavereplicates 387d8975195982ed96a08cd0d14587bfa68659db S: ad04e4409aae4295d1198403330e967285396d05 127.0.0.1:7006slots: (0 slots) slavereplicates bc46045f41d337e4316230fb40bdfb8c1784d419 M: bc46045f41d337e4316230fb40bdfb8c1784d419 127.0.0.1:7003slots:10923-16383 (5461 slots) master1 additional replica(s) S: d99c5ba8d944a45d3393a5c84b014446ff16c1e0 127.0.0.1:7004slots: (0 slots) slavereplicates b370efb2e0dd8dd09aeee2177099d68c5982a01c M: 387d8975195982ed96a08cd0d14587bfa68659db 127.0.0.1:7002slots:5461-10922 (5462 slots) master1 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的節(jié)點(diǎn),set? name的時候計算了存在哪個hash槽上,會跳轉(zhuǎn)到那個槽對應(yīng)的節(jié)點(diǎn)。
不寫-c的坑:
----------------------先寫到這里,明天在補(bǔ)充,2017-05-25:23:20
?
?
首先,我們來看一下創(chuàng)建集群命令中 --replicas 1,這個代表什么意思呢?1其實代表的是一個比例,就是主節(jié)點(diǎn)數(shù)/從節(jié)點(diǎn)數(shù)的比例。那么想一想,在創(chuàng)建集群的時候,哪些節(jié)點(diǎn)是主節(jié)點(diǎn)呢?哪些節(jié)點(diǎn)是從節(jié)點(diǎn)呢?答案是將按照命令中IP:PORT的順序,先是3個主節(jié)點(diǎn),然后是3個從節(jié)點(diǎn)。這一點(diǎn)可以通過上面的2張圖片印證。
其次,注意到圖中slot的概念。slot對于Redis集群而言,就是一個存放數(shù)據(jù)的地方,就是一個槽。對于每一個Master而言,會存在一個slot的范圍,而Slave則沒有。在Redis集群中,依然是Master可以讀、寫,而Slave只讀。數(shù)據(jù)的寫入,實際上是分布的存儲在slot中,這和以前1.X的主從模式是不一樣的(主從模式下Master/Slave數(shù)據(jù)存儲是完全一致的),因為Redis集群中3臺Master的數(shù)據(jù)存儲并不一樣。這一點(diǎn)將在后續(xù)的實驗中得到驗證。
?
第五步:驗證Redis集群搭建是否成功
到這里,Redis集群的搭建就完畢了,See U~
?
這種方式必須要3個主節(jié)點(diǎn)。
[root@VM_0_13_centos redis-cluster]# ./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 >>> Creating cluster *** ERROR: Invalid configuration for cluster creation. *** Redis Cluster requires at least 3 master nodes. *** This is not possible with 2 nodes and 1 replicas per node. *** At least 6 nodes are required.?
總結(jié)
以上是生活随笔為你收集整理的LINUX安装REDIS集群的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 结队作业,小学生3年级数学题出题器
- 下一篇: 数据运营者的福音:海量数据处理利器Gre