陈奇网络工作室

Docker如何快速构建Redis集群

服务器

这次,我将展示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&amp ); #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&amp ); #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

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3