docker下redis集羣搭建

docker 下redis集羣配置:html

1.獲取官方redis鏡像:node

docker pull redis:redis

2.編輯配置文件:配置文件可自行處理docker

vi redis1.congbash

bind 0.0.0.0 #綁定地址
protected-mode yes
port 6392 #端口
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no #守護進程
supervised no
pidfile /var/run/redis_6379.pid網絡

rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
cluster-enabled yes #啓用集羣
cluster-config-file nodes-6379.conf #
cluster-node-timeout 15000tcp

#複製配置文件六分,修改端口ide

3#啓用節點 docker的網絡模式爲net:使用宿主機的網絡模式 --net=host
docker run -d --name redis_136_6391 --net=host -v /home/wolfplus/docker/redis/redis.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
docker run -d --name redis_136_6392 --net=host -v /home/wolfplus/docker/redis/redis2.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
docker run -d --name redis_136_6393 --net=host -v /home/wolfplus/docker/redis/redis3.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
docker run -d --name redis_136_6394 --net=host -v /home/wolfplus/docker/redis/redis4.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
docker run -d --name redis_136_6395 --net=host -v /home/wolfplus/docker/redis/redis5.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
docker run -d --name redis_136_6396 --net=host -v /home/wolfplus/docker/redis/redis6.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf3d

4.#redis 集羣感知:節點握手——是指一批運行在集羣模式的節點經過Gossip協議彼此通訊,達到感知對方的過程。server

進入某個節點
wolfplus@master:~/docker/redis/redis-4.0.1/src$ ./redis-cli -h 192.168.0.136 -p 6393
192.168.0.136:6393> CLUSTER MEET 192.168.0.136 6379
192.168.0.136:6393> CLUSTER MEET 192.168.0.136 6392
192.168.0.136:6393> CLUSTER MEET 192.168.0.136 6393
192.168.0.136:6393> CLUSTER MEET 192.168.0.136 6394
192.168.0.136:6393> CLUSTER MEET 192.168.0.136 6395
192.168.0.136:6393> CLUSTER MEET 192.168.0.136 6396

#查看節點
192.168.0.136:6393> CLUSTER NODES
54cb5c2eb8e5f5aed2d2f7843f75a9284ef6785c 192.168.0.136:6379@16379 master - 0 1528697195600 1 connected
f45f9109f2297a83b1ac36f9e1db5e70bbc174ab 192.168.0.136:6392@16392 master - 0 1528697195600 0 connected
ae86224a3bc29c4854719c83979cb7506f37787a 192.168.0.136:6393@16393 master - 0 1528697195600 5 connected
98aebcfe42d8aaa8a3375e4a16707107dc9da683 192.168.0.136:6394@16394 master - 0 1528697194000 4 connected
0bbdc4176884ef0e3bb9b2e7d03d91b0e7e11f44 192.168.0.136:6395@16395 master - 0 1528697194995 3 connected
760e4d0039c5ac13d04aa4791c9e6dc28544d7c7 192.168.0.136:6396@16396 myself,master - 0 1528697195000 2 connected

5.#前已經使這六個節點組成集羣,可是如今還沒法工做,由於集羣節點尚未分配槽(slot)。
分配槽位: CLUSTER ADDSLOTS 槽位,一個槽位只能分配一個節點,16384個槽位必須分配完,不一樣節點不能衝突。
因此經過腳本進行分配
#分配槽信息
192.168.0.136:6393> CLUSTER INFO #查看集羣信息

wolfplus@master:~/docker/redis$ cat addslots.sh
#!/bin/bash

node2 192.168.0.136 6379

n=0
for ((i=n;i<=5461;i++));
do
/home/wolfplus/docker/redis/redis-4.0.1/src/redis-cli -h 192.168.0.136 -p 6379 CLUSTER ADDSLOTS $i
done

wolfplus@master:~/docker/redis$ cat addslots2.sh
#!/bin/bash

node2 192.168.0.136 6392

n=5462
for ((i=n;i<=10922;i++));
do
/home/wolfplus/docker/redis/redis-4.0.1/src/redis-cli -h 192.168.0.136 -p 6392 CLUSTER ADDSLOTS $i
done

wolfplus@master:~/docker/redis$ cat addslots3.sh
#!/bin/bash

node3 192.168.0.136 6393

n=10923
#for ((i=n;i<=5461;i++));
for ((i=n;i<=16383;i++));
do
/home/wolfplus/docker/redis/redis-4.0.1/src/redis-cli -h 192.168.0.136 -p 6393 CLUSTER ADDSLOTS $i
done

7.#如何變成高可用性,以上咱們已經搭建了一套完整的可運行的redis cluster, 可是每一個節點都是單點,這樣子可能出現,一個節點掛掉,整個集羣由於槽位分配不徹底而崩潰,所以,咱們須要爲每一個節點配置副本備用節點。
前面咱們已經提早建立了6個備用節點,搭建集羣花了三個,所以還有剩下三個直接能夠用來作備用副本。

#編寫腳本,添加副本節點:

wolfplus@master:~/docker/redis$ cat addSlaveNodes.sh
#!/bin/bash

/usr/bin/redis-cli -h 192.168.0.136 -p 6394 CLUSTER REPLICATE efe727638186d9727691e01d726f1018adc0fd1e

/usr/bin/redis-cli -h 192.168.0.136 -p 6395 CLUSTER REPLICATE efe45e8653ce8bb3d33fbab91be3d86a471d2075

/usr/bin/redis-cli -h 192.168.0.136 -p 6396 CLUSTER REPLICATE 91327df61073cb1921c85bebafbf71802d7b89d6

8#至此集羣搭建完成,注意一下信息
1.查看節點key-value,使用redis-cli -h xxx.xxx.xxx.xxx -p port -c (-c 選項對於redis-cli版本限制)
2.docker運行redis集羣,最好使用host的網絡模式,默認的網橋模式,各節點的ip端口爲容器的皮端口,外網不能訪問,所以要使用host的網絡模式
3.主節點當機,性節點會升級成master模式,當宕機的主節點恢復,則變成了從節點
4.slave-read-only yes
若是爲 yes,表明爲只讀狀態,但並不表示客戶端用集羣方式以從節點爲入口連入集羣時,不能夠進行 set 操做,且 set 操做的數據不會被放在從節點的槽上,會被放到某主節點的槽上。
避免從「Slave-read-only」字面而錯誤理解該參數的使用,誤認爲該參數設置後在從節點連入集羣沒法在該節點 set 值

參考文件:http://www.javashuo.com/article/p-acfjgdji-dn.html

相關文章
相關標籤/搜索