如何用docker搭建redis集群,來讓大佬帶你詳細(xì)了解redis

前言

redis定義

redis是一個key-value存儲系統(tǒng)户誓。和Memcached類似饼灿,它支持存儲的value類型相對更多,包括string(字符串)帝美、list(鏈表)碍彭、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)悼潭。這些數(shù)據(jù)類型都支持push/pop庇忌、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的舰褪。在此基礎(chǔ)上皆疹,redis支持各種不同方式的排序。與memcached一樣占拍,為了保證效率略就,數(shù)據(jù)都是緩存在內(nèi)存中捎迫。區(qū)別的是redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實現(xiàn)了master-slave(主從)同步残制。

Redis 是一個高性能的key-value數(shù)據(jù)庫立砸。?redis的出現(xiàn),很大程度補(bǔ)償了memcached這類key/value存儲的不足初茶,在部 分場合可以對關(guān)系數(shù)據(jù)庫起到很好的補(bǔ)充作用颗祝。它提供了Java,C/C++恼布,C#螺戳,PHP,JavaScript折汞,Perl倔幼,Object-C,Python爽待,Ruby损同,Erlang等客戶端,使用很方便鸟款。

Docker 簡介

Docker 是一個開源的應(yīng)用容器引擎膏燃,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器或Windows 機(jī)器上,也可以實現(xiàn)虛擬化,容器是完全使用沙箱機(jī)制,相互之間不會有任何接口。

一個完整的Docker有以下四個部分組成:DockerClient客戶端何什、Docker Daemon守護(hù)進(jìn)程组哩、Docker Image鏡像、DockerContainer容器

Docker 原理

Docker核心解決的問題是利用LXC來實現(xiàn)類似VM的功能处渣,從而利用更加節(jié)省的硬件資源提供給用戶更多的計算資源伶贰。同VM的方式不同, LXC 其并不是一套硬件虛擬化方法 - 無法歸屬到全虛擬化、部分虛擬化和半虛擬化中的任意一個罐栈,而是一個操作系統(tǒng)級虛擬化方法, 理解起來可能并不像VM那樣直觀黍衙。所以我們從虛擬化到docker要解決的問題出發(fā),看看他是怎么滿足用戶虛擬化需求的荠诬。

docker搭建redis集群

一:搜索redis鏡像们豌,拉去鏡像

wangxuandeMacBook-Air:rediswangxuan$dockersearchredis

NAMEDESCRIPTIONSTARSOFFICIALAUTOMATED

redisRedisisanopensourcekey-valuestorethat…7393[OK]

bitnami/redisBitnamiRedisDockerImage128[OK]

sameersbn/redis77[OK]

grokzen/redis-clusterRediscluster3.0,3.2,4.0&5.058

rediscommander/redis-commanderAlpineimageforredis-commander-Redisman…31[OK]

kubeguide/redis-masterredis-masterwith"HelloWorld!"30

redislabs/redisClusteredin-memorydatabaseenginecompatib…23

oliver006/redis_exporterPrometheusExporterforRedisMetrics.Supp…18

可以看到目前最新版本是5.0,但是我們使用4.0,往往新的版本并不一定好浅妆。

二:拉取鏡像

wangxuandeMacBook-Air:rediswangxuan$dockerpullredis:4.0

4.0:Pullingfromlibrary/redis

b8f262c62ec6:Pullcomplete

93789b5343a5:Pullcomplete

49cdbb315637:Pullcomplete

e244975d5eb1:Pullcomplete

25dca704d939:Pullcomplete

db11ecc9cf34:Pullcomplete

Digest:sha256:615b872e3af387206b62ffe66c1052f1653ed31b3afcfaa292a9244c92f2007a

Status:Downloadednewerimageforredis:4.0

三:配置redis集群

配置集群之前望迎,我們必須下載一個配置文件redis.conf,直接使用

wget-chttp://download.redis.io/redis-stable/redis.conf

下載,我們先介紹一下其中的關(guān)鍵的配置參數(shù)(今天我們配置的是一主兩從的集群)

主配置文件.redis-master.conf

daemonizeyes

pidfile/var/run/redis.pid

bind0.0.0.0

從配置文件redis-slaveof1.conf ,redis-slaveof2.conf

daemonizeyes

pidfile/var/run/redis.pid

slaveofmaster6379

bind0.0.0.0

我們看到slaveof master 6379 這里使用master 有兩個原因

docker容器重啟之后凌外,ip地址會發(fā)生變化辩尊,導(dǎo)致訪問失效問題

還有安全問題的考慮

這里我們也解釋一下bind的這個參數(shù)

