NEWS
Synology Docker Multihost
-
Hallo Leute,
ich möchte ein Multihost System mit meiner Synology (Docker) und einem Raspberry verbinden.Auf der Synology läuft in Docker:
- Portainer
- iobroker
- redis
Multihost ist lt. iobroker Doku aktiviert - link
Tricky war das setzen der Redis.conf, da es das file einfach nicht gibt.
Angeblich sollte das aber mit folgendem code im redis container funktionieren:root@818c4be48c4f:/data# redis-cli 127.0.0.1:6379> set bind 0.0.0.0 OK 127.0.0.1:6379> set protected_mode no OK 127.0.0.1:6379> save OK (1.43s) 127.0.0.1:6379> quit
Auf dem Host hab ich die mit iobroker setup custom folgendes eingestellt:
iobroker setup custom Current configuration: - Objects database: - Type: file - Host/Unix Socket: 127.0.0.1 - Port: 9001 - States database: - Type: redis - Host/Unix Socket: 172.18.0.3 - Port: 6379 - Data Directory: ../../iobroker-data/
Gestartet mit:
iobroker multihost enable Multihost discovery server activated on this host. If iobroker is currently not running please start befeore trying to discover this host. Important: Multihost discovery works with UDP packets. Make sure they are routed correctly in your network. If you use Docker you also need to configure this correctly. Multihost discovery will be automatically deactivated after 15 minutes. If you want to activate it permanently use the --persist flag Discovery authentication activated. Enter secret phrase for connection: **** Repeat secret phrase for connection: **** Changing objects server to accept connections on all IP addresses. Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf Change "bind 127.0.0.1" to "bind 0.0.0.0" or to others. Please restart ioBroker for the changes to take effect: "iobroker restart" Multihost discovery server: enabled Discovery authentication: enabled Persistent activation: disabled Objects: file on 0.0.0.0 States: redis on 172.18.0.3
Am Slave ist folgendes eingestellt:
iobroker setup custom Current configuration: - Objects database: - Type: file - Host/Unix Socket: 192.168.1.14 - Port: 9001 - States database: - Type: redis - Host/Unix Socket: 192.168.1.14 - Port: 6379 - Data Directory: ../../iobroker-data/ - Host name: IOB_raspberry
Auf dem Slave kann ich mich aber verdammt noch mal nicht verbinden. Dort bekomme ich immer folgende Fehlermeldung:
$ iobroker multihost connect No connection to states 192.168.1.14:6379[redis]
Nach einer wirklich schlaflosen Nacht und einigen Bier versuche ich somit auf diesem Weg um eure Hilfe zu bitten. Ich seh den Wald vor lauter Bäumen nicht mehr.
Dankeschön!
-
@skol sagte in Synology Docker Multihost:
Auf dem Slave kann ich mich aber verdammt noch mal nicht verbinden. Dort bekomme ich immer folgende Fehlermeldung:
die Krux mit Containern! Deswegen nutze ich sie nicht.
nur ein Hinweis: sind alle Ports durchgereicht?
dann bin ich leider wieder raus -
Tja leider brauch ich Docker...
NetStat Synology - 192.168.1.14
root@IOB_Synology:/opt/iobroker# netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:46208 localhost:9001 ESTABLISHED tcp 0 0 localhost:9001 localhost:46208 ESTABLISHED tcp 0 0 localhost:9001 localhost:46180 ESTABLISHED tcp 0 0 IOB_Synology:58226 redis.iob_private:6379 ESTABLISHED tcp 0 0 localhost:46182 localhost:9001 ESTABLISHED tcp 0 0 IOB_Synology:58236 redis.iob_private:6379 ESTABLISHED tcp 0 0 IOB_Synology:58224 redis.iob_private:6379 ESTABLISHED tcp 0 0 localhost:9001 localhost:46206 ESTABLISHED tcp 0 0 localhost:9001 localhost:46182 ESTABLISHED tcp 0 0 IOB_Synology:58234 redis.iob_private:6379 ESTABLISHED tcp 0 0 localhost:9001 localhost:46172 ESTABLISHED tcp 0 0 localhost:9001 localhost:46204 ESTABLISHED tcp 0 0 IOB_Synology:9001 192.168.1.11:42354 ESTABLISHED tcp 0 0 localhost:46178 localhost:9001 ESTABLISHED tcp 0 0 localhost:46170 localhost:9001 ESTABLISHED tcp 0 0 localhost:46172 localhost:9001 ESTABLISHED tcp 0 0 IOB_Synology:58262 redis.iob_private:6379 ESTABLISHED tcp 0 0 IOB_Synology:58260 redis.iob_private:6379 ESTABLISHED tcp 0 0 IOB_Synology:58264 redis.iob_private:6379 ESTABLISHED tcp 0 0 localhost:9001 localhost:46178 ESTABLISHED tcp 0 0 localhost:9001 localhost:46170 ESTABLISHED tcp 0 0 localhost:46206 localhost:9001 ESTABLISHED tcp 0 0 IOB_Synology:9001 192.168.1.11:42346 ESTABLISHED tcp 0 0 localhost:46180 localhost:9001 ESTABLISHED tcp 0 0 IOB_Synology:58238 redis.iob_private:6379 ESTABLISHED tcp 0 0 localhost:46204 localhost:9001 ESTABLISHED tcp6 0 0 iobroker.iob_publi:8081 192.168.1.28:63176 ESTABLISHED Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 3 [ ] STREAM CONNECTED 2504088 unix 3 [ ] STREAM CONNECTED 2504091 unix 3 [ ] STREAM CONNECTED 2504945 unix 3 [ ] STREAM CONNECTED 2504947 unix 3 [ ] STREAM CONNECTED 2504089 unix 3 [ ] STREAM CONNECTED 2504946 unix 3 [ ] STREAM CONNECTED 2504948 unix 3 [ ] STREAM CONNECTED 2504090 root@IOB_Synology:/opt/iobroker#
Netstat Raspberry (Slave) - 192.168.1.11
Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 64 192.168.1.11:ssh 192.168.1.28:50225 ESTABLISHED tcp 0 0 192.168.1.11:55316 192.168.1.14:9001 ESTABLISHED tcp 0 0 192.168.1.11:55310 192.168.1.14:9001 ESTABLISHED tcp 0 0 192.168.1.11:48260 192.168.1.14:9001 TIME_WAIT tcp 0 0 192.168.1.11:48262 192.168.1.14:9001 TIME_WAIT
-
Eventuell liegt es doch an der Verbindung zu Redis.
Wie stelle ich unter Portainer den Pfad zu dieser verdammten redis.conf ein?Redis hätte gerne folgendes im Startcommand - Was geb ich da beim Portainer ein?
docker run -v /myredis/conf:/usr/local/etc/redis --name myredis redis redis-server /usr/local/etc/redis/redis.conf
-
@skol sagte in Synology Docker Multihost:
Redis hätte gerne folgendes im Startcommand - Was geb ich da beim Portainer ein?
docker run -v /myredis/conf:/usr/local/etc/redis --name myredis redis redis-server /usr/local/etc/redis/redis.conf
-
Danke...
Wieder ein Schritt weiter.
Es lag wirklich an den IP Settings.
Läuft Redis unter Docker so muss man beim Verbinden vom iobroker slave andere Verbindungsdaten eingebeniobroker setup custom Current configuration: - Objects database: - Type: file - Host/Unix Socket: 192.168.1.14 -> IP Adresse Iobroker Master - Port: 9001 - States database: - Type: redis - Host/Unix Socket: 192.168.1.10 -> IP Adresse Docker System - Port: 6379 - Data Directory: ../../iobroker-data/ - Host name: IOB_raspberry
Damit hats dann schlussendlich geklappt. Was so ein paar Zahlen ausmachen können.
-
@skol
Oh man, docker nicht als vm Ersatz einsetzen
und alles in ein Image installieren.
Lieber 2 Container erstellen und die netztechnisch einkapseln
So kannst du jeden Container einfach upgraden falls es notwendig ist.
So wie du es jetzt gemacht hast musst du beim Upgrade von Iobroker
Auch gleich noch Redis neu installierenMit docker-compose, was in portainer stacks genannt wird, sind solle zusammengehörenden Services auch wirklich einfach erstellt.
Ich füge nachher mal meine Definition hier an. Ich verwende allerdings ein macvlan, was den Stress mit Port mappings noch weiter reduziert.
so sieht meine docker-compose/stacks aus
version: '3' services: iobrokerprod4: restart: always image: buanet/iobroker:latest container_name: iobrokerprod4 hostname: iobrokerprod4 ports: - "8081:8081" environment: SETGID: 1001 SETUID: 1001 volumes: - /home/iobroker/docker/volume/iobroker_prod4:/opt/iobroker - /media/iobroker_backup/:/opt/iobroker/backup networks: dockerMACVLAN: ipv4_address: 192.168.1.85 iobrokerprod4: redis4: image: "redis:alpine" volumes: - /home/iobroker/docker/volume/redis_prod4:/data networks: iobrokerprod4: networks: dockerMACVLAN: external: true iobrokerprod4:
anmerkungen:
- die servicenamen iobrokerprod4 und redis4 legt docker normalerweise innerhalb der container als hostnamen an, daher sind die container im gemeinsamen netzwerk darunter auch ansprechbar und man muss sich nicht mit den internen ip adressen rumärgern
- in dieser konfiguration ist nur der iobroker unter einer eigenen macvlan ip adresse im lan erreichbar. dadurch das iobroker und redis in einem weiteren netzwerk konfiguriert worden sind (erkennbar, das bei beiden noch ipbrokerprod4 eingetragen ist, kann iobroker redis erreichen. redis ist aber erstmal von keinem anderen container erreichbar und brauch daher auch keine eigene ip adresse.
- im iobroker habe ich über die custom konfiguration dann einfach den redis konfigurier. als ip adresse dann einfach den hostnamen (also hier redis4) eingeben. mittlerweile hat das iobroker image auch environment variablen, da könntest du dir selbst das sparen indem du die daten direkt hier in der docker-compose/stacks-konfiguration mit einträgs
- alle volatilen daten wurden als volume definiert und auf die eine festplatte gelegt, von wo sie dann weggesichert werden können, sofern man nicht iobroker backup verwendet. diese vorgehensweise nehm ich allerdings bei allen meinen containern. dann ist es einheitlich
- mit dieser konfiguration bist du in der lage jeden container einzeln voneinander upzugraden, ohne den anderen container zu beeinflussen.
-
@oliverio Danke für die Hilfe
Nachdem mir gerade alles abgestürzt ist (frage lieber nicht) bin ich gerade am Neu aufsetzen.
Idee wäre das mit Stacks zu probieren, da es wirklich schneller geht - wenns läuft.Ich hätte es nach deiner Anleitung probiert mit (da die genial einfacher ist)
version: '3' services: iobroker: restart: always image: buanet/iobroker:latest-v9 container_name: iobroker hostname: iob_synology ports: - "8081:8081" environment: - IOB_STATESDB_HOST=redis - IOB_STATESDB_PORT=6379 - IOB_STATESDB_TYPE=redis - IOB_MULTIHOST=master volumes: - /volume1/docker/iobroker_data:/opt/iobroker networks: dockerMACVLAN: ipv4_address: 192.168.1.14 internal: depends_on: - redis redis: container_name: redis image: redis:latest restart: always ports: - "6379:6379" volumes: - /volume1/docker/redis_data:/data mem_swappiness: -1 networks: internal: influxdb: container_name: influxdb image: influxdb:1.8.10 hostname: influxdb restart: always networks: internal: ports: - "8086:8086" volumes: - /volume1/docker/influxdb_data:/var/lib/influxdb networks: dockerMACVLAN: external: true internal:
Aber es wird immer rumgejammert beim dockerMACVLAN
failed to deploy a stack: service "iobroker" refers to undefined network dockerMACVLAN: invalid compose project
Hast du eine Idee woran es bei mir noch scheitern könnte?
Danke! -
@skol
Ja
Das macvlan habe ich vorab erstellt.
Das docker weiß er muss es nicht erstellen steht da external tru dran.
Also musst du noch das macvlan erstellen.
Ich habe den Namen dockerMACVLAN gewählt, du kannst auch einen anderen Namen wählen, musst halt dann die Anweisungen anpassenAls Anleitung kannst du hier schauen
https://smarthome.buanet.de/2020/09/macvlan-ueber-portainer-einrichten/ -
@oliverio Herr im Himmel, ich könnte dir die Füße küssen. Jetzt läuft wieder alles wie es soll. Bei Redis war auch noch ein kleiner Fehler. Mit den Stacks lässt sich wirklich alles super einfach starten.
version: '3' services: iobroker: restart: always image: buanet/iobroker:latest-v9 container_name: iobroker hostname: IOB_synology ports: - "8081:8081" environment: - IOB_STATESDB_HOST=redis - IOB_STATESDB_PORT=6379 - IOB_STATESDB_TYPE=redis - IOB_MULTIHOST=master volumes: - /volume1/docker/iobroker_data:/opt/iobroker networks: iob_public: ipv4_address: 192.168.1.14 iob_private: depends_on: - redis redis: container_name: redis image: redis:latest restart: always ports: - "6379:6379" volumes: - /volume1/docker/redis_data:/data - /volume1/docker/redis_data:/usr/local/etc/redis mem_swappiness: -1 command: redis-server /usr/local/etc/redis/redis.conf networks: iob_private: influxdb: container_name: influxdb image: influxdb:1.8.10 hostname: influxdb restart: always networks: iob_private: ports: - "8086:8086" volumes: - /volume1/docker/influxdb_data:/var/lib/influxdb networks: iob_public: external: true iob_private: