服务器
这次,我将展示docker是如何快速构建Redis集群的。 文章内容丰富,感兴趣的伙伴都知道。 希望你看完这篇文章后能有所收获。
什么是Redis集群
Redis群集是Redis提供的分布式数据库方案,通过片( sharding )共享数据并提供复制和故障转移功能。
节点
Redis群集通常由多个节点( node )组成。 最初,每个节点都是相互独立的,每个节点只包含自己的群集。 要构建真正运行的群集,必须通过连接每个独立的节点来配置包含多个节点的群集。
集群配置
配置文件
调整群集节点配置
#打开集群
已启用集群是
#群集配置文件
群集配置文件节点s-6379.conf
#群集节点超时
cluster-node-timeout 15000
Docker快速构建Redis集群
安装Redis
文章: https://www.jb51.net/article/150054.htm
准备工作
conf
() ) redis.conf
() sentinel.conf
redis
() ) data_6379
() ) data_6380
() ) data_6381
() ) data_6382
() ) data_6383
() data_6384
(脚本
cluster.sh
run.sh
( sentinel.sh
run.sh脚本文件
#! /usr/bin/env bash
set -e
#脚本当前目录
cpath=$(CD$(Dirname& ); #039; $0&; #039; ) |退出; pwd )
#根目录
Dirpath=$(Dirname&; #039; $Cpath&; #039; ) ) ) ) )。
#获取端口
port=&; #039; $1&; #039;
if[! &; #039; $port&; #039; ]]; then
端口=6379
fi
#创建数据目录
mkdir-p&; #039; $Dirpath&; #039; /redis/data_&; #039; $port&; #039;
#删除启动的服务
container id=$ ( docker PS-a|grep & amp; #039; redis_$port&; #039; |awk-f&; #039; &; #039; {print$1}&; #039; )
if [[ &; #039; $containerId&; #039; ]]; then
docker RM-f $ { container id }/dev/null
fi
#服务开始
containerName=redis_&; #039; $port&; #039;
docker run-itd-- privileged=true-p & amp; #039; $port&; #039; 6379-- name $ { container name }\\ & amp; quot;
-v=&; #039; $Dirpath&; #039;/conf/redis.conf:/etc/redis/redis.conf \
-v=&; #039; $Dirpath&; #039; /redis/data_&; #039; $port&; #039;/data\\
redis \\\\
redis-server/etc/redis/redis.conf/dev/null
#获取容器IP地址
文档IP=$ (文档inspect-f & amp; #039; { {.network settings.IP address } } & amp; #039; $containername&; #039; )
#获取容器启动状态
is running=$ ( docker inspect-f & amp; #039; {.state.running}&; #039; $containername&; #039; ) )
if [[ &; #039; $isRunning&; #039;==&; #039; 真& amp; #039; ]]; then
echo&; #039; 容器: $containerName - IP:$dockerIp -启动成功&; #039;
fi
cluster.sh脚本文件
#! /usr/bin/env bash
set -e
#脚本当前目录
cpath=$(CD$(Dirname& ); #039; $0&; #039; )|| exit; pwd )
#启动集群数
num=&; #039; $1&; #039;
if[! &; #039; $num&; #039; ]]; then
num=6
fi
sPort=6378
for ( ) I=1; i=$num; I ) ); do
sh${Cpath}/run.sh$($sport$I ) )
唐
开始服务
运行脚本文件,默认情况下创建六个节点
sh scripts/cluster.sh
脚本返回结果
容器: redis _ 6379IP:172.17.0.2启动成功
容器: redis _ 6380IP:172.17.0.3启动成功
容器: redis _ 6381IP:172.17.0.4启动成功
容器: redis _ 6382IP:172.17.0.5启动成功
容器: redis _ 6383IP:172.17.0.6启动成功
容器: redis _ 6384IP:172.17.0.7启动成功
docker ps是否确实成功运行
root @ desktop-q13ei 52:~/docker-config/redis # docker PS
containeridimagecommandcreatedstatusportsnames
c0601df1a456redis&; #039; docker-entrypoint.s…&; #039; 27 secondsagoup 26 seconds0.0.0: 6384-6379/TCP redis _ 6384
6fecf70465b8redis&; #039; docker-entrypoint.s…&; #039; 27 secondsagoup 26 seconds0.0.0: 6383-6379/TCP redis _ 6383
1aF15e90b7a0redis&; #039; docker-entrypoint.s…&; #039; 28 secondsagoup 27 seconds0.0.0: 6382-6379/TCP redis _ 6382
c495f31a5dfRedis&; #039; docker-entrypoint.s…&; #039; 28 secondsagoup 28 seconds0.0.0: 6381-6379/TCP redis _ 6381
e54FD9FD0550redis&; #039; docker-entrypoint.s…&; #039; 29 secondsagoup 28 seconds0.0.0: 6380-6379/TCP redis _ 6380
be92ad2f7046redis&; #039; docker-entrypoint.s…&; #039; 29 secondsagoup 29 seconds 0.0.0:6379-6379/TCP redis _ 6379
现在已创建了六个独立的群集节点,且当前无法正常运行。
创建集群
这里可以跳过。 本人是为了省事
获取容器以redis_开头的所有容器IP地址
dockerinspect-f&; #039; {.network settings.IP address }:6379 & amp; #039; ` dockerPS|grepredis_|awk-f&; #039; &; #039; {打印$1} `
#返回结果
#172.17.0.2:6379、172.17.0.3:6379、172.17.0.4:6379、172.17.0.5:6379、172.0.6:666
首次创建并运行群集
./redis-CLI-- cluster create 172.17.0.2:6379,172.17.0.3:6379,172.17.0.4:6379,172.0.0
输出结果
licas 1
performinghashslotsallocationon 6节点s .
主机[0]-Slots0-5460
主机[1]-Slots5461-10922
大师[2]-Slots10923-16383
adding replica 172.17.0.6:6379 to 172.17.0.2:6379
adding replica 172.17.0.7:6379 to 172.17.0.3:6379
adding replica 172.17.0.5:6379 to 172.17.0.4:6379
m:e8da1fef 656984 de 3e c2a 677 EDC 8d9c 48 d 01 CD 95172.17.0.2:6379
slots :“0-5460”主控
m:68b 925 ab0f BBC 1a 632 c 1754587 FB 6dad3fa 14 c 91172.17.0.3:6379
slots :“5461-10922”主节点
m:0a 46 a B2 f6d 176738 b 55 Fe 699 C2 df 1c 34 f 8200 d 06172.17.0.4:6379
slots :“10923-16383”主控
s:BD 3064 ad 5297 DFC 258 e 9236943455 c 589 be8b2a 3172.17.0.5:6379
replicates 0a 46 a B2 f6d 176738 b 55 Fe 699 C2 df 1c 34 f 8200 d 06
s:f1 d8c 897882 d 29 e 6538 b 1158525493 b3b 782289 a 172.17.0.6:6379
replicatese 8da1fef 656984 de 3e c2a 677 EDC 8d 9c 48 d 01 CD 95
s:619 e1c b52 f 39 e 07 b 321719 b77 fc 3631 fa 6293 cef 172.17.0.7:6379
replicates 68 b 925 ab 0f BBC 1a 632 c 1754587 FB 6dad3fa 14 c 91
Can I set the above configuration? ( type &; #039; 是& amp; #039; to accept ) :
输入:是,均匀分配时隙位
节点配置更新
assignadifferentconfigepochtoeachnode
sendingclustermeetmessagestojointhecluster
Waiting for the cluster to join
.
性能群集检查( using node 172.17.0.2:6379 ) )。
m:e8da1fef 656984 de 3e c2a 677 EDC 8d9c 48 d 01 CD 95172.17.0.2:6379
slots :“0-5460”主控
1additionalReplica(s )
s:f1 d8c 897882 d 29 e 6538 b 1158525493 b3b 782289 a 172.17.0.6:6379
Slots:(0Slots ) slave
replicatese 8da1fef 656984 de 3e c2a 677 EDC 8d 9c 48 d 01 CD 95
s:BD 3064 ad 5297 DFC 258 e 9236943455 c 589 be8b2a 3172.17.0.5:6379
Slots:(0Slots ) slave
replicates 0a 46 a B2 f6d 176738 b 55 Fe 699 C2 df 1c 34 f 8200 d 06
m:0a 46 a B2 f6d 176738 b 55 Fe 699 C2 df 1c 34 f 8200 d 06172.17.0.4:6379
slots :“10923-16383”主控
1additionalReplica(s )
s:619 e1c b52 f 39 e 07 b 321719 b77 fc 3631 fa 6293 cef 172.17.0.7:6379
Slots:(0Slots ) slave
replicates 68 b 925 ab 0f BBC 1a 632 c 1754587 FB 6dad3fa 14 c 91
m:68b 925 ab0f BBC 1a 632 c 1754587 FB 6dad3fa 14 c 91172.17.0.3:6379
slots :“5461-10922”主节点
1additionalReplica(s )
[确定]配置。
Check for open slots .
检查插槽覆盖.
[确定]全部16384 slots covered。
连接集群
通过客户端连接
redis-cli -c端口
执行命令: cluster info
127.0.0.1:6379群集信息
cluster _ state :确定
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
custer _ stats _ messages _ ping _ sent:104
custer _ stats _ messages _ pong _ sent:120
cluster _ stats _ messages _ sent:224
cluster _ stats _ messages _ ping _ received:115
cluster _ stats _ messages _ pong _ received:104
cluster _ stats _ messages _ meet _ received:5
cluster _ stats _ messages _ received:224
cluster_state:ok表示群集工作正常
客户端控制台:群集帮助
127.0.0.1:6379群集帮助
1 ) clustersubcommandarg . arg.sub commands are :
2 ) addslotsslot [ slot . ]-- assignslotstocurrentnode。
3 ) bump epoch---advancetheclusterconfigepoch。
4 )故障报告节点id-- returnnumberoffailurereportsfornode-id。
5 ) countkeysinslotslot-returnthenumberofkeysinslot。
6 ) delslotsslot [ slot . ]-- deleteslotsinformationfromcurrentnode。
7 ) failover [ force|take over ]-- promotecurrentreplicanodetobeingamaster。
8 ) forget node-id-- removeanodefromthecluster。
9 ) getkeysinslotslotcount---- returnkeynamesstoredbycurrentnodeinaslot。
10 ) flush slots---deletecurrentnodeownslotsinformation。
11 )信息返回信息群集。
12 ) keyslotkey-- returnthehashslotforkey。
13 ) meet ipport [ bus-port ]-- connectnodesintoaworkingcluster。
14 ) myid--返回节点id。
15 ) nodes---- returnclusterconfigurationseenbynode.output format :
16 ) idip:portflagsmasterpingspongsepochlinkslot . slot
17 ) replicate node-id---configurecurrentnodeasreplicatonode-id。
18 ) reset [ hard|soft ]-- reset current node ( default:soft )。
19 )设置配置错误节点。
20 ) setslotslot (输入)-- Set slot state。
21 ) replicas node-id---- return node-id replicas。
22 )保存配置-保存群集配置。
23 ) slots---- returninformationaboutslotsrangemappings.eachrangeismadeof :
24 ) start,end,master and replicas IP addresses,ports and ids
显示客户端提供的群集相关命令: redis-cli --cluster help
群集管理器命令:
create host1: port1. hostn:portn
- -集群复制arg
检查主机:端口
- cluster-search-multiple-owners
信息主机:端口
fix host:port
- cluster-search-multiple-owners
reshard host:port
- -从集群开始
- -集群- to arg
- -集群-集群
- -群集-是
--cluster-timeout arg
- -集群映射
- -群集替换
rebalance host:port
- cluster-weight node1=w1 . noden=wn
--cluster-use-empty-masters
--cluster-timeout arg
- -集群大小
- -集群映射
- -集群- threshold arg
- -群集替换
add-nodenew _ host:new _ port existing _ host:existing _ port
- -群集标签
- -群集主标识arg
del-node host:port node_id
call host:portcommandargarg.arg
set-time out host:port milliseconds
导入主机: port
- -从集群开始
- -群集复制
- -群集替换
阅读这篇关于Docker如何快速构建Redis群集的文章,如果您觉得文章内容不错,可以将其分享给更多的人看。
详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn