Docker部署Redis集群

搭建Docker

? yum -y install docker

從docker庫(kù)獲取redis鏡像

? docker pull redis

創(chuàng)建redis容器(run命令)

創(chuàng)建6個(gè)容器衰齐,3主3從。接下來(lái)先為這6個(gè)容器創(chuàng)建6個(gè)不同的目錄继阻、端口和配置文件耻涛。

# 在 /home 目錄下創(chuàng)建redis-cluster-test 文件夾
? mkdir -p /home/redis-cluster-test
? cd  /home/redis-cluster-test
? vim redis-cluster.conf

# 把下列信息寫入redis-cluster.conf文件中
  port ${PORT}
  cluster-enabled yes
  cluster-config-file nodes.conf
  cluster-node-timeout 5000
  appendonly yes

# 在 /home/redis-cluster-test 目錄下生成conf和data目錄,并生成配置文件
? for port in `seq 6380 6385`; do 
    mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-cluster.conf > ./${port}/conf/redis.conf && mkdir -p ./${port}/data;
  done

# tree命令查看目錄(如果命令不存在瘟檩,執(zhí)行安裝命令:yum -y install tree)
? tree
.
├── 6380
│   ├── conf
│   │   └── redis.conf
│   └── data
├── 6381
│   ├── conf
│   │   └── redis.conf
│   └── data
├── 6382
│   ├── conf
│   │   └── redis.conf
│   └── data
├── 6383
│   ├── conf
│   │   └── redis.conf
│   └── data
├── 6384
│   ├── conf
│   │   └── redis.conf
│   └── data
├── 6385
│   ├── conf
│   │   └── redis.conf
│   └── data
└── redis-cluster.conf

18 directories, 7 files

# 創(chuàng)建6個(gè)redis容器
? for port in `seq 6380 6385`; do 
     docker run --net=host --name=redis-${port} -v `pwd`/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:latest redis-server /usr/local/etc/redis/redis.conf; 
  done

redis-trib.rb啟動(dòng)主從集群

# 如果沒(méi)有ruby抹缕,請(qǐng)執(zhí)行 yum -y install ruby
? gem install redis

# 通過(guò)locate或find命令查找 `redis-trib.rb`文件位置,
? locate redis-trib.rb
  /var/files/redis-3.2.0/src/redis-trib.rb

# 創(chuàng)建軟連接到bin目錄
? ln -s  /var/files/redis-3.2.0/src/redis-trib.rb /usr/local/bin/redis-trib.rb

# 啟動(dòng)集群
? myiplist=''
? for port in `seq 6380 6385 `; do
      myiplist=${myiplist}' '"127.0.0.1:"${port};
  done
? redis-trib.rb create --replicas 1 `echo ${myiplist}`

Redis客戶端測(cè)試

進(jìn)入redis客戶端:redis-cli -c -h ip地址 -p 端口號(hào)

  • -c 參數(shù)為連接集群
  • -p 端口號(hào)6380-6385中的任意一個(gè)皆可
? redis-cli -c -p 6380
127.0.0.1:6380> set say "hello world"
-> Redirected to slot [5885] located at 127.0.0.1:6381
OK
127.0.0.1:6380> set from "China..."
-> Redirected to slot [11836] located at 127.0.0.1:6382
OK

上例中卓研,key為“say”,存入了端口號(hào)為6381的容器睹簇;key為“from”存入端口號(hào)為6382的容器奏赘。

在redis客戶端中,使用infoinfo Replication命令查看某個(gè)容器的主從配置信息

127.0.0.1:6381> info replication
# Replication
role:master // 角色為master 
connected_slaves:1 // 有一個(gè)slave連接
slave0:ip=127.0.0.1,port=6384,state=online,offset=3991,lag=1 // slave的IP太惠、端口磨淌、狀態(tài)、復(fù)制偏移量
master_replid:37b6db251b966f8372d829a60b5847bcf3870bae 
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3991 // 當(dāng)前master記錄的復(fù)制偏移量凿渊。此例中master和slave的offset相同伦糯,說(shuō)明此刻slave已經(jīng)復(fù)制到最新的數(shù)據(jù)。
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3991

非集群方式登陸查看某個(gè)容器存儲(chǔ)的值

# 進(jìn)入6381
? redis-cli -p 6381
127.0.0.1:6383> keys *
1) "say"

# 進(jìn)入6381的slave 6384嗽元,結(jié)果與6381相一致
? redis-cli -p 6384
127.0.0.1:6384> keys *
1) "say"

# 再看下另一個(gè)主容器6382的存儲(chǔ)情況敛纲,與6381、6384 不同
? redis-cli -p 6382
127.0.0.1:6382> keys *
1) "from"

PHP(predis)連接集群測(cè)試(生產(chǎn)中推薦使用phpredis)

下載predis

? wget https://github.com/nrk/predis/archive/v1.0.zip
? unzip v1.0.zip

創(chuàng)建test.php 文件剂癌,寫入下列代碼

<?php
// 連接本地的 Redis 服務(wù)
require 'predis-1.0/autoload.php';
// 可以是集群中的任意一個(gè)IP淤翔,也可以是多個(gè)
$parameters = ['tcp://127.0.0.1:6380', 'tcp://127.0.0.1:6381',];
$options    = ['cluster' => 'redis'];
$redis = new Predis\Client($parameters, $options);
// 為測(cè)試方便,一次多存儲(chǔ)幾個(gè)
for ($i = 0; $i <5; $i++) {
  $x = rand(10,100);
  $key = "k" . $x;
  // 設(shè)置 redis 字符串?dāng)?shù)據(jù)
  $redis->set($key, "say " . $x); 
  // 獲取存儲(chǔ)的數(shù)據(jù)并輸出
  $result = $redis->get($key);  
  // 輸出結(jié)果
  echo "key: " . $key . '  value: ' . $result . "\n";
}

執(zhí)行php文件佩谷,查看結(jié)果

? php test.php
key: k35  value: say 35
key: k33  value: say 33
key: k61  value: say 61
key: k46  value: say 46
key: k49  value: say 49

幾個(gè)命令

# 查看運(yùn)行中的容器
? docker ps 
# 刪除剛創(chuàng)建的redis集群(先stop再rm) --- 批量操作旁壮,謹(jǐn)慎使用
? docker rm $(docker ps -a |grep redis-6| awk '{ print $1}') 

參考文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谐檀,隨后出現(xiàn)的幾起案子抡谐,更是在濱河造成了極大的恐慌,老刑警劉巖桐猬,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麦撵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)免胃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門音五,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人羔沙,你說(shuō)我怎么就攤上這事躺涝。” “怎么了扼雏?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵坚嗜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我诗充,道長(zhǎng)惶傻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任其障,我火速辦了婚禮银室,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘励翼。我一直安慰自己蜈敢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布汽抚。 她就那樣靜靜地躺著抓狭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪造烁。 梳的紋絲不亂的頭發(fā)上否过,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音惭蟋,去河邊找鬼苗桂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛告组,可吹牛的內(nèi)容都是我干的煤伟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼木缝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼便锨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起我碟,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤放案,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后矫俺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吱殉,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掸冤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了考婴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贩虾。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡催烘,死狀恐怖沥阱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伊群,我是刑警寧澤考杉,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站舰始,受9級(jí)特大地震影響崇棠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丸卷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一枕稀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谜嫉,春花似錦萎坷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至住闯,卻和暖如春瓜浸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背比原。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工插佛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人量窘。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓朗涩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親绑改。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谢床,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354