docker簡易搭建Redis快取記憶體叢集
docker簡易搭建Redis快取記憶體叢集
寫在前面:為什麼要用Redis?快取記憶體利用記憶體儲存資料,讀寫速度遠超硬碟。快取記憶體可以減少I/O操作,降低I/O壓力。最大10萬次/秒讀寫。例如搶紅包案例:請求熱資料 可以存在快取記憶體,請求普通訊息存在MySQL。
*注:由於Redis叢集對資料是分片儲存,即會將資料進行切分,儲存在不同的節點上,一旦節點丟失,就會損失這部分資料,故也需要採用主從同步的方式。
Redis叢集中應包含奇數個Master,至少應該含有3個Master。當節點掛了很多,能保證能從中進行選舉。*
第一步 安裝Redis映象,並重命名
在centos視窗中,執行如下命令:
docker pull yyyyttttwwww/redis
docker tag yyyyttttwwww/redis redis
第二步 建立內部網段
在centos視窗中,執行如下命令:
docker network create --subnet=172.19.0.0/16 net2
第三步 執行Redis容器
在centos視窗中,執行如下命令:
docker run -it -d --name redis1 -v /usr/local/src/redis/redis.conf:/usr/redis/redis.conf -p 5001:6379 --net=net2 --ip 172.19 .0.2 redis bash
第四步 進入容器並配置啟動redis節點
1.進入Redis容器,在centos視窗中,執行如下命令:
docker exec -it redis1 bash
2.配置Redis節點
redis預設叢集是不開啟的。修改如下/usr/redis/redis.conf配置檔案:
daemonize yes #以後臺程序執行 cluster-enabled yes #開啟叢集 cluster-config-file nodes.conf #叢集配置檔案 cluster-node-timeout 15000 #超時時間 appendonly yes #開啟AOF模式
修改配置完成後,進入到/usr/redis/src目錄,啟動redis,在centos視窗中執行如下命令:
cd /usr/redis/src
./redis-server ../redis.conf
其他節點請按照上面操作(步驟:1啟動容器,2進入容器,3啟動redis),啟動容器命令如下:
docker run -it -d --name redis2 -v /usr/local/src/redis/redis.conf:/usr/redis/redis.conf -p 5002:6379 --net=net2 --ip 172.19.0.3 redis bash
docker run -it -d --name redis3 -v /usr/local/src/redis/redis.conf:/usr/redis/redis.conf -p 5003:6379 --net=net2 --ip 172.19.0.4 redis bash
docker run -it -d --name redis4 -v /usr/local/src/redis/redis.conf:/usr/redis/redis.conf -p 5004:6379 --net=net2 --ip 172.19.0.5 redis bash
docker run -it -d --name redis5 -v /usr/local/src/redis/redis.conf:/usr/redis/redis.conf -p 5005:6379 --net=net2 --ip 172.19.0.6 redis bash
docker run -it -d --name redis6 -v /usr/local/src/redis/redis.conf:/usr/redis/redis.conf -p 5006:6379 --net=net2 --ip 172.19.0.7 redis bash
第五步 建立redis叢集
在redis1容器中,執行如下命令
mkdir /usr/redis/cluster
cp /usr/redis/src/redis-trib.rb /usr/redis/cluster/
cd /usr/redis/cluster
./redis-trib.rb create --replicas 1 172.19.0.2:6379 172.19.0.3:6379 172.19.0.4:6379 172.19.0.5:6379 172.19.0.6:6379 172.19.0.7:6379
注 –replicas 1 表示為每個主節點建立從節點。在執行./redis-trib.rb create命令時中間過程需要輸入 yes
第六步 驗證檢視redis叢集
在node1容器中,進入/usr/redis/src目錄中,執行如下命令,進行連線叢集,也可通過cluster nodes 命令檢視叢集資訊:
[email protected]:/usr/redis/src# ./redis-cli -c
127.0.0.1:6379> set a 123
-> Redirected to slot [15495] located at 172.19.0.4:6379
OK
172.19.0.4:6379> get a
"123"
172.19.0.4:6379> cluster nodes
bb790ba1472498084520057dea49cf626c4b6cab 172.19.0.5:6379 slave 07fac3f635c8e3d83956cb01dc84528588160721 0 1530673095732 4 connected
c80db7aade99d68559d6270ee086bb75b07be4f6 172.19.0.4:6379 myself,master - 0 0 3 connected 10923-16383
b1d17d23130f4f21256ab35393dc05448b0756c0 172.19.0.6:6379 slave c31032354c6a26c0886a0b6968a290ae162ec547 0 1530673101276 5 connected
055be83647f422da460d2da69257b0c0f2b83861 172.19.0.7:6379 slave c80db7aade99d68559d6270ee086bb75b07be4f6 0 1530673098757 6 connected
c31032354c6a26c0886a0b6968a290ae162ec547 172.19.0.3:6379 master - 0 1530673100772 2 connected 5461-10922
07fac3f635c8e3d83956cb01dc84528588160721 172.19.0.2:6379 master - 0 1530673101778 1 connected 0-5460
讀者也可進入其他redis容器,進行驗證,例如進入redis5容器:
[[email protected] ~]# docker exec -it redis5 bash
[email protected]:/# cd /usr/redis/src/
[email protected]:/usr/redis/src# ./redis-cli -c
127.0.0.1:6379> cluster nodes
bb790ba1472498084520057dea49cf626c4b6cab 172.19.0.5:6379 slave 07fac3f635c8e3d83956cb01dc84528588160721 0 1530673917656 4 connected
b1d17d23130f4f21256ab35393dc05448b0756c0 172.19.0.6:6379 myself,slave c31032354c6a26c0886a0b6968a290ae162ec547 0 0 5 connected
07fac3f635c8e3d83956cb01dc84528588160721 172.19.0.2:6379 master - 0 1530673916647 1 connected 0-5460
c80db7aade99d68559d6270ee086bb75b07be4f6 172.19.0.4:6379 master - 0 1530673912617 3 connected 10923-16383
055be83647f422da460d2da69257b0c0f2b83861 172.19.0.7:6379 slave c80db7aade99d68559d6270ee086bb75b07be4f6 0 1530673914628 6 connected
c31032354c6a26c0886a0b6968a290ae162ec547 172.19.0.3:6379 master - 0 1530673911610 2 connected 5461-10922
127.0.0.1:6379> get a
-> Redirected to slot [15495] located at 172.19.0.4:6379
"123"
最後讀者可以停止某個節點,看它對應的節點是否變成了主節點(讀者請自行驗證)。
附錄:
redis叢集基於redis-trib實現,但不方便建立管理叢集,網上已有人基於ruby編寫了redis-trib.rb,簡易的實現方便管理reids叢集。由於 yyyyttttwwww/redis 已經整合該redis-trib.rb環境,教程上面就不涉及安裝教程。
如有興趣對redis-trib.rb感興趣,可通過下方連結瞭解原始碼。redis整合redis-trib.rb環境讀者請自行實現。
在某個redis容器中 執行如下幾條命令,整合ruby環境:
apt-get install ruby
apt-get install rubygems
gem install redis
redis-trib.rb 檔案地址:https://fossies.org/linux/redis/src/redis-trib.rb
本人已上傳到百度網盤中,讀者可自行下載。網盤地址:https://pan.baidu.com/s/1DuNrBv7jdUflVkNYGgRe-w
redis圖形工具(redisDesktop):https://redisdesktop.com/download