1. 程式人生 > >docker簡易搭建Redis快取記憶體叢集

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