在主从复制中,数据库分为两类:主服务器和从从服务器
当主服务器节点设置密码后:
从上面可以看出,主服务器节点在主从模式中唯一,若主服务器节点挂掉,则 Redis 无法对外提供写服务;
环境准备
master节点 192.168.30.128
slave节点 192.168.30.129
slave节点 192.168.30.130
修改配置:192.168.30.128
# vim /usr/local/redis/redis.conf
# 监听 ip,多个 ip 用空格分隔
bind 192.168.30.128
# 允许后台启动
daemonize yes
# 日志路径
logfile "/usr/local/redis/redis.log"
# 数据库备份文件存放目录
dir /data/redis
# slave 连接 master 密码,master 可省略
masterauth 123456
# 设置 master 连接密码,slave 可省略
requirepass 123456
# 在/data/redis/目录生成 appendonly.aof 文件
# 将每一次写操作请求都追加到 appendonly.aof 文件中
appendonly yes
192.168.30.129
bind 192.168.30.129
daemonize yes
logfile "/usr/local/redis/redis.log"
dir /data/redis
replicaof 192.168.30.128 6379
masterauth 123456
requirepass 123456
appendonly yes
192.168.30.130
bind 192.168.30.130
daemonize yes
logfile "/usr/local/redis/redis.log"
dir /data/redis
replicaof 192.168.30.128 6379
masterauth 123456
requirepass 123456
appendonly yes
查看集群状态:主服务器
192.168.30.128:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.30.129,port=6379,state=online,offset=168,lag=1
slave1:ip=192.168.30.130,port=6379,state=online,offset=168,lag=1
master_replid:fb4941e02d5032ad74c6e2383211fc58963dbe90
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:168
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:168
查看集群状态:从服务器
192.168.30.129:6379> info replication
role:slave
master_host:192.168.30.128
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:196
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:fb4941e02d5032ad74c6e2383211fc58963dbe90
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:196
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:196
数据演示
192.168.30.128
192.168.30.128:6379> keys *
(empty list or set)
192.168.30.128:6379> set key1 100
OK
192.168.30.128:6379> set key2 ljh
OK
192.168.30.128:6379> keys *
1) "key1"
2) "key2"
192.168.30.129
192.168.30.129:6379> keys *
1) "key2"
2) "key1"
192.168.30.129:6379> CONFIG GET dir
1) "dir"
2) "/data/redis"
192.168.30.129:6379> CONFIG GET dbfilename
1) "dbfilename"
2) "dump.rdb"
192.168.30.129:6379> get key1
"100"
192.168.30.129:6379> get key2
"ljh"
192.168.30.129:6379> set key3 aaa
(error) READONLY You can't write against a read only replica.
192.168.30.130
192.168.30.130:6379> keys *
1) "key2"
2) "key1"
192.168.30.130:6379> CONFIG GET dir
1) "dir"
2) "/data/redis"
192.168.30.130:6379> CONFIG GET dbfilename
1) "dbfilename"
2) "dump.rdb"
192.168.30.130:6379> get key1
"100"
192.168.30.130:6379> get key2
"ljh"
192.168.30.130:6379> set key3 aaa
(error) READONLY You can't write against a read only replica.
可以看到,在主服务器节点写入的数据,很快就同步到从服务器节点上,而且在从服务器节点上无法写入数据
主从模式的弊端就是不具备高可用性,当主服务器挂掉以后,Redis 将不能再对外提供写入操作,因此 Sentinel 应运而生
—未完待续----