# 高可用配置
---> Redis (Replica)
client ---> Redis (Master)
---> Redis (Replica)
# 当Master挂掉时,会把Replica切换为Master提供用户端服务
Client -----------------------> Redis (Master)
Client | 同步
Redis (X) V
Redis (Replica)
读取/写入
Client -----------------------> Redis (Master)
| 同步
V
Client -----------------------> Redis (Replica)
读取only
# 高可用配置
---> Redis (Replica)
client ---> Redis (Master)
---> Redis (Replica)
# 高可用链结配置(应用於分散多个资料中心架构或是允许较慢同步的需求)
client ---> Redis (Master) ---> Redis (Replica) ---> Redis (Replica)
_____________________ _________
A区资料中心 (LAN) (WAN) B区资料中心
or
应用服务 报表服务
在配置Redis Server高可用架构时,基本上会配置三台服务器,并给予相同或是不同的Port来配置,下面实际配置的内容会在单机进行,故会将Port分配三个来模拟三台服务器的状况.
因需要在同一台机器模拟三台服务器的配置,故有以下前置作业需要先完成 (如果三台服务器则不需要这样做)
# 复制三份设定档,结尾用Port命名
$ cp /home/redis/config/redis.conf redis_6379.conf
$ cp /home/redis/config/redis.conf redis_6380.conf
$ sudo cp /home/redis/config/redis.conf redis_6381.conf
# 修改各个设定档中的rdb与aof档案名称,一样结尾用Port命名
# redis_6379.conf
vi dump_6379.rdb
dbfilename dump_6379.rdb
appendfilename "appendonly_6379.aof"
# redis_6380.conf
vi dump_6380.rdb
dbfilename dump_6380.rdb
appendfilename "appendonly_6380.aof"
# redis_6381.conf
vi dump_6381.rdb
dbfilename dump_6381.rdb
appendfilename "appendonly_6381.aof"
# 启动服务
./redis-server ./redis_6379.conf
./redis-server ./redis_6380.conf
./redis-server ./redis_6381.conf
#连线到 127.0.0.1 Port: 6379
./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:1363014961ee0ae4061c2493c44a709b387c0c5e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
#连线到 127.0.0.1 Port: 6380
./redis-cli -h 127.0.0.1 -p 6380
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:7b48682e1628f579bf5a3c79420e0324c859046e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
#连线到 127.0.0.1 Port: 6381
./redis-cli -h 127.0.0.1 -p 6381
127.0.0.1:6381> info replication
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:bf1bb9f71dd3b8a4fc2784f71c700ffbb5b9c800
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# 将127.0.0.1 Port: 6380 与 127.0.0.1 Port: 6381 设为Replica
# 如果有设定replica password 则需要在replicaof 127.0.0.1 6379 -a password
./redis-cli -h 127.0.0.1 -p 6380
127.0.0.1:6380> replicaof 127.0.0.1 6379
OK
127.0.0.1:6380> role
1) "slave"
2) "127.0.0.1"
3) (integer) 6379
4) "connected"
5) (integer) 84
./redis-cli -h 127.0.0.1 -p 6381
127.0.0.1:6381> replicaof 127.0.0.1 6379
OK
127.0.0.1:6381> role
1) "slave"
2) "127.0.0.1"
3) (integer) 6379
4) "connected"
5) (integer) 0
# 确认Replication结果
./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> role
1) "master"
2) (integer) 308
3) 1) 1) "127.0.0.1"
2) "6381"
3) "308"
2) 1) "127.0.0.1"
2) "6380"
3) "308"
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6381,state=online,offset=336,lag=1
slave1:ip=127.0.0.1,port=6380,state=online,offset=336,lag=1
master_failover_state:no-failover
master_replid:a30878092cdd31e404af76eaa7a2d024c8ae843e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:336
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:336
# 如果Replica要退出则可以透过以下方式
./redis-cli -h 127.0.0.1 -p 6381
127.0.0.1:6381> replicaof no one
# 在Master操作验证同步到另外两个Replica节点
./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set book a
OK
127.0.0.1:6379> get book
"a"
127.0.0.1:6379> set book b
OK
127.0.0.1:6379> get book
"b"
# 确认Replica
./redis-cli -h 127.0.0.1 -p 6380
127.0.0.1:6380> get book
"b"
# 确认Replica
./redis-cli -h 127.0.0.1 -p 6381
127.0.0.1:6381> get book
"b"
# 尝试写入Replica会有错误
127.0.0.1:6381> set book c
#(error) READONLY You can't write against a read only replica.
# 以上错误是因为这个设定而来的,当然也可以关闭但不建议
127.0.0.1:6381> config get replica-read-only
1) "replica-read-only"
2) "yes"
<<: <Day21> Snapshots — 取得多档股票最新资讯
一番寻找一下发现了这个 https://github.com/jeroenpeeters/docke...
又到了每月公布营收的时间点了,随着营收的公布,可说是几家欢乐几家愁。 很多人认为,要在股市获利,就必...
The WPM stands for words per minute, and it is a m...
上一篇我们已经建立好模型, 而且也上传一张图片验证推论的结果符合我们的预期. 接下来我们要把mode...
好啦,今天是第三十天了,今天会分享下赛程心得,并回顾一下前面系列文,最後是三十天後的规划! 参赛动机...