Redis高可用集群搭建最佳實(shí)踐

文件準(zhǔn)備

redis-3.0.6.tar.gz
redis-3.3.0.gem
ruby-2.3.0.tar.gz
zlib-1.2.11.tar.gz

安裝redis

前置工作

在~/soft/下解壓文件

tar -zxvf redis-3.0.6.tar.gz

移動(dòng)到~/

mv redis-3.0.6 ../

安裝

進(jìn)入redis-3.0.6 目錄,進(jìn)行安裝 PREFIX指定安裝目錄

make PREFIX=~/redis-3.0.6 install

安裝成功后备恤,~/redis-3.0.6/src/下會(huì)生成許多腳本墩虹,包括 redis-cli redis-server redis-trib.rb

創(chuàng)建集群目錄

在 ~/ 目錄下新增集群目錄

mkdir redis_cluster

在redis_cluster下新增bin目錄然痊,并復(fù)制~/redis-3.0.6/src下的如下腳本到該目錄下揩瞪,方便運(yùn)維
cp mkreleasehdr.sh redis-benchmark redis-cli redis-server redis-trib.rb ~/redis_cluster/bin

在redis_cluster 新增6個(gè)節(jié)點(diǎn)目錄 7101-7106

mkdir 7101 7102 7103 7104 7105 7106

在7101-7106目錄下新增data 、 logs 、 conf三個(gè)目錄

復(fù)制 ~/redis-3.0.6/conf/redis.conf 到7101-7106的conf目錄下

cp ~/redis-3.0.6/conf/redis.conf ~/redis_cluster/7101/conf ~/redis_cluster/7102/conf ~/redis_cluster/7103/conf ~/redis_cluster/7104/conf ~/redis_cluster/7105/conf ~/redis_cluster/7106/conf

編輯7101/conf下的redis.conf

port 7101
#本主機(jī)地址 
bind 主機(jī)ip
#日志文件
logfile "~/redis_cluster/7101/log/redis-log-7101.log"
#備份數(shù)據(jù)文件
dbfilename dump-7101.rdb
#備份數(shù)據(jù)文件生成目錄
dir ~/redis_cluster/7101/data
#設(shè)置為集群模式
cluster-enabled yes
#設(shè)置為后臺(tái)進(jìn)程
daemonize yes
masterauth passwd123 
requirepass passwd123

依次修改7102-7106/conf/下的redis.conf 只需修改如下信息

#redis節(jié)點(diǎn)端口
port 7102
#本主機(jī)地址 
bind 主機(jī)ip
#日志文件
logfile "~/redis_cluster/7101/log/redis-log-7102.log"
#備份數(shù)據(jù)文件
dbfilename dump-7102.rdb
#備份數(shù)據(jù)文件生成目錄
dir ~/redis_cluster/7102/data

為了方便維護(hù),在~/redis_cluster/bin下新增 start_all.sh 啟動(dòng)所有redis服務(wù)

vim start_all.sh

./redis-server ../7101/conf/redis.conf
./redis-server ../7102/conf/redis.conf
./redis-server ../7103/conf/redis.conf
./redis-server ../7104/conf/redis.conf
./redis-server ../7105/conf/redis.conf
./redis-server ../7106/conf/redis.conf

為了方便維護(hù)昔园,在~/redis_cluster/bin下新增 stop_all.sh 啟動(dòng)所有redis服務(wù)
vim stop_all.sh

# -h x.x.x.x 代表主機(jī)  -p 代表端口  -a 代表密碼
./redis-cli -h x.x.x.x -p 7101 -a 123456  shutdown
./redis-cli -h x.x.x.x -p 7102 -a 123456  shutdown
./redis-cli -h x.x.x.x -p 7103 -a 123456  shutdown
./redis-cli -h x.x.x.x -p 7104 -a 123456  shutdown
./redis-cli -h x.x.x.x -p 7105 -a 123456  shutdown
./redis-cli -h x.x.x.x -p 7106 -a 123456  shutdown

安裝ruby

redis集群啟動(dòng)需要依賴ruby,如果系統(tǒng)沒有默認(rèn)安裝ruby,則需手動(dòng)安裝

前置工作

解壓
tar –zxvf ruby-2.3.0.tar.gz

移動(dòng)到 ~/目錄
mv ruby-2.3.0 ~/

安裝

進(jìn)入~/ruby-2.3.0 安裝–prefix 指定安裝目錄

./configure --prefix=/data/airedis/ruby 
make
make   install

ruby加入環(huán)境變量


image.png

