NEWS
(gelöst) Problem mit Redis Sentinel
-
Ich habe einen Proxmox Cluster und da zurzeit 4 NUCs. Ich möchte gerne iob auf redis umstellen (getrennte PRozesse für states und objects) und noch sentinel installieren, bin nach dieser Dokue vorgegangen
https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung"Problem": Wenn ich am Master und am ersten Slave die sentinel Einrichtung prüfe kommt
root@redis-pve1:~# redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_tilt_since_seconds:-1 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=192.168.1.62:6379,slaves=3,sentinels=5 root@redis-pve1:~#
3 Slaves sind richtig aber es müssten insgesamt 4 sentinels sein, nicht 5
Auch Slave 1 zeigt das so an, die beiden anderen Slaves zeigen es richtig anroot@redis-pve3:~# redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_tilt_since_seconds:-1 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=192.168.1.62:6379,slaves=3,sentinels=4 root@redis-pve3:~#
Fail-Over klappt auch nicht, wenn ich auf das Log eines Slaves schaue und den Master anhalte, dann erkennt er nach ca 20 Sekunden, dass der Master weg ist, aber dann passiert nix mehr.
Hat hier jemand eine Idee, wo ich suchen muss um das zu beheben?
4*intel nuc mit proxmox 8.2.5, iob im beta-repository, alle Adapter up-to-date.js-controller 6.0.11, node-js 20.17.0, npm 10.8.2 -
@amg_666 sagte in Problem mit Redis Sentinel:
Ich habe einen Proxmox Cluster und da zurzeit 4 NUCs.
du brauchst aber eine ungerade Anzahl
ansonsten poste mal die redis.conf und die sentinel.conf
es müssen auch +1 sentinel sein als slave.. also hast du 4 slave sollten es 5 sentinels sein
-
@arteck sagte in Problem mit Redis Sentinel:
du brauchst aber eine ungerade Anzahl
mir ist klar, dass bei proxmox HA eine ungrade (eigentlich eine Primzahl) an nodes brauche, damit ein Quorum einen Master bestimmen kann.
Den 4. Node hatte ich zum Testen mit eingehängt, den hab ich jetzt mal deaktiviert.Ich habe für redis getrennte Prozesse für Objects und states.
MASTER
redis statesbind 0.0.0.0 protected-mode no port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no pidfile "/run/redis/redis-server.pid" loglevel notice logfile "/var/log/redis/redis-server.log" databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename "dump.rdb" rdb-del-sync-files no dir "/var/lib/redis" replica-serve-stale-data yes replica-read-only yes repl-diskless-sync yes repl-diskless-sync-delay 5 repl-diskless-sync-max-replicas 0 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100
redis objects
bind 0.0.0.0 protected-mode no port 6380 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes pidfile /run/redis/redis-server2.pid loglevel notice logfile /var/log/redis/redis-server2.log databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb rdb-del-sync-files no dir /var/lib/redis2 replica-serve-stale-data yes replica-read-only yes repl-diskless-sync yes repl-diskless-sync-delay 5 repl-diskless-sync-max-replicas 0 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100bind 0.0.0.0 protected-mode no port 6380 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes pidfile /run/redis/redis-server2.pid loglevel notice logfile /var/log/redis/redis-server2.log databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb rdb-del-sync-files no dir /var/lib/redis2 replica-serve-stale-data yes replica-read-only yes repl-diskless-sync yes repl-diskless-sync-delay 5 repl-diskless-sync-max-replicas 0 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100bind 0.0.0.0 protected-mode no port 6380 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes pidfile /run/redis/redis-server2.pid loglevel notice logfile /var/log/redis/redis-server2.log databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb rdb-del-sync-files no dir /var/lib/redis2 replica-serve-stale-data yes replica-read-only yes repl-diskless-sync yes repl-diskless-sync-delay 5 repl-diskless-sync-max-replicas 0 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100bind 0.0.0.0 protected-mode no port 6380 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes pidfile /run/redis/redis-server2.pid loglevel notice logfile /var/log/redis/redis-server2.log databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb rdb-del-sync-files no dir /var/lib/redis2 replica-serve-stale-data yes replica-read-only yes repl-diskless-sync yes repl-diskless-sync-delay 5 repl-diskless-sync-max-replicas 0 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100
sentinel
bind 0.0.0.0 port 26379 daemonize no pidfile "/var/run/sentinel/redis-sentinel.pid" logfile "/var/log/redis/redis-sentinel.log" dir "/var/lib/redis" protected-mode no sentinel myid ad045114c4d58ddb8fa909a991ccb6f0a760ea2e sentinel deny-scripts-reconfig yes sentinel monitor states-master 192.168.1.60 6380 2 sentinel failover-timeout states-master 20000 sentinel config-epoch states-master 8394 sentinel leader-epoch states-master 8394 sentinel monitor objects-master 192.168.1.60 6379 2 sentinel failover-timeout objects-master 20000 sentinel config-epoch objects-master 0 sentinel leader-epoch objects-master 8451
SLAVE1
redis statesbind 0.0.0.0 protected-mode no port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no pidfile "/run/redis/redis-server.pid" loglevel notice logfile "/var/log/redis/redis-server.log" databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename "dump.rdb" rdb-del-sync-files no dir "/var/lib/redis" replicaof 192.168.1.60 6379 replica-serve-stale-data yes replica-read-only yes repl-diskless-sync yes repl-diskless-sync-delay 5 repl-diskless-sync-max-replicas 0 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100
redis objects
bind 0.0.0.0 protected-mode no port 6380 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no pidfile "/run/redis/redis-server2.pid" loglevel notice logfile "/var/log/redis/redis-server2.log" databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename "dump.rdb" rdb-del-sync-files no dir /var/lib/redis2 replicaof 192.168.1.60 6380 replica-serve-stale-data yes replica-read-only yes repl-diskless-sync yes repl-diskless-sync-delay 5 repl-diskless-sync-max-replicas 0 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100
sentinel
bind 0.0.0.0 port 26379 daemonize no pidfile "/var/run/sentinel/redis-sentinel.pid" logfile "/var/log/redis/redis-sentinel.log" dir "/var/lib/redis" protected-mode no sentinel myid 44fb53a16845f7cb919950f55f84a2b968ef2248 sentinel deny-scripts-reconfig yes sentinel monitor states-master 192.168.1.60 6380 2 sentinel failover-timeout states-master 20000 sentinel config-epoch states-master 8394 sentinel leader-epoch states-master 8394 sentinel monitor objects-master 192.168.1.60 6379 2 sentinel failover-timeout objects-master 20000 sentinel config-epoch objects-master 0 sentinel leader-epoch objects-master 8451
-
die redis läuft nicht rund
also nach und nach
am Master sieht die redis konfig gut aus (ich pick mir die states raus, die objects müssen auch so) aber da fehlen Einträge, hast du die standrad config übernommen ??
am Slave auch ..also
systemsctl stop redis-server systemsctl stop redis-sentinel
dann auf beiden Maschienen...
dann die dump datei (sollte hier sein /var/lib/redis) auf dem slave löschendann Master
systemsctl start redis-server
danach auf dem slave
systemsctl start redis-server
jetzt sollte die dump Datei vom master genauso gross sein wie die auf dem Slave
wenn nicht Log posten vom Master und Salve /var/log/redis/redis-server.log
erst wenn das sauber läuft können wir weiter machen -
ich habe auf allen Maschienen Redis/Redis-Sentinel gestoppt und dann die dumps gelöscht.
nach neuem Start von redis und redis-sentinel habe ich unterschiedlich große Dumps auf den Maschinen
Masterls -i /var/lib/redis/ 80995 dump.rdb 65907 temp-297.rdb
Slave1
ls -i /var/lib/redis/ 81228 dump.rdb
Slave2
ls -i /var/lib/redis/ 50644 dump.rdb
redis.conf master
bind 0.0.0.0 protected-mode no port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no pidfile "/run/redis/redis-server.pid" loglevel notice 2Blogfile "/var/log/redis/redis-server.log" databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename "dump.rdb" rdb-del-sync-files no dir "/var/lib/redis" replica-serve-stale-data yes replica-read-only yes repl-diskless-sync yes repl-diskless-sync-delay 5 repl-diskless-sync-max-replicas 0 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100 acllog-max-len 128 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no lazyfree-lazy-user-del no lazyfree-lazy-user-flush no oom-score-adj no oom-score-adj-values 0 200 800 disable-thp yes appendonly no appendfilename "appendonly.aof" appenddirname "appendonlydir" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes aof-timestamp-enabled no slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-listpack-entries 512 hash-max-listpack-value 64 list-max-listpack-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-listpack-entries 128 zset-max-listpack-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4kb stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes jemalloc-bg-thread yes
redis conf slave
bind 0.0.0.0 protected-mode no port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no pidfile "/run/redis/redis-server.pid" loglevel notice logfile "/var/log/redis/redis-server.log" databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename "dump.rdb" rdb-del-sync-files no dir "/var/lib/redis" replicaof 192.168.1.60 6379 replica-serve-stale-data yes replica-read-only yes repl-diskless-sync yes repl-diskless-sync-delay 5 repl-diskless-sync-max-replicas 0 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100 acllog-max-len 128 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no lazyfree-lazy-user-del no lazyfree-lazy-user-flush no oom-score-adj no oom-score-adj-values 0 200 800 disable-thp yes appendonly no appendfilename "appendonly.aof" appenddirname "appendonlydir" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes aof-timestamp-enabled no slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-listpack-entries 512 hash-max-listpack-value 64 list-max-listpack-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-listpack-entries 128 zset-max-listpack-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4kb stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes jemalloc-bg-thread yes # Generated by CONFIG REWRITE save 3600 1 save 300 100 save 60 10000 supervised systemd latency-tracking-info-percentiles 50 99 99.9 user default on nopass sanitize-payload ~* &* +@all
-
@amg_666 sagte in Problem mit Redis Sentinel:
nach neuem Start von redis und redis-sentinel habe ich unterschiedlich große Dumps auf den Maschinen
den sentinel erstmal aus lassen.. das bringt nix wenn redis nicht syncron ist
ist das die ip von master 192.168.1.60
ausserdem ... nimm bitte die standard konfig ..pimpen kannst du später immer noch..
da änderst du NUR
bind 0.0.0.0
af beiden maschienen
und auf dem slave ganz unten hinzufügen
replicaof 192.168.1.60 6379
-
@arteck ja, master hat .60, die slaves dann .61 und .62
Erstmal vielen Dank für deine Unterstützung soweit, aber ich baue das grad auf weil ich iob auf redis umstellen will. Wenn da jetzt im Redis irgendwas "grundsätzlich" verkorkst ist, soll ich da nicht lieber die Container (ist eine proxmox installation) plattmachen und nochmal sauber bei Null aufsetzen ?
-
@arteck sagte in Problem mit Redis Sentinel:
ausserdem ... nimm bitte die standard konfig ..
Ich hab da aber nix (wissentlich) verstellt/"optimiert".
was ist die Standard konfig ? Die müsste doch bei der Installation von rdis automatisch greifen, oder? -
wenn du kannst dann installier die redis neu bitte..
dann wie schon geschrieben
auf dem master die
bind 0.0.0.0
ändern
und auf dem slave
bind 0.0.0.0
und
replicaof 192.168.1.60 6379
als letzte zeile hinzufügen
-
@arteck ok, danke. Ich setze neu auf und melde mich dann nochmal, das wird aber erst am Wochenende passieren.
-
@amg_666 kein stress..
-
@arteck Kannst du mir nochmal helfen? Ich hab jetzt doch schon heute auf allen 3 nodes die redis container plattgemacht und dann neu aufgesetzt, streng nach Anleitung.
Teil1 redis einrichten -> alles ok redis-cli info replication hat auf dem Master gezeigt, dass er Master ist und 2 Slaves da sind.Ich habe dann einen Failover-Test gemacht und den Master (192.168.1.60) angehalten. Darauf wurde nach kurzer Zeit der Slave2 (192.168.1.62) zum Master, dann habe ich den Master wieder hochgefahren.
- redis Instanz für objects angelegt auf allen nodes, hat funktioniert
ps -ef | grep redis redis 121 1 0 17:01 ? 00:00:04 /usr/bin/redis-server 0.0.0.0:6379 redis 122 1 0 17:01 ? 00:00:04 /usr/bin/redis-server 0.0.0.0:6380
Dann habe ich sentinel angelegt, das hat auch funktioniert und mir 1 Master, 2 Slaves und 3 Sentinels angezeigt.
Dann habe ich die Sentinel.conf erweitert, damit sie beide redis Prozesse überwacht:
bind 0.0.0.0 port 26379 daemonize yes pidfile "/var/run/sentinel/redis-sentinel.pid" logfile "/var/log/redis/redis-sentinel.log" dir "/var/lib/redis" protected-mode no sentinel myid 9eebf305c5cd77bae72f87aa9eccf0ce74dff891 sentinel deny-scripts-reconfig yes sentinel monitor objects-master 192.168.1.60 6379 2 sentinel failover-timeout objects-master 20000 sentinel config-epoch objects-master 0 sentinel leader-epoch objects-master 0 sentinel monitor states-master 192.168.1.60 6380 2 sentinel failover-timeout states-master 20000 sentinel config-epoch states-master 0 sentinel leader-epoch states-master 0
Die sentinel.con ist auf allen nodes gleich, natürlich bis auf "myid"
Problem:
redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:2 sentinel_tilt:0 sentinel_tilt_since_seconds:-1 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=objects-master,status=odown,address=192.168.1.60:6379,slaves=0,sentinels=3 master1:name=states-master,status=ok,address=192.168.1.60:6380,slaves=2,sentinels=3
Er zeigt 2 Master an (korrekt), aber für die Objects (Port 6379) 0 Slaves (????)
Dann ist mir noch aufgefallen, dass 192.168.1.60 nicht mehr Master ist (wahrscheinlich wegen meines Failover Tests), das hat er nach dem Starten des Prozesses nicht wieder zurückgeändert:root@redis1:~# redis-cli info replication # Replication role:slave master_host:192.168.1.62 master_port:6379 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_read_repl_offset:217785 slave_repl_offset:217785 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:282bd0a72177c2eaff3e1e3b2e58cb341290f627 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:217785 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:75236 repl_backlog_histlen:142550
Der 192.168.2 wird als Master angezeigt.
-
Hat sich erledigt. Irgendwie hat er das Failover nicht richtig zurück genommen, da war für Port 6379 kein Master eingetragen. Ich habe auf dem Master (192.168.1.60) redis und redis-sentinel angehalten, die redis.config geöffnet und alles was nach
# Generated by CONFIG REWRITE
kommt gelöscht. Dann redis und redis-sentinel neu gestartet, jetzt läuft alles wie gewünscht