默認(rèn)情況下,如果沒有指定bind配置指令康辑,則 Redis 監(jiān)聽來自服務(wù)器上所有可用網(wǎng)絡(luò)接口的連接摄欲〗瘟粒可以使用bind配置指令來監(jiān)聽一個或多個選定的接口,在bind后拼接一個或多個 IP 地址即可胸墙。例如:

bind192.168.1.10010.0.0.1

bind127.0.0.1::1

這里我們把配置的配置bind 127.0.0.1 改成bind 0.0.0.0我注,不然我們的容器將會訪問不通。

三:啟動redis集群

dockerrun-it-v/Users/wangxuan/redis/redis-master.conf:/usr/local/bin/redis.conf--nameredis-masterredis:4.0/bin/bash

dockerrun-it-v/Users/wangxuan/redis/redis-slaveof1.conf:/usr/local/bin/redis.conf--nameredis-slave1--linkredis-master:masterredis:4.0/bin/bash

dockerrun-it-v/Users/wangxuan/redis/redis-slaveof2.conf:/usr/local/bin/redis.conf--nameredis-slave2--linkredis-master:masterredis:4.0/bin/bash

這里我們看-v這個參數(shù)迟隅,這個是因為我們在容器里面修改文件往往不方便但骨,一般容器是沒有vim命令,需要我們自行下載智袭,所以-v參數(shù)用于將宿主機(jī)上的某個目錄掛載到容器中,我們在我們的機(jī)器上直接可以修改配置文件奔缠。

上述命令中使用--link redis-master:master參數(shù),前面提到的redis-slaveof1.conf配置文件中slaveof配置項吼野,這里使用了一個master作為別名校哎,其效果和使用IP一樣(IP地址在/etc/host文件中)

現(xiàn)在我們先運(yùn)行主redis容器

wangxuandeMacBook-Air:rediswangxuan$dockerrun-it-v/Users/wangxuan/redis/redis-master.conf:/usr/local/bin/redis.conf--nameredis-masterredis:4.0/bin/bash

root@9874f9ec818c:/data#redis-server/usr/local/bin/redis.conf

root@9874f9ec818c:/data#redis-cli

127.0.0.1:6379>info

....

#Replication

role:master

connected_slaves:0

master_replid:b435db2264d29c74ddfa6d9b84572f343c03d770

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:0

second_repl_offset:-1

repl_backlog_active:0

repl_backlog_size:1048576

repl_backlog_first_byte_offset:0

repl_backlog_histlen:0

.....

此時我們看到主redis的從節(jié)點是0

我們在啟動一個從redis容器

wangxuandeMacBook-Air:rediswangxuan$dockerrun-it-v/Users/wangxuan/redis/redis-slaveof1.conf:/usr/local/bin/redis.conf--nameredis-slave1--linkredis-master:masterredis:4.0/bin/bash

root@8469ebae122c:/data#redis-server/usr/local/bin/redis.conf

root@8469ebae122c:/data#redis-cli

127.0.0.1:6379>info

#Replication

role:slave

master_host:master

master_port:6379

master_link_status:up

master_last_io_seconds_ago:1

master_sync_in_progress:0

slave_repl_offset:14

slave_priority:100

slave_read_only:1

connected_slaves:0

master_replid:1012f0b993083d3ac250a634997ce86827acd939

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:14

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:1

repl_backlog_histlen:14

發(fā)現(xiàn)此時從節(jié)點的角色role變成了slave. master_host是master

同理在啟動另外一個從節(jié)點

wangxuandeMacBook-Air:~wangxuan$dockerrun-it-v/Users/wangxuan/redis/redis-slaveof2.conf:/usr/local/bin/redis.conf--nameredis-slave2--linkredis-master:masterredis:4.0/bin/bash

root@8d31889d7f46:/data#redis-server/usr/local/bin/redis.conf

root@8d31889d7f46:/data#redis-cli

127.0.0.1:6379>info

...

#Replication

role:slave

master_host:master

master_port:6379

master_link_status:up

master_last_io_seconds_ago:4

master_sync_in_progress:0

slave_repl_offset:308

slave_priority:100

slave_read_only:1

connected_slaves:0

master_replid:1012f0b993083d3ac250a634997ce86827acd939

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:308

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:295

repl_backlog_histlen:14

...

我們現(xiàn)在在看一下主節(jié)點的信息

127.0.0.1:6379>info

...

#Replication

role:master

connected_slaves:2

slave0:ip=172.17.0.3,port=6379,state=online,offset=420,lag=1

slave1:ip=172.17.0.4,port=6379,state=online,offset=434,lag=0

master_replid:1012f0b993083d3ac250a634997ce86827acd939

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:434

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:1

repl_backlog_histlen:434

...

connected_slaves編程了2,上面也記錄了兩個從節(jié)點的ip,port等信息

