1. Einleitung:In der aktuellen Internet-Technologiearchitektur tauchen immer wieder verschiedene Middlewares auf, wie etwa MQ, Redis und Zookeeper. Diese Middlewares werden im Allgemeinen in einer Master-Slave-Architektur oder einer Cluster-Architektur eingesetzt. Unternehmen setzen im Allgemeinen jeweils einen Satz in der Entwicklungsumgebung, der Testumgebung und der Produktionsumgebung ein. Wenn wir entwickeln, stellen wir normalerweise eine Verbindung zur Entwicklungsumgebung her. Die Entwicklungsumgebung eines allgemeinen Unternehmens kann jedoch nur im Intranet verwendet werden. Wenn wir nach Hause gehen, können wir sie nicht verwenden, es sei denn, das Unternehmen stellt ein VPN zur Verfügung. Manchmal haben wir ein VPN, aber die Entwicklung ist trotzdem umständlich. Beispielsweise verwendet unsere aktuelle MQ-Middleware Pulsar, aber der Tenant und der Namespace von Pulsar können nicht automatisch erstellt werden, sodass die Entwicklung im täglichen Leben sehr umständlich ist und wir jedes Mal, wenn wir ihn brauchen, nur einen DBA finden können. Daher stellen wir normalerweise eine Reihe von Servern lokal bereit. Wenn wir sie jedoch selbst bereitstellen, gibt es zwei Schwierigkeiten: Middleware verfügt über eine eigene Implementierungssprache, beispielsweise RabbitMQ. Wenn wir RabbitMQ bereitstellen, müssen wir zuerst die Sprache Erlang installieren. Der Einsatz einer Clusterarchitektur verbraucht eine Menge Systemressourcen, wodurch Laptops mit ohnehin eingeschränkten Ressourcen noch langsamer werden und die Entwicklung sehr unangenehm wird. 2. Docker:Docker kann die oben genannten Probleme perfekt lösen und die Bereitstellung äußerst einfach machen. Nachfolgend sehen Sie ein Beispiel der Middleware, die ich selbst verwende. A. Pulsar: Wie oben erwähnt, können Pulsar-Mandanten und -Namespaces nicht automatisch erstellt werden. Wenn wir sie verwenden möchten, können wir nur den zuständigen Kollegen finden, der uns bei der Erstellung hilft. Die Funktionen, an denen ich kürzlich gearbeitet habe: Broadcast Center und Mitgliederexport verwenden beide Pulsar, aber ich wollte meine Kollegen nicht belästigen und arbeite oft zu Hause, also ging ich direkt auf die offizielle Website, um herauszufinden, wie ich es lokal bereitstellen kann. Die offizielle Website stellt verschiedene Bereitstellungsmethoden vor: die Verwendung komprimierter Pakete, Docker und Kubernetes. Natürlich gibt es die Docker-Bereitstellungsmethode, und wir müssen die Docker-Bereitstellungsmethode verwenden. Wie auch immer, wir können einfach ein Image abrufen und einen Container starten, was ziemlich praktisch ist. Der folgende Befehl: docker run -it -d -p 6650:6650 -p 8080:8080 -v data -v conf --name=mypulsar apachepulsar/pulsar:2.6.1 bin/pulsar standalone Der Befehl ist sehr einfach: Öffnen Sie die Portnummern 6650 und 8080 von Pulsar und binden Sie sie an die entsprechenden Portnummern des Hostcomputers, sodass wir direkt auf die IP:Port des Hostcomputers zugreifen können, um auf den Container zuzugreifen. Mounten Sie als Nächstes die Daten und die Konfiguration von Pulsar auf dem Host, damit die Daten nicht verloren gehen. Verwenden Sie dann den Befehl „pulsar standalone“, um eine eigenständige Version von Pulsar zu starten. Unabhängig davon, ob wir einen Mandanten oder einen Namespace erstellen müssen, können wir als Nächstes direkt den Container aufrufen, um ihn zu erstellen. docker exec -it mypulsar /bin/bash Über die Befehle zum Hinzufügen, Löschen, Ändern und Überprüfen von Mandanten und Namespaces: ## 1 Mandant# Überprüfen Sie, welche Mandanten vorhanden sind (öffentlich ist der Standardmandant des Systems) Liste der Pulsar-Admin-Mieter ##Mandanten erstellen pulsar-admin Mieter erstellen my-tenant #Mandanten löschen pulsar-admin Mieter löschen my-tenant ## 2 Namespace#Zeigen Sie den Namespace unter dem angegebenen Mandanten an. Pulsar-Admin Namespaces-Liste My-Tenant #Erstellen Sie einen angegebenen Tenant-Namespace pulsar-admin namespaces create my-tenant/my-namespace #Löschen Sie den angegebenen Tenant-Namespace pulsar-admin namespaces delete my-tenant/my-namespace B. Redis: Redis Im Allgemeinen verwendet die von uns erstellte Architektur Cluster, aber wenn Sie selbst einen Redis-Cluster bereitstellen, ist dies ziemlich problematisch. Ich habe bereits einen Artikel geschrieben: Redis-Cluster unter Linux bereitstellen Wenn Sie Docker verwenden, ist es ganz einfach. 1 Benutzerdefiniertes Netzwerk1.1 Erstellen Sie ein dediziertes Netzwerk für Redis Jeder Knoten im Redis-Cluster teilt sich ein dediziertes Netzwerk, sodass die Knoten aufeinander zugreifen können und die Verwendung von --link für die Netzwerkkommunikation zwischen den einzelnen Knoten nicht erforderlich ist. Das mit dem Befehl „Docker Network Create“ erstellte Netzwerk befindet sich standardmäßig im Bridge-Modus. winfun@localhost ~ % Docker-Netzwerk erstellen Redis-Net --Subnetz 172.26.0.0/16 5001355940f43474d59f5cb2d78e4e9eeb0a9827e53d8f9e5b55e7d3c5285a09 winfun@localhost ~ % Docker-Netzwerkliste NETZWERK-ID-NAME TREIBER-UMFANG 4d88d473e947 Brücke Brücke lokal 79a915fafbb5 Gastgeber Gastgeber lokal f56e362d3c68 keine null lokal 5001355940f4 Redis-Net-Brücke lokal winfun@localhost ~ % 1.2 Benutzerdefinierte Netzwerkdetails anzeigen Mit dem Befehl „Docker Network Inspection Redis-net“ können wir die Details des benutzerdefinierten Netzwerks anzeigen. Dabei sehen wir, dass sich derzeit keine Container im Netzwerk befinden. winfun@localhost mydata % Docker-Netzwerk überprüfen Redis-Net [ { "Name": "redis-net", "ID": "aed8340bbf8ab86cedc1d990eb7612854ba2b0bd4eae0f978ff95eadc3dbcf65", "Erstellt": "2020-10-22T08:46:55.695434Z", "Geltungsbereich": "lokal", "Treiber": "Brücke", "EnableIPv6": false, "IPAM": { "Treiber": "Standard", "Optionen": {}, "Konfiguration": [ { "Subnetz": "172.26.0.0/16" } ] }, "Intern": false, "Anfügbar": false, "Ingress": falsch, "Konfiguration von": { "Netzwerk": "" }, "ConfigOnly": falsch, "Container": {}, "Optionen": {}, "Beschriftungen": {} } ] 2 Bereitstellung starten2.1 Erstellen Sie sechs Redis-Knotenkonfigurationen für Port in $(seq 1 6); \ Tun \ mkdir -p /Benutzer/winfun/mydata/redis/node-${port}/conf berühren Sie /Benutzer/winfun/mydata/redis/node-${port}/conf/redis.conf cat << EOF >/Benutzer/winfun/mydata/redis/node-${port}/conf/redis.conf Port 6379 binden 0.0.0.0 Clusterfähig ja Cluster-Konfigurationsdatei nodes.conf Cluster-Knoten-Timeout 5000 Cluster-Ankündigungs-IP 172.26.0.1${Port} Cluster-Ankündigungs-Port 6379 Cluster-Ankündigung-Bus-Port 16379 nur anhängen ja Ende der Laufzeit Erledigt 2.2 Starten Sie den Container für Port in $(seq 1 6); \ Tun \ docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \ -v /Benutzer/winfun/mydata/redis/node-${port}/data:/data \ -v /Benutzer/winfun/mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis-net --ip 172.26.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf Erledigt 2.3 Zeigen Sie die 6 Container an, die erfolgreich gestartet wurden winfun@localhost meineDaten % Docker ps | grep redis ed5972e988e8 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." vor 11 Sekunden. Vor 10 Sekunden aktiv. 0.0.0.0:6376->6379/tcp, 0.0.0.0:16376->16379/tcp redis-6 61cd467bc803 redis:5.0.9-alpine3.11 „docker-entrypoint.s …“ vor 12 Sekunden. Vor 11 Sekunden aktiv. 0.0.0.0:6375->6379/tcp, 0.0.0.0:16375->16379/tcp redis-5 113943ba6586 redis:5.0.9-alpine3.11 „docker-entrypoint.s …“ vor 12 Sekunden. Vor 11 Sekunden aktiv. 0.0.0.0:6374->6379/tcp, 0.0.0.0:16374->16379/tcp redis-4 5fc3c838851c redis:5.0.9-alpine3.11 "docker-entrypoint.s..." vor 13 Sekunden. Vor 12 Sekunden aktiv. 0.0.0.0:6373->6379/tcp, 0.0.0.0:16373->16379/tcp redis-3 f7d4430f752b redis:5.0.9-alpine3.11 „docker-entrypoint.s …“ vor 13 Sekunden. Vor 12 Sekunden aktiv. 0.0.0.0:6372->6379/tcp, 0.0.0.0:16372->16379/tcp redis-2 bd3e4a593427 redis:5.0.9-alpine3.11 „docker-entrypoint.s …“ vor 14 Sekunden. Vor 13 Sekunden aktiv. 0.0.0.0:6371->6379/tcp, 0.0.0.0:16371->16379/tcp redis-1 3 Überprüfen Sie das Netzwerk erneut3.1 Container im Netzwerk anzeigen Als wir den Container oben gestartet haben, haben wir die Verwendung des Redis-Net-Netzwerks angegeben. Daher können wir uns zunächst die Informationen des Redis-Net-Netzwerks ansehen: winfun@localhost mydata % Docker-Netzwerk überprüfen Redis-Net [ { "Name": "redis-net", "ID": "aed8340bbf8ab86cedc1d990eb7612854ba2b0bd4eae0f978ff95eadc3dbcf65", "Erstellt": "2020-10-22T08:46:55.695434Z", "Geltungsbereich": "lokal", "Treiber": "Brücke", "EnableIPv6": false, "IPAM": { "Treiber": "Standard", "Optionen": {}, "Konfiguration": [ { "Subnetz": "172.26.0.0/16" } ] }, "Intern": false, "Anfügbar": false, "Ingress": falsch, "Konfiguration von": { "Netzwerk": "" }, "ConfigOnly": falsch, "Container": { "113943ba6586a4ac21d1c068b0535d5b4ef37da50141d648d30dab47eb47d3af": { "Name": "redis-4", "EndpointID": "3fe3b4655f39f90ee4daf384254d3f7548cddd19c384e0a26edb6a32545e5b30", "MacAdresse": "02:42:ac:1a:00:0e", "IPv4Adresse": "172.26.0.14/16", "IPv6Adresse": "" }, "5fc3c838851c0ca2f629457bc3551135567b4e9fb155943711e07a91ebe9827f": { "Name": "redis-3", "EndpointID": "edd826ca267714bea6bfddd8c5d6a5f3c71c50bd50381751ec40e9f8e8160dce", "MacAdresse": "02:42:ac:1a:00:0d", "IPv4Adresse": "172.26.0.13/16", "IPv6Adresse": "" }, "61cd467bc8030c4db9a4404b718c5c927869bed71609bec91e17ff0da705ae26": { "Name": "redis-5", "EndpointID": "7612c44ab2479ab62341eba2e30ab26f4c523ccbe1aa357fc8b7c17a368dba61", "MacAdresse": "02:42:ac:1a:00:0f", "IPv4Adresse": "172.26.0.15/16", "IPv6Adresse": "" }, "bd3e4a593427aab4750358330014422500755552c8b470f0fd7c1e88221db984": { "Name": "redis-1", "EndpointID": "400153b712859c5c17d99708586f30013bb28236ba0dead516cf3d01ea071909", "MacAdresse": "02:42:ac:1a:00:0b", "IPv4Adresse": "172.26.0.11/16", "IPv6Adresse": "" }, "ed5972e988e8301179249f6f9e82c8f9bb4ed801213fe49af9d3f31cbbe00db7": { "Name": "redis-6", "EndpointID": "b525b7bbdd0b0150f66b87d55e0a8f1208e113e7d1d421d1a0cca73dbb0c1e47", "MacAdresse": "02:42:ac:1a:00:10", "IPv4Adresse": "172.26.0.16/16", "IPv6Adresse": "" }, "f7d4430f752b5485c5a90f0dc6d1d9a826d782284b1badbd203c12353191bc57": { "Name": "redis-2", "EndpointID": "cbdc77cecda1c8d80f566bcc3113f37c1a7983190dbd7ac2e9a56f6b7e4fb21f", "MacAdresse": "02:42:ac:1a:00:0c", "IPv4Adresse": "172.26.0.12/16", "IPv6Adresse": "" } }, "Optionen": {}, "Beschriftungen": {} } ] 3.2 Prüfen, ob die Container miteinander kommunizieren können Wir können auch versuchen, mit redis-1 den Ping-Befehl auf redis-2 auszuführen, um zu sehen, ob das Netzwerk miteinander kommunizieren kann: winfun@localhost meineDaten % docker exec -it redis-1 ping redis-2 PING redis-2 (172.26.0.12): 56 Datenbytes 64 Bytes von 172.26.0.12: seq=0 ttl=64 Zeit=0,136 ms 64 Bytes von 172.26.0.12: seq=1 ttl=64 Zeit=0,190 ms 64 Bytes von 172.26.0.12: seq=2 ttl=64 Zeit=0,483 ms ^C --- Redis-2-Ping-Statistiken --- 3 Pakete gesendet, 3 Pakete empfangen, 0 % Paketverlust Hin- und Rückfahrt min./durchschnittlich/max. = 0,136/0,269/0,483 ms 4 Erstellen eines Clusters4.1 Verwenden Sie den Befehl redis-cli, um einen Cluster zu erstellen: winfun@localhost conf % docker exec -it redis-1 /bin/bash OCI-Laufzeit-Exec fehlgeschlagen: Exec fehlgeschlagen: container_linux.go:349: Starten des Containerprozesses verursachte „exec: \"/bin/bash\": stat /bin/bash: keine solche Datei oder kein solches Verzeichnis": unbekannt # Es kann nur sh verwendet werden, das Redis-Image hat kein Bash winfun@localhost meineDaten % docker exec -it redis-1 /bin/sh /data # cd /usr/local/bin/ /usr/local/bin # redis-cli --cluster erstellen 172.26.0.11:6379 172.26.0.12:6379 17 2.26.0.13:6379 172.26.0.14:6379 172.26.0.15:6379 172.26.0.16:6379 --cluster-repl icas 1 >>> Hash-Slot-Zuweisung auf 6 Knoten wird durchgeführt … Master[0] -> Steckplätze 0 - 5460 Master[1] -> Steckplätze 5461 - 10922 Master[2] -> Plätze 10923 - 16383 Replikat 172.26.0.15:6379 zu 172.26.0.11:6379 hinzufügen Replikat 172.26.0.16:6379 zu 172.26.0.12:6379 hinzufügen Replikat 172.26.0.14:6379 zu 172.26.0.13:6379 hinzufügen M: 6de9e9eef91dbae773d8ee1d629c87e1e7e19b82 172.26.0.11:6379 Steckplätze:[0-5460] (5461 Steckplätze) Master M: 43e173849bed74f5bd389f9b272ecf0399ae448f 172.26.0.12:6379 Steckplätze:[5461-10922] (5462 Steckplätze) Master M: 1e504dc62b7ccc426d513983ca061d1657532fb6 172.26.0.13:6379 Steckplätze:[10923-16383] (5461 Steckplätze) Master S: 92b95f18226903349fb860262d2fe6932d5a8dc2 172.26.0.14:6379 Replikate 1e504dc62b7ccc426d513983ca061d1657532fb6 S: 7e5116ba9ee7bb70a68f4277efcbbbb3dcfd18af 172.26.0.15:6379 Replikate 6de9e9eef91dbae773d8ee1d629c87e1e7e19b82 S: 203e3e33b9f4233b58028289d0ad2dd56e7dfe45 172.26.0.16:6379 Replikate 43e173849bed74f5bd389f9b272ecf0399ae448f Kann ich die obige Konfiguration festlegen? (Geben Sie „Ja“ ein, um zu akzeptieren): ja >>> Knotenkonfiguration aktualisiert >>> Jedem Knoten eine andere Konfigurationsepoche zuweisen >>> Senden von CLUSTER MEET-Nachrichten zum Beitritt zum Cluster Warten auf den Beitritt zum Cluster ... >>> Clusterprüfung durchführen (mit Knoten 172.26.0.11:6379) M: 6de9e9eef91dbae773d8ee1d629c87e1e7e19b82 172.26.0.11:6379 Steckplätze:[0-5460] (5461 Steckplätze) Master 1 zusätzliche Replik(en) S: 92b95f18226903349fb860262d2fe6932d5a8dc2 172.26.0.14:6379 Steckplätze: (0 Steckplätze) Slave Replikate 1e504dc62b7ccc426d513983ca061d1657532fb6 S: 203e3e33b9f4233b58028289d0ad2dd56e7dfe45 172.26.0.16:6379 Steckplätze: (0 Steckplätze) Slave Replikate 43e173849bed74f5bd389f9b272ecf0399ae448f M: 1e504dc62b7ccc426d513983ca061d1657532fb6 172.26.0.13:6379 Steckplätze:[10923-16383] (5461 Steckplätze) Master 1 zusätzliche Replik(en) S: 7e5116ba9ee7bb70a68f4277efcbbbb3dcfd18af 172.26.0.15:6379 Steckplätze: (0 Steckplätze) Slave Replikate 6de9e9eef91dbae773d8ee1d629c87e1e7e19b82 M: 43e173849bed74f5bd389f9b272ecf0399ae448f 172.26.0.12:6379 Steckplätze:[5461-10922] (5462 Steckplätze) Master 1 zusätzliche Replik(en) [OK] Alle Knoten stimmen der Slot-Konfiguration zu. >>> Nach freien Plätzen suchen... >>> Slot-Abdeckung prüfen... [OK] Alle 16384 Slots abgedeckt. 4.2 Verwenden Sie redis-cli, um eine Verbindung zum aktuellen Knoten herzustellen und die Clusterinformationen anzuzeigen: /usr/local/bin # redis-cli -c 127.0.0.1:6379> Cluster-Informationen cluster_state: ok Zugewiesene Clusterslots: 16384 cluster_slots_ok:16384 cluster_slots_pfail:0 Fehler bei Clusterslots: 0 Bekannte Clusterknoten: 6 Clustergröße: 3 cluster_current_epoch:6 cluster_meine_Epoche:1 cluster_stats_messages_ping_sent:91 cluster_stats_messages_pong_sent:95 cluster_stats_messages_sent:186 cluster_stats_messages_ping_received:90 cluster_stats_messages_pong_received:91 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:186 4.3 Versuchen Sie, einen Schlüssel hinzuzufügen # Legen Sie einen Schlüssel fest und geben Sie eine Eingabeaufforderung zurück, dass dieser Schlüssel dem Steckplatz [12539] zugewiesen ist, entsprechend dem Knoten Redis-3 [192.168.0.13]. 127.0.0.1:6379> Schlüssel setzen hallo -> Umgeleitet zum Slot [12539] bei 172.26.0.13:6379 OK # Und redis-cli wechselt zum Knoten redis-3[172.26.0.13] 172.26.0.13:6379> 5 Testen An diesem Punkt können wir sagen, dass wir erfolgreich einen Redis-Cluster lokal mit Docker bereitgestellt haben. /** * Redis-Cluster testen * @author winfun * @date 21.10.2020 17:48 Uhr**/ öffentliche Klasse TestCluster { öffentliche statische void main(String[] args) wirft Exception{ Setze<HostAndPort> Knoten = neues HashSet<>(3); nodes.add(neuer HostAndPort("127.0.0.1",6371)); nodes.add(neuer HostAndPort("127.0.0.1",6372)); nodes.add(neuer HostAndPort("127.0.0.1",6373)); JedisCluster-Cluster = neuer JedisCluster(Knoten); Zeichenfolgenwert = cluster.get("Schlüssel"); System.out.println("get: Schlüssel ist Schlüssel, Wert ist "+Wert); String-Ergebnis = cluster.set("key2","Hallo Welt"); System.out.println("set: Schlüssel ist Schlüssel2, Ergebnis ist "+Ergebnis); cluster.schließen(); } } Das Ergebnis ist jedoch nicht zufriedenstellend und es wird eine Ausnahme zurückgegeben: Daraus können wir schließen, dass es wahrscheinlich unmöglich ist, eine Verbindung zu dem Redis-Cluster herzustellen, den wir in Docker bereitgestellt haben. Wir können das auch sehen, wenn wir JedisCluster mit der lokalen IP und dem zugeordneten Port konfigurieren. Doch unerwartet ruft JedisCluster selbst die Cluster-Metadaten erneut ab. Zu diesem Zeitpunkt sind die IP-Adressen der Knoten alle vom benutzerdefinierten Netzwerk Redis-Net zugewiesenen Subnetze, und der Hostcomputer ist möglicherweise nicht zugänglich (für dieses Problem können wir die Verwendung eines benutzerdefinierten Netzwerks vom Typ Host in Betracht ziehen). 6 Anwendungen werden auch in benutzerdefinierten Netzwerken bereitgestellt Wie testen Sie es also? Ich werde ein einfaches SpringBoot-Projekt schreiben, dann Dockerfile verwenden, um ein Image basierend auf dem vom Projekt generierten JAR-Paket zu erstellen, es dann mit Docker bereitstellen und den bereitgestellten Container zum benutzerdefinierten Netzwerk Redis-Net hinzufügen und es schließlich testen. 6.1 Erstellen Sie ein SpringBoot-Projekt Die Konfiguration ist wie folgt: 6.1.1 pom.xml: Hauptsächlich wurden die Web- und Redis-Starter eingeführt. <Abhängigkeit> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </Abhängigkeit> <Abhängigkeit> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </Abhängigkeit> 6.1.2 Projektanwendung.Eigenschaften: server.port=8080 # Wir können den Containernamen hier auch direkt schreiben, da die Anwendung im selben Netzwerk wie der Redis-Cluster bereitgestellt wird. #spring.redis.cluster.nodes=redis-1:6379,redis-2:6379,redis-3:6379 spring.redis.cluster.nodes=172.26.0.11:6379,172.26.0.12:6379,172.26.0.13:6379 6.1.3 Verantwortlicher ist die: /** * RedisCluster-Test * @author winfun * @date 22.10.2020 15:19 Uhr**/ @RequestMapping("/redisCluster") @RestController öffentliche Klasse RedisClusterController { @Autowired privates StringRedisTemplate redisTemplate; /*** * String: Wert entsprechend dem Schlüssel abrufen * @Autor winfun * @param Schlüssel Schlüssel * @return {@link String } **/ @GetMapping("/get/{key}") öffentliche Zeichenfolge get(@PathVariable("Schlüssel") Zeichenfolge Schlüssel){ gibt redisTemplate.opsForValue().get(Schlüssel) zurück; } /*** * String: Schlüssel/Wert-Paar festlegen * @author winfun * @param Schlüssel Schlüssel * @param Wert Wert * @return {@link String } **/ @GetMapping("/set/{Schlüssel}/{Wert}") öffentliche Zeichenfolge festlegen (@PathVariable("Schlüssel") Zeichenfolgenschlüssel,@PathVariable("Wert") Zeichenfolgenwert) { redisTemplate.opsForValue().set(Schlüssel,Wert); gebe "Erfolg" zurück; } } 6.2 Projekt packen und Image generieren 6.2.1 Verpacken des Projekts in ein Jar-Paket mvn clean-Paket 6.2.2 Bild erzeugen Schreiben Sie die Dockerfile-Datei: VON java:8 WARTUNGSBEARBEITER winfun #jar-Name ist das mit dem Projekt gepackte Jar HINZUFÜGEN redis-cluster-test-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 EINSTIEGSPUNKT ["java","-jar","app.jar"] Gehen Sie dann in das aktuelle Verzeichnis der Dockerfile und führen Sie den folgenden Befehl aus: winfun@localhost redis-cluster-test % docker build -t winfun/rediscluster . Senden des Build-Kontexts an den Docker-Daemon 25,84 MB Schritt 1/5: FROM java:8 8: Aus Bibliothek/Java ziehen 5040bd298390: Ziehen abgeschlossen fce5728aad85: Pull abgeschlossen 76610ec20bf5: Ziehen abgeschlossen 60170fec2151: Ziehen abgeschlossen e98f73de8f0d: Ziehen abgeschlossen 11f7af24ed9c: Ziehen abgeschlossen 49e2d6393f32: Ziehen abgeschlossen bb9cdec9c7f3: Ziehen abgeschlossen Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status: Neueres Image für Java:8 heruntergeladen ---> d23bdf5b1b1b Schritt 2/5: MAINTAINER winfun ---> Wird ausgeführt in a99086ed7e68 Zwischenbehälter entfernen a99086ed7e68 ---> f713578122fc Schritt 3/5: ADD redis-cluster-test-0.0.1-SNAPSHOT.jar app.jar ---> 12ca98d789b8 Schritt 4/5: 8080 freilegen ---> Wird ausgeführt in 833a06f2dd32 Zwischenbehälter entfernen 833a06f2dd32 ---> 82f4e078510d Schritt 5/5: ENTRYPOINT ["java","-jar","app.jar"] ---> Wird ausgeführt in 517a1ea7f138 Zwischenbehälter entfernen 517a1ea7f138 ---> ed8a66ef4eb9 Erfolgreich erstellt ed8a66ef4eb9 Erfolgreich getaggt mit winfun/rediscluster:latest 6.3 Container starten und testen 6.3.1 Starten Sie den Container und fügen Sie ihn dem oben erstellten benutzerdefinierten Netzwerk redis-net hinzu Nach dem Erstellen können wir den Befehl winfun@localhost ~ % Docker-Bilder | grep rediscluster winfun/rediscluster latest ed8a66ef4eb9 vor 52 Minuten 669 MB Verwenden Sie den Befehl winfun@localhost ~ % docker run -it -d -p 8787:8080 --name myrediscluster winfun/rediscluster 705998330f7e6941f5f96d187050d29c4a59f1b16348ebeb5ab0dbc6a1cd63e1 Verwenden Sie winfun@localhost ~ % Docker-Netzwerk verbinden Redis-Net Myrediscluster Wenn wir uns die Details des benutzerdefinierten Netzwerks Redis-Net ansehen, können wir den Container Myrediscluster in den Containern finden und diesem Container ist eine IP-Adresse des benutzerdefinierten Netzwerks Redis-Net zugewiesen. 6.3.2 An diesem Punkt können wir die RedisClusterController-Schnittstelle direkt im Browser aufrufen: Legen Sie einen Schlüssel/Wert fest: Wert nach Schlüssel abrufen: Wie Sie oben sehen können, gibt es absolut kein Problem. Allerdings müssen wir bei jedem Test der Schnittstelle das Image neu erstellen und dann bereitstellen. 6.4 Bridge- und Host-Modi Wir alle wissen, dass der Modus des benutzerdefinierten Netzwerks Redis-Net, das wir oben erstellt haben, der Bridge-Modus ist, also Bridge. Seine größte Funktion besteht darin, das Netzwerk des Containers in Docker vom Hostcomputer zu isolieren. Die IP des Containers und die IP des Hostcomputers sind nicht zugänglich. Wenn JedisCluster zum Betreiben des Redis-Clusters verwendet wird, ist es daher nicht zugänglich, wenn JedisCluster die Knoteninformationen des Clusters als IP des Containers in Docker erhält. Um dieses Problem zu lösen, können wir tatsächlich den Hostmodus verwenden. Sein Prinzip besteht darin, dass der Container die Netzwerkumgebung des Hostcomputers gemeinsam nutzt. In diesem Fall sollte es für JedisCluster kein Problem sein, auf den Redis-Cluster zuzugreifen. Ja, das sollte es, da ich viele Male versucht habe, den Redis-Cluster im Hostmodus bereitzustellen, und bei der Bereitstellung und dem Betrieb mit dem Befehl „redis-cli“ keine Probleme aufgetreten sind. Wenn Sie jedoch JedisCluster zum Zugriff auf den Cluster verwenden, werden nicht einmal die Informationen zu den Clusterknoten abgerufen! ! Sie müssen es also selbst ausprobieren. Weitere Einzelheiten finden Sie im folgenden Artikel: 7. ZuletztIch glaube, mittlerweile hat jeder die Leistungsfähigkeit von Docker erlebt. Bei richtiger Verwendung während der Entwicklung ist es einfach eine Zauberwaffe für die Entwicklung. Sie können problemlos lokal eine vollständige Entwicklungsumgebung einschließlich verschiedener Middleware mit minimalen Systemressourcen erstellen. Dies ist das Ende dieses Artikels über die Docker-Bereitstellung der eigenständigen Pulsar- und Clusterarchitektur Redis (Entwicklungsartefakt). Weitere relevante Inhalte zur Docker-Bereitstellung des Redis-Clusters finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: MySQL-Komplettabsturz: Detaillierte Erklärung der Abfragefilterbedingungen
>>: JS 4 super praktische Tipps zur Verbesserung der Entwicklungseffizienz
Inhaltsverzeichnis iview-admin2.0 integrierte Ber...
Problembeschreibung Ich hatte kürzlich ein Proble...
Installation und Konfiguration von MySQL8.0.22 (s...
Docker-Installation Installieren von Abhängigkeit...
1.Schreiben Sie davor: Als leichtgewichtige Virtu...
Hier ist eine kurze Zusammenfassung der Installat...
Als ich kürzlich CSS studierte, stellte ich fest,...
<br />Originaltext: http://andymao.com/andy/...
1. concat()-Funktion Funktion: Mehrere Zeichenfol...
Batchkommentare in SQL Server Batch-Annotation St...
Das img-Tag in XHTML sollte wie folgt geschrieben...
In requireJS gibt es eine Eigenschaft namens base...
Nextcloud ist ein Open Source- und kostenloses Ne...
Code kopieren Der Code lautet wie folgt: <!DOC...
Vorwort Arrays sind eine spezielle Art von Objekt...