用docker stack開啟redis集群
(金慶的專欄 2017.10)
有5個(gè)docker swarm節(jié)點(diǎn),開啟redis cluster.
每個(gè)機(jī)器上開2個(gè)redis節(jié)點(diǎn),共10個(gè)redis節(jié)點(diǎn)。
采用官方的redis:alpine鏡像。
docker-stack.yml 如下:
version: "3"
services:
redis001:
image: redis:alpine
volumes:
- /home/redis/001/data:/data
- /home/redis/001/conf:/conf
command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file /conf/nodes.conf --cluster-announce-ip 10.240.79.8 --cluster-announce-port 7001 --cluster-announce-bus-port 17001
ports:
- "7001:6379"
- "17001:16379"
networks:
- redisnet
deploy:
placement:
constraints:
- node.hostname == host-10-240-79-8
redis002:
image: redis:alpine
volumes:
- /home/redis/002/data:/data
- /home/redis/002/conf:/conf
command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file /conf/nodes.conf --cluster-announce-ip 10.240.79.9 --cluster-announce-port 7002 --cluster-announce-bus-port 17002
ports:
- "7002:6379"
- "17002:16379"
networks:
- redisnet
deploy:
placement:
constraints:
- node.hostname == host-10-240-79-9
redis003:
...
redis010:
...
networks:
redisnet:
數(shù)據(jù)保存文件在 /home/redis/001/data
集群配置文件將保存到 /home/redis/001/conf/nodes.conf
各機(jī)器上目錄需要預(yù)先創(chuàng)建,不然docker開啟失敗。
并且需要設(shè)置目錄權(quán)限,不然報(bào)"Permission denied".
redis-server以用戶uid=100(redis)運(yùn)行,所以
chown -R 100 /home/redis/
啟動(dòng)redis服務(wù)棧:
docker stack deploy -c docker-stack.yml redis
redis-server啟動(dòng)后,運(yùn)行 redis-trib.rb 來組建 redis cluster:
docker run --rm -it inem0o/redis-trib create --replicas 1 10.240.79.8:7001 10.240.79.9:7002 ... 10.240.79.12:7010
注意 inem0o/redis-trib 的說明中,命令示例缺少 "-it", 會(huì)報(bào)錯(cuò)退出:
Can I set the above configuration? (type 'yes' to accept): : undefined method `chomp' for nil:NilClass (NoMethodError)
from /usr/bin/redis-trib:1295:in `create_cluster_cmd'
from /usr/bin/redis-trib:1701:in `<main>'
運(yùn)行 redis-cli 測試,"-c" 參數(shù)表示集群,可連接任意機(jī)器的7001-7010任意端口:
[root@host-10-240-79-9 ~]# docker run -it --rm redis:alpine redis-cli -h 10.240.79.8 -p 7006 -c
10.240.79.8:7006> get a
-> Redirected to slot [15495] located at 10.240.79.10:7003
(nil)
用swarm mode開啟redis服務(wù)比較方便。
但是出于性能考慮,應(yīng)該禁用 swarm 的NAT轉(zhuǎn)發(fā)和負(fù)載均衡。
研究了下,暫時(shí)還沒學(xué)會(huì)。
(金慶的專欄 2017.10)
有5個(gè)docker swarm節(jié)點(diǎn),開啟redis cluster.
每個(gè)機(jī)器上開2個(gè)redis節(jié)點(diǎn),共10個(gè)redis節(jié)點(diǎn)。
采用官方的redis:alpine鏡像。
docker-stack.yml 如下:
version: "3"
services:
redis001:
image: redis:alpine
volumes:
- /home/redis/001/data:/data
- /home/redis/001/conf:/conf
command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file /conf/nodes.conf --cluster-announce-ip 10.240.79.8 --cluster-announce-port 7001 --cluster-announce-bus-port 17001
ports:
- "7001:6379"
- "17001:16379"
networks:
- redisnet
deploy:
placement:
constraints:
- node.hostname == host-10-240-79-8
redis002:
image: redis:alpine
volumes:
- /home/redis/002/data:/data
- /home/redis/002/conf:/conf
command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file /conf/nodes.conf --cluster-announce-ip 10.240.79.9 --cluster-announce-port 7002 --cluster-announce-bus-port 17002
ports:
- "7002:6379"
- "17002:16379"
networks:
- redisnet
deploy:
placement:
constraints:
- node.hostname == host-10-240-79-9
redis003:
...
redis010:
...
networks:
redisnet:
數(shù)據(jù)保存文件在 /home/redis/001/data
集群配置文件將保存到 /home/redis/001/conf/nodes.conf
各機(jī)器上目錄需要預(yù)先創(chuàng)建,不然docker開啟失敗。
并且需要設(shè)置目錄權(quán)限,不然報(bào)"Permission denied".
redis-server以用戶uid=100(redis)運(yùn)行,所以
chown -R 100 /home/redis/
啟動(dòng)redis服務(wù)棧:
docker stack deploy -c docker-stack.yml redis
redis-server啟動(dòng)后,運(yùn)行 redis-trib.rb 來組建 redis cluster:
docker run --rm -it inem0o/redis-trib create --replicas 1 10.240.79.8:7001 10.240.79.9:7002 ... 10.240.79.12:7010
注意 inem0o/redis-trib 的說明中,命令示例缺少 "-it", 會(huì)報(bào)錯(cuò)退出:
Can I set the above configuration? (type 'yes' to accept): : undefined method `chomp' for nil:NilClass (NoMethodError)
from /usr/bin/redis-trib:1295:in `create_cluster_cmd'
from /usr/bin/redis-trib:1701:in `<main>'
運(yùn)行 redis-cli 測試,"-c" 參數(shù)表示集群,可連接任意機(jī)器的7001-7010任意端口:
[root@host-10-240-79-9 ~]# docker run -it --rm redis:alpine redis-cli -h 10.240.79.8 -p 7006 -c
10.240.79.8:7006> get a
-> Redirected to slot [15495] located at 10.240.79.10:7003
(nil)
用swarm mode開啟redis服務(wù)比較方便。
但是出于性能考慮,應(yīng)該禁用 swarm 的NAT轉(zhuǎn)發(fā)和負(fù)載均衡。
研究了下,暫時(shí)還沒學(xué)會(huì)。