Heim  >  Artikel  >  Datenbank  >  So erstellen Sie einen Redis-Cluster basierend auf Docker

So erstellen Sie einen Redis-Cluster basierend auf Docker

王林
王林nach vorne
2023-05-30 12:46:071374Durchsuche

Environment: Docker + (Redis: 5.0.5 * 3)

1.

So erstellen Sie einen Redis-Cluster basierend auf DockerRedis-Node2: 6380

Redis-Node3: 6381

  • docker  pull  redis:5.0.5

  • 3. Code> Starten Sie 3 Redis-Container:

    So erstellen Sie einen Docker-basierten Redis-Cluster
  • Überprüfen Sie nach dem Ausführen des laufenden Befehls den Start des Containers:

    Basierend auf Docker So erstellen Sie einen Redis-Cluster
Wenn die obige Situation auftritt, Beendet (1) vor 3 Sekunden, können Sie sie über Docker-Protokolleanzeigen >:

So erstellen Sie einen Redis-Cluster basierend auf DockerSo erstellen Sie einen Redis-Cluster basierend auf Docker

Die obige Eingabeaufforderung ist ein Berechtigungsproblem. Wir versuchen, sie zu ändern. Die folgenden Berechtigungen:

docker create --name redis-node1 -v /data/redis-data/node1:/data -p 6379:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf

docker create --name redis-node2 -v /data/redis-data/node2:/data -p 6380:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf

docker create --name redis-node3 -v /data/redis-data/node3:/data -p 6381:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf
Wie unten nach erfolgreichem Start gezeigt:

Basierend auf Docker So erstellen Sie einen Redis-Clusterdocker start来启动3个Redis容器:

So erstellen Sie einen Redis-Cluster basierend auf Docker

执行完运行命令后检查一下容器的启动情况:

So erstellen Sie einen Redis-Cluster basierend auf Docker

如果出现上图情况,Exited (1) 3 seconds ago,可以通过 docker logs 查看:

So erstellen Sie einen Redis-Cluster basierend auf Docker

如上提示的是权限问题,我们尝试修改一下权限:

chmod -R  777 /data

启动成功后如下图所示:

So erstellen Sie einen Redis-Cluster basierend auf Docker

组建集群

查看3个Redis在Docker中分配的ip结点信息:

执行「docker inspect redis-node1」得到 redis-node1 ip 信息为:172.17.0.4 
执行「docker inspect redis-node2」得到 redis-node2 ip 信息为:172.17.0.3 
执行「docker inspect redis-node3」得到 redis-node3 ip 信息为:172.17.0.2

So erstellen Sie einen Redis-Cluster basierend auf Docker

拿到 ip 信息后(每个人的ip信息可能不一样),接下来进入某一个容器进行组建集群:

# 这里以进入 node1 为例
docker exec -it redis-node1 /bin/bash

# 接着执行组建集群命令(请根据自己的ip信息进行拼接)
redis-cli --cluster create 172.17.0.2:6379  172.17.0.3:6379  172.17.0.4:6379 --cluster-replicas 0

So erstellen Sie einen Redis-Cluster basierend auf Docker

ok,此时集群搭建完了,我们接下来测试一下。

测试集群

使用 redis-cli -c 命令连接到集群结点,然后 set 值,set 值之后会自动重定向到 0.2 ip地址,然后通过 get 获取一下,获取成功证明集群有效。

So erstellen Sie einen Redis-Cluster basierend auf Docker

4、存在的问题

按照如上的步骤,虽然集群搭建成功了,但其实还是有点问题的,由于集群结点中的 ip地址 是docket内部分配的,如:172.17.0.2 等,如果使用 redis集群 的项目跟集群不在一台服务器上,那么项目是没法使用集群的,因为是访问不通的。

So erstellen Sie einen Redis-Cluster basierend auf Docker

一种解决方案是让Docker使用 host模式 的网络连接类型,Docker在使用host模式下创建的容器是没有自己独立的网络命名空间的,是跟物理机共享一个网络空间,进而可以共享物理机的所有端口与IP,这样就可以让公共网络直接访问容器了,尽管这种方式有安全隐患,但目前来说还没找到其他可行性模式。

就存在的问题我们重新采用 host模式,重新创建一下容器:

1、停止已运行的容器
docker stop redis-node1 redis-node2 redis-node3
2、删除之前创建的容器
docker rm redis-node1 redis-node2 redis-node3

# 清空上面创建的配置文件
rm -rf /data/redis-data/node*
3、重新基于host模式创建
docker create --name redis-node1 --net host -v /data/redis-data/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379

docker create --name redis-node2 --net host -v /data/redis-data/node2:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380

docker create --name redis-node3 --net host -v /data/redis-data/node3:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381

跟之前创建命令不同,一是指定了 --net 网络类型为 host,二是这种情况下就不需要端口映射了,比如 -p 6379:6379,因为此时需要对外共享容器端口服务,所以只需要指定对外暴露的端口 -p 6379-p 6380 等。

So erstellen Sie einen Redis-Cluster basierend auf Docker

4、启动容器并组建集群
# 启动命令
docker start redis-node1 redis-node2 redis-node3