我們也驗證一下

主節(jié)點

127.0.0.1:6379>setjiepidog

OK

從節(jié)點

127.0.0.1:6379>getjiepi

"dog"

127.0.0.1:6379>setjiepipig

(error)READONLYYoucan'twriteagainstareadonlyslave.

發(fā)現(xiàn)從節(jié)點可以獲取主節(jié)點設(shè)置的值瞳步,說明從節(jié)點把主節(jié)點的數(shù)據(jù)同步了過來闷哆,并且從節(jié)點僅僅只讀。到此docker搭建redis一主兩從集群搭建完成单起。

總結(jié)

Redis是一個遠(yuǎn)程內(nèi)存數(shù)據(jù)庫阳准,它不僅性能強(qiáng)勁,而且還具有復(fù)制特性以及為解決問題而生的獨一-無二的數(shù)據(jù)模型馏臭。Redis 提供了5種不同類型的數(shù)據(jù)結(jié)構(gòu),各式各樣的問題都可以很自然地映射到這些數(shù)據(jù)結(jié)構(gòu)上:Redis的數(shù)據(jù)結(jié)構(gòu)致力于幫助用戶解決問題讼稚,而不會像其他數(shù)據(jù)庫那樣括儒,要求用戶扭曲問題來適應(yīng)數(shù)據(jù)庫。除此之外锐想,通過復(fù)制帮寻、持久化( persistence )和客戶端分片( lint-side sharding )等特性,用戶可以很方便地將Redis 打展成- -個能夠包含數(shù)百GB數(shù)據(jù)赠摇、每秒處理上百萬次請求的系統(tǒng)固逗。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市藕帜,隨后出現(xiàn)的幾起案子烫罩,更是在濱河造成了極大的恐慌,老刑警劉巖洽故,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贝攒,死亡現(xiàn)場離奇詭異,居然都是意外死亡时甚,警方通過查閱死者的電腦和手機(jī)隘弊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門哈踱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梨熙,你說我怎么就攤上這事开镣。” “怎么了咽扇?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵邪财,是天一觀的道長。 經(jīng)常有香客問我肌割,道長卧蜓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任把敞,我火速辦了婚禮弥奸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奋早。我一直安慰自己盛霎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布耽装。 她就那樣靜靜地躺著愤炸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掉奄。 梳的紋絲不亂的頭發(fā)上规个,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音姓建,去河邊找鬼诞仓。 笑死,一個胖子當(dāng)著我的面吹牛速兔,可吹牛的內(nèi)容都是我干的墅拭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涣狗,長吁一口氣:“原來是場噩夢啊……” “哼谍婉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起镀钓,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤穗熬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后丁溅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體死陆,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了措译。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片别凤。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖领虹,靈堂內(nèi)的尸體忽然破棺而出规哪,到底是詐尸還是另有隱情,我是刑警寧澤塌衰,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布诉稍,位于F島的核電站,受9級特大地震影響最疆,放射性物質(zhì)發(fā)生泄漏杯巨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一努酸、第九天 我趴在偏房一處隱蔽的房頂上張望服爷。 院中可真熱鬧,春花似錦获诈、人聲如沸仍源。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笼踩。三九已至,卻和暖如春亡嫌,著一層夾襖步出監(jiān)牢的瞬間嚎于,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工挟冠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留于购,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓圃郊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親女蜈。 傳聞我的和親對象是個殘疾皇子持舆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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

  • 最近公司項目要求Redis集群且高可用,在查詢了一系列文章伪窖,再結(jié)合項目實際情況逸寓,所以采用了這一套高可用集群方案 方...
    Crazy_Coder閱讀 1,078評論 0 4
  • 標(biāo)簽: redis 緩存 主從 哨兵 集群 本文簡單的介紹redis三種模式在linux的安裝部署和數(shù)據(jù)存儲的總結(jié)...
    luhanlin閱讀 4,329評論 0 5
  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)竹伸、高可擴(kuò)展、高可用、大數(shù)據(jù)存儲問題而產(chǎn)生的數(shù)據(jù)庫解決方...
    克魯?shù)吕?/span>閱讀 5,291評論 0 36
  • 為什么要使用redis集群模式勋篓? Redis可以說是內(nèi)存數(shù)據(jù)庫吧享,mysql的數(shù)據(jù)庫是真實存儲在硬盤里的,因此譬嚣,re...
    NoLynn閱讀 238評論 0 1
  • 5/15/2017 7:06:35 PM 縱觀各大組件钢颂,配置文件占據(jù)極其重要的地位“菀可配置化也是當(dāng)下開發(fā)的一流行趨...
    愛做夢的胖子閱讀 4,432評論 0 8