安裝redis-3.3.0.gem

安裝安裝集權(quán)啟動(dòng)腳本依賴redis-3.3.6.gem并炮,類似于java中的jar

進(jìn)入ruby安裝目錄 cd ~/ruby/bin

./gem install --local ~/soft/redis-3.3.0.gem

如果報(bào)錯(cuò) ,則需安裝zlib

ERROR:  Loading command: install (LoadError)
 cannot load such file -- zlib

安裝zlib

前置工作

解壓
tar -zxvf zlib-1.2.11.tar.gz
移動(dòng)到 ~/目錄
mv zlib-1.2.11 ~/

安裝

進(jìn)入~/zlib-1.2.11目錄默刚, –prefix指定安裝路徑

./configure    --prefix=~/ruby/zlib
make
make install

ruby添加zlib依賴

給ruby添加zlib依賴,進(jìn)入~/ruby/bin目錄渣触,執(zhí)行如下命令 羡棵,其中-with-zlib-dir 指定zlib安裝目錄

~/ruby/bin/ruby extconf.rb --with-zlib-dir=~/ruby/zlib
make
make install

啟動(dòng)redis集群

先啟動(dòng)所有redis節(jié)點(diǎn)服務(wù)

進(jìn)入~/redis_cluster/bin 目錄,執(zhí)行start_all.sh
./start_all.sh

創(chuàng)建集群

進(jìn)入~/redis_cluster/bin目錄
./redis-trib.rb create --replicas 1 ip地址:7101 ip地址:7102 ip地址:7103 ip地址:7104 ip地址:7105 ip地址:7106

如果報(bào)錯(cuò)

redis  [ERR] Sorry, can't connect to node ip地址:7101

是因?yàn)閞edis設(shè)置了密碼,單機(jī)連接都OK嗅钻,但是創(chuàng)建集群就報(bào)錯(cuò)Sorry, can’t connect to node

需要修改~/ruby/lib/ruby/gems/2.3.0/gems/redis-3.3.0/lib/redis/client.rb 文件

可能大家路徑不一樣 則查找 一下 find ~ -name client.rb

修改 vim client.rb 的password

DEFAULTS = {
 :url => lambda { ENV["REDIS_URL"] },
 :scheme => "redis",
 :host => "127.0.0.1",
 :port => 6379,
 :path => nil,
 :timeout => 5.0,
 :password => "xxxxxx",
 :db => 0,
 :driver => nil,
 :id => nil,
 :tcp_keepalive => 0,
 :reconnect_attempts => 1,
 :inherit_socket => false

集群創(chuàng)建成功信息如下:

Creating cluster
Performing hash slots allocation on 6 nodes...
Using 3 masters:
x.x.x.x:7101
x.x.x.x:7102
x.x.x.x:7103
Adding replica x.x.x.x:7104 to x.x.x.x:7101
Adding replica x.x.x.x:7105 to x.x.x.x:7102
Adding replica x.x.x.x:7106 to x.x.x.x:7103
M: e54b115b0d2a066544cdf1c436b0e45e5e9eaeb3 x.x.x.x:7101
slots:0-5460 (5461 slots) master
M: a70222aaec8bf3544b9f132832d8c3e532aac0bc x.x.x.x:7102
slots:5461-10922 (5462 slots) master
M: 2e03fbf49b2a7e1c4ca5f8499aa1f5c6488121d4 x.x.x.x:7103
slots:10923-16383 (5461 slots) master
S: ec24032f700f18902fea6047c61a08900648a36d x.x.x.x:7104
replicates e54b115b0d2a066544cdf1c436b0e45e5e9eaeb3
S: 62c8478c5ec26fe588c0bf5a882ef99f6687717f x.x.x.x:7105
replicates a70222aaec8bf3544b9f132832d8c3e532aac0bc
S: ec2cc8f1c9eee20f1231e2885b384d95689948d9 x.x.x.x:7106
replicates 2e03fbf49b2a7e1c4ca5f8499aa1f5c6488121d4
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 x.x.x.x:7101)
M: e54b115b0d2a066544cdf1c436b0e45e5e9eaeb3 x.x.x.x:7101
slots:0-5460 (5461 slots) master
M: a70222aaec8bf3544b9f132832d8c3e532aac0bc x.x.x.x:7102
slots:5461-10922 (5462 slots) master
M: 2e03fbf49b2a7e1c4ca5f8499aa1f5c6488121d4 x.x.x.x:7103
slots:10923-16383 (5461 slots) master
M: ec24032f700f18902fea6047c61a08900648a36d x.x.x.x:7104
slots: (0 slots) master
replicates e54b115b0d2a066544cdf1c436b0e45e5e9eaeb3
M: 62c8478c5ec26fe588c0bf5a882ef99f6687717f x.x.x.x:7105
slots: (0 slots) master
replicates a70222aaec8bf3544b9f132832d8c3e532aac0bc
M: ec2cc8f1c9eee20f1231e2885b384d95689948d9 x.x.x.x:7106
slots: (0 slots) master
replicates 2e03fbf49b2a7e1c4ca5f8499aa1f5c6488121d4
[OK] All nodes agree about slots configuration.
Check for open slots...
Check slots coverage...
[OK] All 16384 slots covered.

查看集群信息

~/redis_cluster/bin$./redis-cli -h x.x.x.x -p 7101 -c -a 123456 ,其中 -a 123456 代表設(shè)置的密碼

ip地址:7101> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:590
cluster_stats_messages_received:590

查看具體集群節(jié)點(diǎn)信息

x.x.x.x:7101> cluster nodes

ec2cc8f1c9eee20f1231e2885b384d95689948d9 x.x.x.x:7106 slave 2e03fbf49b2a7e1c4ca5f8499aa1f5c6488121d4 0 1569570540713 6 connected
a70222aaec8bf3544b9f132832d8c3e532aac0bc x.x.x.x:7102 master - 0 1569570546721 2 connected 5461-10922
ec24032f700f18902fea6047c61a08900648a36d x.x.x.x:7104 slave e54b115b0d2a066544cdf1c436b0e45e5e9eaeb3 0 1569570545719 4 connected
2e03fbf49b2a7e1c4ca5f8499aa1f5c6488121d4 x.x.x.x:7103 master - 0 1569570543716 3 connected 10923-16383
e54b115b0d2a066544cdf1c436b0e45e5e9eaeb3 x.x.x.x:7101 myself,master - 0 0 1 connected 0-5460
62c8478c5ec26fe588c0bf5a882ef99f6687717f x.x.x.x:7105 slave a70222aaec8bf3544b9f132832d8c3e532aac0bc 0 1569570544717 5 connected

調(diào)整主從節(jié)點(diǎn)復(fù)制從屬關(guān)系

隨機(jī)分配主從節(jié)點(diǎn)復(fù)制皂冰,如果是同臺(tái)主機(jī)店展,需要調(diào)整到不同的主機(jī)

調(diào)整方法為:7006更改隸屬關(guān)系時(shí),直接登錄指定要更改隸屬關(guān)系的IP秃流、端口

-a 123456 表示密碼 -c表示集群登錄

./redis-cli -c -h ip地址 -p 7006 -a 123456

直接指定新的master節(jié)點(diǎn)的ID
cluster replicate e54b115b0d2a066544cdf1c436b0e45e5e9eaeb3

1569576145101

上圖原本7106從節(jié)點(diǎn)從7103主節(jié)點(diǎn)復(fù)制數(shù)據(jù)

修改為從7101主節(jié)點(diǎn)復(fù)制數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赂蕴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舶胀,更是在濱河造成了極大的恐慌概说,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嚣伐,死亡現(xiàn)場離奇詭異糖赔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)轩端,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門放典,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人基茵,你說我怎么就攤上這事奋构。” “怎么了拱层?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵弥臼,是天一觀的道長。 經(jīng)常有香客問我根灯,道長径缅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任箱吕,我火速辦了婚禮芥驳,結(jié)果婚禮上柿冲,老公的妹妹穿的比我還像新娘茬高。我一直安慰自己,他們只是感情好假抄,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布怎栽。 她就那樣靜靜地躺著,像睡著了一般宿饱。 火紅的嫁衣襯著肌膚如雪熏瞄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天谬以,我揣著相機(jī)與錄音强饮,去河邊找鬼。 笑死为黎,一個(gè)胖子當(dāng)著我的面吹牛邮丰,可吹牛的內(nèi)容都是我干的行您。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼剪廉,長吁一口氣:“原來是場噩夢啊……” “哼娃循!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起斗蒋,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤捌斧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后泉沾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捞蚂,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年跷究,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了洞难。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡揭朝,死狀恐怖队贱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情潭袱,我是刑警寧澤柱嫌,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站屯换,受9級特大地震影響编丘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜彤悔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一嘉抓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晕窑,春花似錦抑片、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疾牲,卻和暖如春植捎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阳柔。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工焰枢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓济锄,卻偏偏與公主長得像枫匾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子拟淮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容