# 进入某一个容器
docker exec -it redis-node1 /bin/bash

# 组建集群,10.211.55.4为当前物理机的ip地址
redis-cli --cluster create 10.211.55.4:6379  10.211.55.4:6380  10.211.55.4:6381 --cluster-replicas 0

So erstellen Sie einen Redis-Cluster basierend auf Docker

5、查看集群信息
root@CentOS7:/data# redis-cli
127.0.0.1:6379> cluster nodes
72c291c32815194b64d1f6d0fdf771f5cc04e14a 10.211.55.4:6380@16380 master - 0 1590905997358 2 connected 5461-10922
6a595b67bbff15c94e5874c2d2cd556d6a6a6c17 10.211.55.4:6381@16381 master - 0 1590905998362 3 connected 10923-16383
4e3dbdc8f835dcbc38291c88f08165ee51d53d3d 10.211.55.4:6379@16379 myself,master - 0 1590905997000 1 connected 0-5460
127.0.0.1:6379>
6、测试集群

使用 redis-cli -c 连接到集群上,set

Erstellen Sie einen Cluster

So erstellen Sie einen Redis-Cluster basierend auf DockerSehen Sie sich die IP-Knoteninformationen von 3 in Docker zugewiesenen Redis an:

root@CentOS7:/data# redis-cli -c
127.0.0.1:6379> set wxiaowei 123
-> Redirected to slot [7515] located at 10.211.55.4:6380
OK
10.211.55.4:6380> get wxiaowei
"123"
🎜So erstellen Sie einen Redis-Cluster basierend auf Docker🎜🎜Nach Erhalt der IP-Informationen (jedermanns IP-Informationen). kann unterschiedlich sein), geben Sie dann einen bestimmten Container ein, um einen Cluster zu bilden: 🎜rrreee🎜 So erstellen Sie einen Redis-Cluster auf Basis von Docker“ />🎜🎜ok, jetzt ist der Cluster eingerichtet, testen wir ihn als nächstes. 🎜🎜Cluster testen🎜🎜Verwenden Sie den Befehl <code >redis-cli -c</code>, um eine Verbindung zum Clusterknoten herzustellen, und legen Sie dann den Wert fest. Nach dem festgelegten Wert wird automatisch auf die IP-Adresse 0,2 umgeleitet Holen Sie es dann durch get, und es wird erfolgreich sein. Beweisen Sie, dass der Cluster funktioniert. 🎜🎜<img src=🎜

4. Bestehende Probleme🎜🎜Befolgen Sie die oben genannten Schritte. Obwohl der Cluster erfolgreich eingerichtet wurde, gibt es immer noch einige Probleme, da die IP-Adresse im Clusterknoten intern zugewiesen wird B.: 172.17.0.2 usw. Wenn sich das Projekt, das redis Cluster verwendet, nicht auf demselben Server wie der Cluster befindet, kann das Projekt den Cluster nicht verwenden, da dies der Fall ist ist unzugänglich. 🎜🎜So erstellen Sie einen Redis-Cluster basierend auf Docker🎜🎜Eine Lösung Dies ist die Art der Netzwerkverbindung, die es Docker ermöglicht, den Host-Modus zu verwenden, der von Docker im Host-Modus erstellt wurde nicht vorhanden Mit einem eigenen unabhängigen Netzwerk-Namespace teilt es einen Netzwerkraum mit der physischen Maschine und kann dann alle Ports und IP der physischen Maschine gemeinsam nutzen, sodass das öffentliche Netzwerk direkt darauf zugreifen kann Obwohl diese Methode Sicherheitsrisiken birgt, wurde bisher kein anderer praktikabler Modus gefunden. 🎜🎜 Bezüglich der bestehenden Probleme haben wir den host mode erneut übernommen und den Container neu erstellt: 🎜🎜1 Stoppen Sie den laufenden Container 🎜rrreee🎜2. Löschen Sie den zuvor erstellten Container 🎜rrreee🎜3. Das erneute Erstellen von 🎜rrreee🎜 im Host-Modus unterscheidet sich vom vorherigen Erstellungsbefehl. Erstens wird der Netzwerktyp von --net hier als host angegeben In diesem Fall ist keine Portzuordnung erforderlich, z. B. -p 6379:6379, da der Container-Port-Dienst zu diesem Zeitpunkt extern gemeinsam genutzt werden muss, sodass Sie nur den extern bereitgestellten Port -p 6379, -p 6380 usw. 🎜🎜So erstellen Sie einen Redis-Cluster basierend auf Docker🎜🎜4. Starten Sie den Container und bauen Sie einen Cluster auf. 🎜rrreee🎜 Docker" />🎜🎜 5. Überprüfen Sie die Cluster-Informationen🎜rrreee🎜6. Testen Sie den Cluster🎜🎜Verwenden Sie redis-cli -c, um eine Verbindung zum Cluster herzustellen, set a Wert eingeben und dann den Wert von anderen Knoten abrufen. Überprüfen Sie, ob es erfolgreich war: 🎜rrreee🎜🎜🎜

Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen Redis-Cluster basierend auf Docker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen