新聞中心
環(huán)境:

成都創(chuàng)新互聯(lián)公司主營(yíng)宕昌網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件開(kāi)發(fā)公司,宕昌h5成都微信小程序搭建,宕昌網(wǎng)站營(yíng)銷推廣歡迎宕昌等地區(qū)企業(yè)咨詢
centos 6.7
Redis 3.0.3
3臺(tái)虛擬機(jī),IP分別是server1:192.168.1.1 server2:192.168.1.2 server3: 192.168.1.3
(因redis機(jī)器最少要有3主3從,這里就用3臺(tái)虛擬機(jī)來(lái)方便區(qū)分,實(shí)在沒(méi)機(jī)器的可以在1臺(tái)機(jī)上開(kāi)6個(gè)節(jié)點(diǎn))
拿到機(jī)器后,首先把環(huán)境弄好
yum groupinstall "Development tools" -y yum install wget -y
首先安裝redis
cd /usr/local/src/ wget http://download.redis.io/releases/redis-3.0.3.tar.gz tar -zxvf redis-3.0.3.tar.gz
解壓出來(lái)后要到目錄里面編譯安裝
cd redis-3.0.3 make && make install
在這里,可能會(huì)出現(xiàn)如下錯(cuò)誤:(如沒(méi)有,請(qǐng)略過(guò))
make[1]: Entering directory `/redis/src'
CC adlist.o
In file included from adlist.c:34:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/redis/src'
make: *** [all] Error 2
原因是沒(méi)有安裝jemalloc內(nèi)存分配器,可以安裝jemalloc 或 直接 輸入make MALLOC=libc && make install
安裝好redis后就是要?jiǎng)?chuàng)建節(jié)點(diǎn)了,3主3從總共6個(gè)
以server1為例
首先創(chuàng)建redis集群的目錄
cd /usr/local mkdir redis cd ./redis
然后把剛才已經(jīng)編譯好的redis包復(fù)制過(guò)來(lái)
cp -r /usr/local/src/redis-3.0.3 /usr/local/redis/ && mv /usr/local/redis/redis-3.0.3 7000 #這里以7000 7001 端口為例,為方便管理把文件夾以端口號(hào)命名 cp -r /usr/local/src/redis-3.0.3 /usr/local/redis/ && mv /usr/local/redis/redis-3.0.3 7001
此步驟分別在其余的2臺(tái)機(jī)子上重復(fù)一遍,那么redis的6個(gè)節(jié)點(diǎn)就算簡(jiǎn)歷完畢。
接下來(lái)要做的就是修改各個(gè)節(jié)點(diǎn)的配置文件
以7000節(jié)點(diǎn)為例:
cd /usr/local/redis/7000 vi redis.conf #主要修改一下這幾個(gè)參數(shù) daemonize yes #后臺(tái)運(yùn)行redis pidfile /var/run/redis_7000.pid #pidfile文件對(duì)應(yīng)7000 port 7000 #監(jiān)聽(tīng)的端口號(hào) cluster-enabled yes #開(kāi)啟集群,這個(gè)原本有的把注釋#去掉就好了 cluster-config-file nodes.conf #集群的配置 配置文件首次啟動(dòng)自動(dòng)生成 cluster-node-timeout 5000 #請(qǐng)求超時(shí)的時(shí)間 appendonly yes #aof日志開(kāi)啟,按需開(kāi)啟,每次寫操作都會(huì)記錄成1條日志 bind 192.168.1.1 #這里要改成server的IP,不改的話后續(xù)會(huì)報(bào)錯(cuò)
其他節(jié)點(diǎn)的配置只需把pidfile對(duì)應(yīng)的文件和端口號(hào)改下就好了,一般建議7000 7001 7002 這樣一直寫上去
當(dāng)所有的節(jié)點(diǎn)都配置好后,就啟動(dòng)redis了
cd /usr/local/redis/7000 redis-server ./redis.conf
#這里是先進(jìn)到7000節(jié)點(diǎn)的目錄再開(kāi)啟,因?yàn)槲野l(fā)現(xiàn)如果直接輸入 redis-server /usr/local/redis/7000/redis.conf的話,自動(dòng)生成的appendonly.aof nodes.conf文件會(huì)在當(dāng)前目錄下,而不是在對(duì)應(yīng)節(jié)點(diǎn)的目錄下。大家可以試驗(yàn)一下。
啟動(dòng)完成后,循例檢查下。
ps aux |grep redis netstat -an |grep 7000/7001
正常情況下是可以看到7000 7001 17000 17001端口的
7000,7001是用于客戶端訪問(wèn),17000,17001是用于集群內(nèi)部節(jié)點(diǎn)之間的訪問(wèn)的
當(dāng)所有的節(jié)點(diǎn)都配置并啟動(dòng)完之后,我們要做的就是利用這些節(jié)點(diǎn)來(lái)創(chuàng)建集群
官方提供了一個(gè)專門的工具 redis-trib.rb
配合使用redis-trib.rb還要安裝ruby
yum -y install ruby ruby-devel rubygems rpm-build
裝好后再用gem命令來(lái)安裝redis接口,至于這個(gè)gem的話我也不大了解,
gem install redis
在3臺(tái)server上都安裝好后,就可以開(kāi)始創(chuàng)建集群了
/usr/local/redis/7000/src/redis-trib.rb
運(yùn)行redis-trib.rb后就可以看到redis-trib.rb的具體用法,如下:
Usage: redis-tribreshard host:port --to --yes --slots --from check host:port call host:port command arg arg .. arg set-timeout host:port milliseconds add-node new_host:new_port existing_host:existing_port --master-id --slave del-node host:port node_id fix host:port import host:port --from help (show this help) create host1:port1 ... hostN:portN --replicas For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
那么我們這里用的是create 新建集群
/usr/local/redis/7000/src/redis-trib.rb create --replicas 1 192.168.1.1:7000 192.168.1.2:7000 192.168.1.3:7000 192.168.1.1:7001 192.168.1.2:7001 192.168.1.3:7001
這里講一下,使用iptables或者其他防火墻的話一定要把端口開(kāi)放出來(lái),否則會(huì)創(chuàng)建失敗。
命令一定要以IP:端口形式來(lái)輸入,千萬(wàn)別用域名。
參數(shù) --replicas 1 是自動(dòng)為每臺(tái)master配置1個(gè)slave 上面有6個(gè)節(jié)點(diǎn) 會(huì)按規(guī)則生成3個(gè)主節(jié)點(diǎn)(master)3個(gè)從節(jié)點(diǎn)(slave)
注意:前面3個(gè)IP redis會(huì)默認(rèn)他為主節(jié)點(diǎn)。
輸入完命令后會(huì)提示
Can I set the above configuration? (type 'yes' to accept):
這里輸入yes 就可以了
然后就會(huì)彈出如下信息:
>>> Performing Cluster Check (using node 127.0.0.1:7000) M: 5ca195e70a7d6d3b2756f06bfd5bb62f133ad236 127.0.0.1:7000 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: a79ab5c1558f64d37efb6ad3e775bcd32bee70fc 192.168.20.186:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) S: ebbc18dca8215930cf6430c39671b7660ca1de0f 192.168.20.187:7001 slots: (0 slots) slave replicates 5ca195e70a7d6d3b2756f06bfd5bb62f133ad236 S: c195573125f0d0a87b0f1076dd7de392aa90a5f3 192.168.20.186:7001 slots: (0 slots) slave replicates 0e590350177d69f337dc88188545dfe3c4c75742 M: 0e590350177d69f337dc88188545dfe3c4c75742 192.168.20.184:7000 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: b29210a818e15b1097422933163e92722c624ad8 192.168.20.184:7001 slots: (0 slots) slave replicates a79ab5c1558f64d37efb6ad3e775bcd32bee70fc [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
這樣子就可以了。至于測(cè)試的話可以從其他文章里面找到
附:
#redis 常見(jiàn)集群報(bào)錯(cuò)處理
1.配置完所有主節(jié)點(diǎn)后,報(bào)" ERR Invalid node address specified"
由于redis-trib.rb 對(duì)域名或主機(jī)名支持不好,故在創(chuàng)建集群的時(shí)候要使用ip:port的方式
redis-trib.rb create ip1:port1 ip2:port2 ip3:port3
2.創(chuàng)建集群時(shí)報(bào)某個(gè)err slot 0 is already busy (redis::commanderror)
這是由于之間創(chuàng)建集群沒(méi)有成功,需要將nodes.conf和dir里面的文件全部刪除(注意不要?jiǎng)h除了redis.conf)
3.創(chuàng)建集群時(shí)一直處于"Waiting for the cluster to join...................................."的狀態(tài)
這個(gè)問(wèn)題原因不知,但解決方法是在redis.conf文件中把bind 127.0.0.1本地環(huán)回口改為物理接口.
4.安裝ruby redis時(shí)長(zhǎng)時(shí)間沒(méi)響應(yīng)
這是由于大家知道的網(wǎng)絡(luò)原因,解決辦法是改ruby源(請(qǐng)自行baidu)或手動(dòng)安裝
網(wǎng)站標(biāo)題:RedisCluster集群配置簡(jiǎn)述
當(dāng)前鏈接:http://m.fisionsoft.com.cn/article/dpedhcs.html


咨詢
建站咨詢
