Redis 集群-主从复制(基于多主机)
Redis 集群-主从复制(基于多主机)Redis 单机#mermaid-svg-to3iWLl0LzYJG1cv .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-to3iWLl0LzYJG1cv .l
Redis 集群-主从复制(基于多主机)
Redis 单机
Redis 主从复制
一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库。Master不管Slave, Slave去找Master,Slave与Slave之间是无法进行通讯的。
同步的工作方式如下:
主机启动后台保存过程以生成RDB文件。同时,它开始缓冲从客户端收到的所有新写命令。后台保存完成后,主数据库将数据库文件传输到从数据库,从数据库将其保存在磁盘上,然后将其加载到内存中。然后,主服务器将所有缓冲的命令发送到副本。这是作为命令流完成的,并且与Redis协议本身的格式相同。
Redis 主从架构设计
Redis 配置
Redis Master
IP:192.168.1.136
-
开放端口6379
# 查询端口是否打开 $ sudo firewall-cmd --query-port=6379/tcp no # 永久打开端口 $ sudo firewall-cmd --add-port=6379/tcp --permanent success # 重新载入配置 $ sudo firewall-cmd --reload success # 再次查询端口是否打开 $ sudo firewall-cmd --query-port=6379/tcp yes -
安装redis
$ sudo apt install redis-server -
让其他服务器能够连接上Master
修改redis.conf文件
$ sudo vim /etc/redis/redis.conf bind 127.0.0.1 ::1将
bind 127.0.0.1 ::1注释掉。# bind 127.0.0.1 ::1- bind:绑定的主机
-
关闭保护模式
127.0.0.1:6379> CONFIG SET protected-mode no OK 127.0.0.1:6379> CONFIG GET protected-mode 1) "protected-mode" 2) "no"注意: 如果后面会设置Master密码,直接忽略该步骤,此处关闭保护模式在没有设置密码的情况下,让其他服务器能连接该服务器。
-
进入redis
$ redis-cli -
查看redis所有的配置
127.0.0.1:6379> CONFIG GET * 1) "dbfilename" 2) "dump.rdb" 3) "requirepass" 4) "" 5) "masterauth" 6) "" 7) "cluster-announce-ip" 8) "" 9) "unixsocket" 10) "" 11) "logfile" 12) "/var/log/redis/redis-server.log" 13) "pidfile" 14) "/var/run/redis/redis-server.pid" 15) "slave-announce-ip" 16) "" 17) "replica-announce-ip" 18) "" 19) "maxmemory" 20) "0" 21) "proto-max-bulk-len" 22) "536870912" 23) "client-query-buffer-limit" 24) "1073741824" 25) "maxmemory-samples" 26) "5" 27) "lfu-log-factor" 28) "10" 29) "lfu-decay-time" 30) "1" 31) "timeout" 32) "0" 33) "active-defrag-threshold-lower" 34) "10" 35) "active-defrag-threshold-upper" 36) "100" 37) "active-defrag-ignore-bytes" 38) "104857600" 39) "active-defrag-cycle-min" 40) "5" 41) "active-defrag-cycle-max" 42) "75" 43) "active-defrag-max-scan-fields" 44) "1000" 45) "auto-aof-rewrite-percentage" 46) "100" 47) "auto-aof-rewrite-min-size" 48) "67108864" 49) "hash-max-ziplist-entries" 50) "512" 51) "hash-max-ziplist-value" 52) "64" 53) "stream-node-max-bytes" 54) "4096" 55) "stream-node-max-entries" 56) "100" 57) "list-max-ziplist-size" 58) "-2" 59) "list-compress-depth" 60) "0" 61) "set-max-intset-entries" 62) "512" 63) "zset-max-ziplist-entries" 64) "128" 65) "zset-max-ziplist-value" 66) "64" 67) "hll-sparse-max-bytes" 68) "3000" 69) "lua-time-limit" 70) "5000" 71) "slowlog-log-slower-than" 72) "10000" 73) "latency-monitor-threshold" 74) "0" 75) "slowlog-max-len" 76) "128" 77) "port" 78) "6379" 79) "cluster-announce-port" 80) "0" 81) "cluster-announce-bus-port" 82) "0" 83) "tcp-backlog" 84) "511" 85) "databases" 86) "16" 87) "repl-ping-slave-period" 88) "10" 89) "repl-ping-replica-period" 90) "10" 91) "repl-timeout" 92) "60" 93) "repl-backlog-size" 94) "1048576" 95) "repl-backlog-ttl" 96) "3600" 97) "maxclients" 98) "10000" 99) "watchdog-period" 100) "0" 101) "slave-priority" 102) "100" 103) "replica-priority" 104) "100" 105) "slave-announce-port" 106) "0" 107) "replica-announce-port" 108) "0" 109) "min-slaves-to-write" 110) "0" 111) "min-replicas-to-write" 112) "0" 113) "min-slaves-max-lag" 114) "10" 115) "min-replicas-max-lag" 116) "10" 117) "hz" 118) "10" 119) "cluster-node-timeout" 120) "15000" 121) "cluster-migration-barrier" 122) "1" 123) "cluster-slave-validity-factor" 124) "10" 125) "cluster-replica-validity-factor" 126) "10" 127) "repl-diskless-sync-delay" 128) "5" 129) "tcp-keepalive" 130) "300" 131) "cluster-require-full-coverage" 132) "yes" 133) "cluster-slave-no-failover" 134) "no" 135) "cluster-replica-no-failover" 136) "no" 137) "no-appendfsync-on-rewrite" 138) "no" 139) "slave-serve-stale-data" 140) "yes" 141) "replica-serve-stale-data" 142) "yes" 143) "slave-read-only" 144) "yes" 145) "replica-read-only" 146) "yes" 147) "slave-ignore-maxmemory" 148) "yes" 149) "replica-ignore-maxmemory" 150) "yes" 151) "stop-writes-on-bgsave-error" 152) "yes" 153) "daemonize" 154) "yes" 155) "rdbcompression" 156) "yes" 157) "rdbchecksum" 158) "yes" 159) "activerehashing" 160) "yes" 161) "activedefrag" 162) "no" 163) "protected-mode" 164) "yes" 165) "repl-disable-tcp-nodelay" 166) "no" 167) "repl-diskless-sync" 168) "no" 169) "aof-rewrite-incremental-fsync" 170) "yes" 171) "rdb-save-incremental-fsync" 172) "yes" 173) "aof-load-truncated" 174) "yes" 175) "aof-use-rdb-preamble" 176) "yes" 177) "lazyfree-lazy-eviction" 178) "no" 179) "lazyfree-lazy-expire" 180) "no" 181) "lazyfree-lazy-server-del" 182) "no" 183) "slave-lazy-flush" 184) "no" 185) "replica-lazy-flush" 186) "no" 187) "dynamic-hz" 188) "yes" 189) "maxmemory-policy" 190) "noeviction" 191) "loglevel" 192) "notice" 193) "supervised" 194) "no" 195) "appendfsync" 196) "everysec" 197) "syslog-facility" 198) "local0" 199) "appendonly" 200) "no" 201) "dir" 202) "/var/lib/redis" 203) "save" 204) "900 1 300 10 60 10000" 205) "client-output-buffer-limit" 206) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60" 207) "unixsocketperm" 208) "0" 209) "slaveof" 210) "" 211) "notify-keyspace-events" 212) "" 213) "bind" 214) "" 127.0.0.1:6379> -
设置密码
127.0.0.1:6379> CONFIG SET requirepass 123456 OK -
退出之后重新登录
127.0.0.1:6379> exit $ redis-cli 127.0.0.1:6379> auth 123456 OK -
查看密码
127.0.0.1:6379> CONFIG GET requirepass 1) "requirepass" 2) "123456" -
使此配置更改永久生效
127.0.0.1:6379> CONFIG REWRITE OK如果不使用该命令将配置永久保存,在redis服务重启之后,该配置就会消失。
-
退出redis
127.0.0.1:6379> exit
Redis Slave1
IP:192.168.1.126
-
安装redis
$ sudo apt install redis-server -
进入redis
$ redis-cli -
查看redis所有的配置
127.0.0.1:6379> CONFIG GET * 1) "dbfilename" 2) "dump.rdb" 3) "requirepass" 4) "" 5) "masterauth" 6) "" 7) "cluster-announce-ip" 8) "" 9) "unixsocket" 10) "" 11) "logfile" 12) "/var/log/redis/redis-server.log" 13) "pidfile" 14) "/var/run/redis/redis-server.pid" 15) "slave-announce-ip" 16) "" 17) "replica-announce-ip" 18) "" 19) "maxmemory" 20) "0" 21) "proto-max-bulk-len" 22) "536870912" 23) "client-query-buffer-limit" 24) "1073741824" 25) "maxmemory-samples" 26) "5" 27) "lfu-log-factor" 28) "10" 29) "lfu-decay-time" 30) "1" 31) "timeout" 32) "0" 33) "active-defrag-threshold-lower" 34) "10" 35) "active-defrag-threshold-upper" 36) "100" 37) "active-defrag-ignore-bytes" 38) "104857600" 39) "active-defrag-cycle-min" 40) "5" 41) "active-defrag-cycle-max" 42) "75" 43) "active-defrag-max-scan-fields" 44) "1000" 45) "auto-aof-rewrite-percentage" 46) "100" 47) "auto-aof-rewrite-min-size" 48) "67108864" 49) "hash-max-ziplist-entries" 50) "512" 51) "hash-max-ziplist-value" 52) "64" 53) "stream-node-max-bytes" 54) "4096" 55) "stream-node-max-entries" 56) "100" 57) "list-max-ziplist-size" 58) "-2" 59) "list-compress-depth" 60) "0" 61) "set-max-intset-entries" 62) "512" 63) "zset-max-ziplist-entries" 64) "128" 65) "zset-max-ziplist-value" 66) "64" 67) "hll-sparse-max-bytes" 68) "3000" 69) "lua-time-limit" 70) "5000" 71) "slowlog-log-slower-than" 72) "10000" 73) "latency-monitor-threshold" 74) "0" 75) "slowlog-max-len" 76) "128" 77) "port" 78) "6379" 79) "cluster-announce-port" 80) "0" 81) "cluster-announce-bus-port" 82) "0" 83) "tcp-backlog" 84) "511" 85) "databases" 86) "16" 87) "repl-ping-slave-period" 88) "10" 89) "repl-ping-replica-period" 90) "10" 91) "repl-timeout" 92) "60" 93) "repl-backlog-size" 94) "1048576" 95) "repl-backlog-ttl" 96) "3600" 97) "maxclients" 98) "10000" 99) "watchdog-period" 100) "0" 101) "slave-priority" 102) "100" 103) "replica-priority" 104) "100" 105) "slave-announce-port" 106) "0" 107) "replica-announce-port" 108) "0" 109) "min-slaves-to-write" 110) "0" 111) "min-replicas-to-write" 112) "0" 113) "min-slaves-max-lag" 114) "10" 115) "min-replicas-max-lag" 116) "10" 117) "hz" 118) "10" 119) "cluster-node-timeout" 120) "15000" 121) "cluster-migration-barrier" 122) "1" 123) "cluster-slave-validity-factor" 124) "10" 125) "cluster-replica-validity-factor" 126) "10" 127) "repl-diskless-sync-delay" 128) "5" 129) "tcp-keepalive" 130) "300" 131) "cluster-require-full-coverage" 132) "yes" 133) "cluster-slave-no-failover" 134) "no" 135) "cluster-replica-no-failover" 136) "no" 137) "no-appendfsync-on-rewrite" 138) "no" 139) "slave-serve-stale-data" 140) "yes" 141) "replica-serve-stale-data" 142) "yes" 143) "slave-read-only" 144) "yes" 145) "replica-read-only" 146) "yes" 147) "slave-ignore-maxmemory" 148) "yes" 149) "replica-ignore-maxmemory" 150) "yes" 151) "stop-writes-on-bgsave-error" 152) "yes" 153) "daemonize" 154) "yes" 155) "rdbcompression" 156) "yes" 157) "rdbchecksum" 158) "yes" 159) "activerehashing" 160) "yes" 161) "activedefrag" 162) "no" 163) "protected-mode" 164) "yes" 165) "repl-disable-tcp-nodelay" 166) "no" 167) "repl-diskless-sync" 168) "no" 169) "aof-rewrite-incremental-fsync" 170) "yes" 171) "rdb-save-incremental-fsync" 172) "yes" 173) "aof-load-truncated" 174) "yes" 175) "aof-use-rdb-preamble" 176) "yes" 177) "lazyfree-lazy-eviction" 178) "no" 179) "lazyfree-lazy-expire" 180) "no" 181) "lazyfree-lazy-server-del" 182) "no" 183) "slave-lazy-flush" 184) "no" 185) "replica-lazy-flush" 186) "no" 187) "dynamic-hz" 188) "yes" 189) "maxmemory-policy" 190) "noeviction" 191) "loglevel" 192) "notice" 193) "supervised" 194) "no" 195) "appendfsync" 196) "everysec" 197) "syslog-facility" 198) "local0" 199) "appendonly" 200) "no" 201) "dir" 202) "/var/lib/redis" 203) "save" 204) "900 1 300 10 60 10000" 205) "client-output-buffer-limit" 206) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60" 207) "unixsocketperm" 208) "0" 209) "slaveof" 210) "" 211) "notify-keyspace-events" 212) "" 213) "bind" 214) "127.0.0.1 ::1" 127.0.0.1:6379> -
设置密码
127.0.0.1:6379> CONFIG SET requirepass 123456 OK -
退出之后重新登录
127.0.0.1:6379> exit jwu@jwu:~$ redis-cli 127.0.0.1:6379> auth 123456 OK -
查看密码
127.0.0.1:6379> CONFIG GET requirepass 1) "requirepass" 2) "123456" -
将当前服务器转变为指定服务器的从属服务器
127.0.0.1:6379> slaveof 192.168.1.136 6379 OK 127.0.0.1:6379> CONFIG GET slaveof 1) "slaveof" 2) "192.168.1.136 6379" 127.0.0.1:6379>Redis Slaveof 命令可以将当前服务器转变为指定服务器的从属服务器(slave server)。
-
当 master 服务设置了密码保护时,slave 服务连接 master 的密码
127.0.0.1:6379> CONFIG SET masterauth 123456 OK 127.0.0.1:6379> CONFIG GET masterauth 1) "masterauth" 2) "123456" -
查看主从复制信息
127.0.0.1:6379> info replication # Replication role:slave master_host:192.168.1.136 master_port:6379 master_link_status:up master_last_io_seconds_ago:5 master_sync_in_progress:0 slave_repl_offset:2184 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:92e7539c8f871d62d0f527276aaceaf8a02b06d3 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:2184 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2185 repl_backlog_histlen:0 127.0.0.1:6379> -
使此配置更改永久生效
127.0.0.1:6379> CONFIG REWRITE OK如果不使用该命令将配置永久保存,在redis服务重启之后,该配置就会消失。
-
退出redis
127.0.0.1:6379> exit
Redis Slave2
IP:192.168.1.113
-
安装redis
$ sudo apt install redis-server -
进入redis
$ redis-cli -
查看redis所有的配置
127.0.0.1:6379> CONFIG GET * 1) "dbfilename" 2) "dump.rdb" 3) "requirepass" 4) "" 5) "masterauth" 6) "" 7) "cluster-announce-ip" 8) "" 9) "unixsocket" 10) "" 11) "logfile" 12) "/var/log/redis/redis-server.log" 13) "pidfile" 14) "/var/run/redis/redis-server.pid" 15) "slave-announce-ip" 16) "" 17) "replica-announce-ip" 18) "" 19) "maxmemory" 20) "0" 21) "proto-max-bulk-len" 22) "536870912" 23) "client-query-buffer-limit" 24) "1073741824" 25) "maxmemory-samples" 26) "5" 27) "lfu-log-factor" 28) "10" 29) "lfu-decay-time" 30) "1" 31) "timeout" 32) "0" 33) "active-defrag-threshold-lower" 34) "10" 35) "active-defrag-threshold-upper" 36) "100" 37) "active-defrag-ignore-bytes" 38) "104857600" 39) "active-defrag-cycle-min" 40) "5" 41) "active-defrag-cycle-max" 42) "75" 43) "active-defrag-max-scan-fields" 44) "1000" 45) "auto-aof-rewrite-percentage" 46) "100" 47) "auto-aof-rewrite-min-size" 48) "67108864" 49) "hash-max-ziplist-entries" 50) "512" 51) "hash-max-ziplist-value" 52) "64" 53) "stream-node-max-bytes" 54) "4096" 55) "stream-node-max-entries" 56) "100" 57) "list-max-ziplist-size" 58) "-2" 59) "list-compress-depth" 60) "0" 61) "set-max-intset-entries" 62) "512" 63) "zset-max-ziplist-entries" 64) "128" 65) "zset-max-ziplist-value" 66) "64" 67) "hll-sparse-max-bytes" 68) "3000" 69) "lua-time-limit" 70) "5000" 71) "slowlog-log-slower-than" 72) "10000" 73) "latency-monitor-threshold" 74) "0" 75) "slowlog-max-len" 76) "128" 77) "port" 78) "6379" 79) "cluster-announce-port" 80) "0" 81) "cluster-announce-bus-port" 82) "0" 83) "tcp-backlog" 84) "511" 85) "databases" 86) "16" 87) "repl-ping-slave-period" 88) "10" 89) "repl-ping-replica-period" 90) "10" 91) "repl-timeout" 92) "60" 93) "repl-backlog-size" 94) "1048576" 95) "repl-backlog-ttl" 96) "3600" 97) "maxclients" 98) "10000" 99) "watchdog-period" 100) "0" 101) "slave-priority" 102) "100" 103) "replica-priority" 104) "100" 105) "slave-announce-port" 106) "0" 107) "replica-announce-port" 108) "0" 109) "min-slaves-to-write" 110) "0" 111) "min-replicas-to-write" 112) "0" 113) "min-slaves-max-lag" 114) "10" 115) "min-replicas-max-lag" 116) "10" 117) "hz" 118) "10" 119) "cluster-node-timeout" 120) "15000" 121) "cluster-migration-barrier" 122) "1" 123) "cluster-slave-validity-factor" 124) "10" 125) "cluster-replica-validity-factor" 126) "10" 127) "repl-diskless-sync-delay" 128) "5" 129) "tcp-keepalive" 130) "300" 131) "cluster-require-full-coverage" 132) "yes" 133) "cluster-slave-no-failover" 134) "no" 135) "cluster-replica-no-failover" 136) "no" 137) "no-appendfsync-on-rewrite" 138) "no" 139) "slave-serve-stale-data" 140) "yes" 141) "replica-serve-stale-data" 142) "yes" 143) "slave-read-only" 144) "yes" 145) "replica-read-only" 146) "yes" 147) "slave-ignore-maxmemory" 148) "yes" 149) "replica-ignore-maxmemory" 150) "yes" 151) "stop-writes-on-bgsave-error" 152) "yes" 153) "daemonize" 154) "yes" 155) "rdbcompression" 156) "yes" 157) "rdbchecksum" 158) "yes" 159) "activerehashing" 160) "yes" 161) "activedefrag" 162) "no" 163) "protected-mode" 164) "yes" 165) "repl-disable-tcp-nodelay" 166) "no" 167) "repl-diskless-sync" 168) "no" 169) "aof-rewrite-incremental-fsync" 170) "yes" 171) "rdb-save-incremental-fsync" 172) "yes" 173) "aof-load-truncated" 174) "yes" 175) "aof-use-rdb-preamble" 176) "yes" 177) "lazyfree-lazy-eviction" 178) "no" 179) "lazyfree-lazy-expire" 180) "no" 181) "lazyfree-lazy-server-del" 182) "no" 183) "slave-lazy-flush" 184) "no" 185) "replica-lazy-flush" 186) "no" 187) "dynamic-hz" 188) "yes" 189) "maxmemory-policy" 190) "noeviction" 191) "loglevel" 192) "notice" 193) "supervised" 194) "no" 195) "appendfsync" 196) "everysec" 197) "syslog-facility" 198) "local0" 199) "appendonly" 200) "no" 201) "dir" 202) "/var/lib/redis" 203) "save" 204) "900 1 300 10 60 10000" 205) "client-output-buffer-limit" 206) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60" 207) "unixsocketperm" 208) "0" 209) "slaveof" 210) "" 211) "notify-keyspace-events" 212) "" 213) "bind" 214) "127.0.0.1 ::1" 127.0.0.1:6379> -
设置密码
127.0.0.1:6379> CONFIG SET requirepass 123456 OK -
退出之后重新登录
127.0.0.1:6379> exit jwu@jwu:~$ redis-cli 127.0.0.1:6379> auth 123456 OK -
查看密码
127.0.0.1:6379> CONFIG GET requirepass 1) "requirepass" 2) "123456" -
将当前服务器转变为指定服务器的从属服务器
127.0.0.1:6379> slaveof 192.168.1.136 6379 OK 127.0.0.1:6379> CONFIG GET slaveof 1) "slaveof" 2) "192.168.1.136 6379" 127.0.0.1:6379>Redis Slaveof 命令可以将当前服务器转变为指定服务器的从属服务器(slave server)。
-
当 master 服务设置了密码保护时,slave 服务连接 master 的密码
127.0.0.1:6379> CONFIG SET masterauth 123456 OK 127.0.0.1:6379> CONFIG GET masterauth 1) "masterauth" 2) "123456" -
查看主从复制信息
127.0.0.1:6379> info replication # Replication role:slave master_host:192.168.1.136 master_port:6379 master_link_status:up master_last_io_seconds_ago:7 master_sync_in_progress:0 slave_repl_offset:10888 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:92e7539c8f871d62d0f527276aaceaf8a02b06d3 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:10888 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:10875 repl_backlog_histlen:14 127.0.0.1:6379> -
使此配置更改永久生效
127.0.0.1:6379> CONFIG REWRITE OK如果不使用该命令将配置永久保存,在redis服务重启之后,该配置就会消失。
-
退出redis
127.0.0.1:6379> exit
查看Master信息
IP:192.168.1.136
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.126,port=6379,state=online,offset=10972,lag=1
slave1:ip=192.168.1.113,port=6379,state=online,offset=10972,lag=1
master_replid:92e7539c8f871d62d0f527276aaceaf8a02b06d3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:10972
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:10972
127.0.0.1:6379>
更多推荐

所有评论(0)