作业(六)
1、RDB和AOF的优缺点
1.RDB 模式的优缺点
优点:
- RDB快照保存了某个时间点的数据,可以通过脚本执行redis指令bgsave(非阻塞,后台执行)或者save(会阻塞写操作,不推荐)命令自定义时间点备份,可以保留多个备份,当出现问题可以恢复到不同时间的版本,很适合备份,并且此文件格式也支持有不少第三方工具可以进行后续的数据分析
比如:可以在最近的24小时内,每个小时备份一次RDB文件,并且在每个月的每一天,也备份一个RDB文件。这样的话,即使遇上问题,也可以随时将数据集还原到不同的版本
- RDB可以最大化Redis的性能,父进程保存RDB文件时唯一要做的就是fork出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无需执行任何磁盘I/O操作。
- RDB在大量数据,比如几个G的数据,恢复的速度比AOF的快
缺点:
- 不能实时保存数据,可能会丢失自上一次执行RDB备份到当前的内存数据
如果你需要尽量避免在服务器故障时丢失数据,那么RDB不适合你。虽然Redis允许你设置不同的保存点(save point)来控制保存RDB文件的频率,但是,因为ROB文件需要保存整个数据集的状态,所以它并不是一个轻松的操作。因此你可能会至少5分钟才保存一次RDB文件。在这种情况下,一旦发生故障停机,你就可能会丢失好几分钟的数据。
- 当数据量非常大的时候,从父进程fork子进程进行保存至RDB文件时需要一点时间,可能是毫秒或者秒,取决于磁盘IO性能
在数据集比较庞大时,fork()可能会非常耗时,造成服务器在一定时间内停止处理客户端﹔如果数据集非常巨大,并且CPU时间非常紧张的话,那么这种停止时间甚至可能会长达整整一秒或更久。虽然 AOF重写也需要进行fork(),但无论AOF重写的执行间隔有多长,数据的持久性都不会有任何损失。
2.优点:
- 数据安全性相对较高,根据所使用的fsync策略(fsync是同步内存中redis所有已经修改的文件到存储设备),默认是appendfsync everysec,即每秒执行一次 fsync,在这种配置下,Redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据( fsync会在后台线程执行,所以主线程可以继续努力地处理命令请求)
- 由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中不需要seek, 即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在Redis下一次启动之前,可以通过 redis-check-aof 工具来解决数据一致性的问题
- Redis可以在 AOF文件体积变得过大时,自动地在后台对AOF进行重写,重写后的新AOF文件包含了恢复当前数据集所需的最小命令集合。整个重写操作是绝对安全的,因为Redis在创建新 AOF文件的过程中,append模式不断的将修改数据追加到现有的 AOF文件里面,即使重写过程中发生停机,现有的 AOF文件也不会丢失。而一旦新AOF文件创建完毕,Redis就会从旧AOF文件切换到新AOF文件,并开始对新AOF文件进行追加操作。
- AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,也可以通过该文件完成数据的重建
AOF文件有序地保存了对数据库执行的所有写入操作,这些写入操作以Redis协议的格式保存,因此 AOF文件的内容非常容易被人读懂,对文件进行分析(parse)也很轻松。导出(export)AOF文件也非常简单:举个例子,如果你不小心执行了FLUSHALL.命令,但只要AOF文件未被重写,那么只要停止服务器,移除 AOF文件末尾的FLUSHAL命令,并重启Redis ,就可以将数据集恢复到FLUSHALL执行之前的状态。
缺点:
- 即使有些操作是重复的也会全部记录,AOF 的文件大小要大于 RDB 格式的文件
- AOF 在恢复大数据集时的速度比 RDB 的恢复速度要慢
- 根据fsync策略不同,AOF速度可能会慢于RDB
- bug 出现的可能性更多
2、master和slave同步过程
#在master上设置key1
[root@master ~]# redis-cli -a 123456
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> set key1 master
OK
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> get key1
"master"
#设置slave
[root@slave ~]# redis-cli -a 123456
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> set key1 slave
OK
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> get key1
"slave"
#在slave上设置master的IP和端口,4.0版之前的指令为slaveof,replicaof为之后版本
127.0.0.1:6379> slaveof 10.0.0.59 6379
OK
127.0.0.1:6379> config set masterauth 123456 #在slave上设置master密码才可以同步
OK
127.0.0.1:6379> info replication
# Replication
role:slave #角色变为slave
master_host:10.0.0.59 #指向master
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:99
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
#查看已经同步成功
127.0.0.1:6379> get key1
"master"
#在master上可以看到所有slave信息
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=10.0.0.60,port=6379,state=online,offset=295,lag=1
master_repl_offset:295
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:294
3、哨兵的使用和实现机制
#master、slave1、salve2,三台主机
master:10.0.0.59
slave1:10.0.0.60
slave2:10.0.0.61
#所有主从节点的redis.conf中关键配置
bind 0.0.0.0
masterauth "123456"
requirepass "123456"
#修改完配置文件后启动服务
[root@master ~]# systemctl start redis
#配置从redis
[root@slave1 ~]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> masterauth 10.0.0.59 6379
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:10.0.0.59
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:79746
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:fb93de212f819f780839248c80d5e58bb075c784
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:79746
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:79746
[root@slave2 ~]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> masterauth 10.0.0.59 6379
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:10.0.0.59
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:101845
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:fb93de212f819f780839248c80d5e58bb075c784
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:101845
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:101845
#master服务器状态
[root@master ~]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.0.0.60,port=6379,state=online,offset=115509,lag=1
slave1:ip=10.0.0.61,port=6379,state=online,offset=115509,lag=1
master_replid:fb93de212f819f780839248c80d5e58bb075c784
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:115509
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:115509
#三个哨兵服务器的配置
[root@master ~]# grep -vE "^#|^$" /apps/redis/etc/sentinel.conf
port 26379
daemonize yes #后台执行
pidfile "/var/run/redis-sentinel.pid"
logfile ""
dir "/tmp"
sentinel myid c622695fb6429cedc7c8d963a7a8fe750d672056
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 10.0.0.59 6379 2 #指定当前mymaster集群中master服务器的地址和端口,2为法定人数限制(quorum),即有几个sentinel认为master down了就进行故障转移,一般此值是所有sentinel节点(一般总数是>=3的奇数,如:3,5,7等)的一半以上的整数值。 必设项
sentinel down-after-milliseconds mymaster 3000 #(SDOWN)判断mymaster集群中所有节点的主观下线的时间,单位:毫秒,建议3000 必设项
sentinel auth-pass mymaster 123456 #mymaster集群中master的密码。 必设项
sentinel config-epoch mymaster 0
protected-mode no
[root@master ~]# scp /etc/redis-sentinel.conf 10.0.0.60:/etc/
[root@master ~]# scp /etc/redis-sentinel.conf 10.0.0.61:/etc/
#启动哨兵服务器
[root@master ~]# redis-sentinel /apps/redis/etc/sentinel.conf
[root@slave1 ~]# redis-sentinel /apps/redis/etc/sentinel.conf
[root@slave2 ~]# redis-sentinel /apps/redis/etc/sentinel.conf
#确保每个哨兵主机myid不同
[root@master ~]# grep "sentinel myid" /apps/redis/etc/sentinel.conf
sentinel myid c622695fb6429cedc7c8d963a7a8fe750d672056
[root@slave1 ~]# grep "sentinel myid" /apps/redis/etc/sentinel.conf
sentinel myid f32ee9ce06d0dc44425f2674235875f6b7228d5b
[root@slave2 ~]# grep "sentinel myid" /apps/redis/etc/sentinel.conf
sentinel myid 89a3b0b60ef45cbedc5bb9c759dad8b2947656f3
#查看哨兵信息
[root@master ~]# redis-cli -a 123456 -p 26379
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.0.0.59:6379,slaves=2,sentinels=3
#当master宕机后redis和sentinel配置文件会被自动修改
[root@master ~]# systemctl stop redis
[root@slave1 ~]# grep "^replicaof" /apps/redis/etc/redis.conf
replicaof 10.0.0.61 6379
[root@slave1 ~]# grep "^sentinel monitor" /apps/redis/etc/sentinel.conf
sentinel monitor mymaster 10.0.0.61 6379 2
#查看当前redis状态
#新主
[root@slave2 ~]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=10.0.0.60,port=6379,state=online,offset=281866,lag=0
master_replid:016d56f2c802bcf342b412e4053c1d1d974ea3b2
master_replid2:fb93de212f819f780839248c80d5e58bb075c784
master_repl_offset:281866
second_repl_offset:167611
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:281866
#从
[root@slave1 ~]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:10.0.0.61
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:373482
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:016d56f2c802bcf342b412e4053c1d1d974ea3b2
master_replid2:fb93de212f819f780839248c80d5e58bb075c784
master_repl_offset:373482
second_repl_offset:167611
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:373482
#原master重新加入集群后变slave
[root@master ~]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:10.0.0.61
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:1603511779
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:4f8d37e606a0d5c662e9c83b3f5dbd650db7b74c
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
4、redis cluster集群创建和使用
#原生命令手动部署
1.部署redis,并配置开启cluster功能
2.执行meet命令,实现所有节点的相互通信
3.为各个master节点指派槽位范围
4.指定各个节点的主从关系
#集群节点
10.0.0.59
10.0.0.60
10.0.0.61
10.0.0.62
10.0.0.63
10.0.0.64
#在所有节点修改
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' /apps/redis/etc/redis.conf
sed -i '/masterauth/a masterauth 123456' /apps/redis/etc/redis.conf
sed -i '/# requirepass/a requirepass 123456' /apps/redis/etc/redis.conf
sed -i '/# cluster-enabled yes/a cluster-enabled yes' /apps/redis/etc/redis.conf
sed -i '/# cluster-config-file nodes-6379.conf/a cluster-config-file nodes-6379.conf' /apps/redis/etc/redis.conf
sed -i '/cluster-require-full-coverage yes/c cluster-require-full-coverage no' /apps/redis/etc/redis.conf
[root@localhost ~]# systemctl restart redis
#在任一节点上和其他所有节点进行meet通信
[root@localhost ~]# redis-cli -h 10.0.0.59 -a 123456 --no-auth-warning cluster meet 10.0.0.60 6379
OK
[root@localhost ~]# redis-cli -h 10.0.0.59 -a 123456 --no-auth-warning cluster meet 10.0.0.61 6379
OK
[root@localhost ~]# redis-cli -h 10.0.0.59 -a 123456 --no-auth-warning cluster meet 10.0.0.62 6379
OK
[root@localhost ~]# redis-cli -h 10.0.0.59 -a 123456 --no-auth-warning cluster meet 10.0.0.63 6379
OK
[root@localhost ~]# redis-cli -h 10.0.0.59 -a 123456 --no-auth-warning cluster meet 10.0.0.64 6379
OK
#可以看到所有节点之间可以相互连接通信
[root@localhost ~]# redis-cli -h 10.0.0.59 -a 123456 --no-auth-warning cluster nodes
324539e4e415956ea0048e5aec59bfd4e43921cb 10.0.0.63:6379@16379 master - 0 1603526737371 5 connected
15623ecc11ee3c9ef0e697e58cec18ede2ccaf5d 10.0.0.60:6379@16379 master - 0 1603526736325 1 connected
6356727ea9c553cffb8305049ebc268a060c31bd 10.0.0.61:6379@16379 master - 0 1603526734000 2 connected
fa7c8ff0617d0e28f8ea8e01d6f02cbcb236f58e 10.0.0.59:6379@16379 myself,master - 0 1603526735000 0 connected
e9ef1051b41354eb69ae9c5cf0e9cba6a93b4042 10.0.0.64:6379@16379 master - 0 1603526735303 4 connected
45a28410b94c287a4137ceb77f5c594c80178433 10.0.0.62:6379@16379 master - 0 1603526736000 3 connected
#当前状态
[root@localhost ~]# redis-cli -h 10.0.0.59 -a 123456 --no-auth-warning cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:0
cluster_current_epoch:5
cluster_my_epoch:0
cluster_stats_messages_ping_sent:220
cluster_stats_messages_pong_sent:228
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:453
cluster_stats_messages_ping_received:228
cluster_stats_messages_pong_received:225
cluster_stats_messages_received:453
#为各个master节点添加槽位
#创建添加槽位的脚本
[root@localhost ~]# cat addslot.sh
#!/bin/bash
host=$1
port=$2
start=$3
end=$4
pass=123456
for slot in `seq ${start} ${end}`;do
echo slot:$slot
redis-cli -h ${host} -p ${port} -a ${pass} --no-auth-warning cluster addslots ${slot}
done
#执行脚本为三个master分配槽位,共16384/3=5461.333333333333,平均每个master分配5461个槽位
[root@localhost ~]# bash addslot.sh 10.0.0.59 6379 0 5461
[root@localhost ~]# bash addslot.sh 10.0.0.60 6379 5462 10922
[root@localhost ~]# bash addslot.sh 10.0.0.61 6379 10923 16383
#三个master分配完槽位后,可以看到下面信息
[root@localhost ~]# redis-cli -a 123456 --no-auth-warning cluster nodes
d97347b296e8d1fba97b90fb807f01b4afdb92ba 10.0.0.59:6379@16379 myself,master - 0 1603531865000 1 connected 0-5461
e11f99ccd959eb1bb971afbf9e26bdf8db0be8cb 10.0.0.64:6379@16379 master - 0 1603531865764 5 connected
882bd9c967bc4153aed7382bb24e2e6920c02b55 10.0.0.63:6379@16379 master - 0 1603531866786 4 connected
f8be42e2f104d37f1ae9fa06ba02762f79fcb50b 10.0.0.61:6379@16379 master - 0 1603531863000 0 connected 10923-16383
57e4c0648c3e6e155796a57368bb09efc1f8b42b 10.0.0.62:6379@16379 master - 0 1603531864000 3 connected
de2b2cd4066f26773db2842acd2f8b7318e81a35 10.0.0.60:6379@16379 master - 0 1603531865000 2 connected 5462-10922
[root@localhost ~]# redis-cli -a 123456 --no-auth-warning cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3 #三个成员
cluster_current_epoch:5
cluster_my_epoch:1
cluster_stats_messages_ping_sent:509
cluster_stats_messages_pong_sent:517
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:1031
cluster_stats_messages_ping_received:517
cluster_stats_messages_pong_received:514
cluster_stats_messages_received:1031
#指定各个节点的主从关系,将对应的slave指定相应的master节点ID,实现三对主从节点
[root@localhost ~]# redis-cli -a 123456 -h 10.0.0.62 --no-auth-warning cluster replicate d97347b296e8d1fba97b90fb807f01b4afdb92ba
OK
[root@localhost ~]# redis-cli -a 123456 -h 10.0.0.63 --no-auth-warning cluster replicate de2b2cd4066f26773db2842acd2f8b7318e81a35
OK
[root@localhost ~]# redis-cli -a 123456 -h 10.0.0.64 --no-auth-warning cluster replicate f8be42e2f104d37f1ae9fa06ba02762f79fcb50b
OK
#所有三组主从节点创建成功后,可以看到最终结果
[root@localhost ~]# redis-cli -a 123456 --no-auth-warning cluster nodes
d97347b296e8d1fba97b90fb807f01b4afdb92ba 10.0.0.59:6379@16379 myself,master - 0 1603532420000 1 connected 0-5461
e11f99ccd959eb1bb971afbf9e26bdf8db0be8cb 10.0.0.64:6379@16379 slave f8be42e2f104d37f1ae9fa06ba02762f79fcb50b 0 1603532421093 5 connected
882bd9c967bc4153aed7382bb24e2e6920c02b55 10.0.0.63:6379@16379 slave de2b2cd4066f26773db2842acd2f8b7318e81a35 0 1603532420067 4 connected
f8be42e2f104d37f1ae9fa06ba02762f79fcb50b 10.0.0.61:6379@16379 master - 0 1603532422122 0 connected 10923-16383
57e4c0648c3e6e155796a57368bb09efc1f8b42b 10.0.0.62:6379@16379 slave d97347b296e8d1fba97b90fb807f01b4afdb92ba 0 1603532421000 3 connected
de2b2cd4066f26773db2842acd2f8b7318e81a35 10.0.0.60:6379@16379 master - 0 1603532421000 2 connected 5462-10922
[root@localhost ~]# redis-cli -a 123456 --no-auth-warning cluster slots
1) 1) (integer) 0
2) (integer) 5461
3) 1) "10.0.0.59"
2) (integer) 6379
3) "d97347b296e8d1fba97b90fb807f01b4afdb92ba"
4) 1) "10.0.0.62"
2) (integer) 6379
3) "57e4c0648c3e6e155796a57368bb09efc1f8b42b"
2) 1) (integer) 10923
2) (integer) 16383
3) 1) "10.0.0.61"
2) (integer) 6379
3) "f8be42e2f104d37f1ae9fa06ba02762f79fcb50b"
4) 1) "10.0.0.64"
2) (integer) 6379
3) "e11f99ccd959eb1bb971afbf9e26bdf8db0be8cb"
3) 1) (integer) 5462
2) (integer) 10922
3) 1) "10.0.0.60"
2) (integer) 6379
3) "de2b2cd4066f26773db2842acd2f8b7318e81a35"
4) 1) "10.0.0.63"
2) (integer) 6379
3) "882bd9c967bc4153aed7382bb24e2e6920c02b55"
#验证 redis cluster 访问
#-c 表示以集群方式连接
[root@localhost ~]# redis-cli -c -a 123456 --no-auth-warning set name yan
OK
[root@localhost ~]# redis-cli -c -a 123456 --no-auth-warning get name
"yan"
[root@localhost ~]# redis-cli -a 123456 -h 10.0.0.59 --no-auth-warning get name
(error) MOVED 5798 10.0.0.60:6379 #显示key的槽点位置,然后去对应master上查看key的值
[root@localhost ~]# redis-cli -a 123456 -h 10.0.0.60 --no-auth-warning get name
"yan"
#master宕机后,slave提升为新主
#master10.0.0.59实现宕机
[root@localhost ~]# systemctl stop redis
[root@localhost ~]# redis-cli -a 123456 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
f8be42e2f104d37f1ae9fa06ba02762f79fcb50b 10.0.0.61:6379@16379 master - 0 1603537745000 0 connected 10923-16383
d97347b296e8d1fba97b90fb807f01b4afdb92ba 10.0.0.59:6379@16379 master,fail - 1603537709704 1603537709293 1 disconnected
57e4c0648c3e6e155796a57368bb09efc1f8b42b 10.0.0.62:6379@16379 myself,master - 0 1603537746000 6 connected 0-5461 #slave提升为新主
de2b2cd4066f26773db2842acd2f8b7318e81a35 10.0.0.60:6379@16379 master - 0 1603537747303 2 connected 5462-10922
e11f99ccd959eb1bb971afbf9e26bdf8db0be8cb 10.0.0.64:6379@16379 slave f8be42e2f104d37f1ae9fa06ba02762f79fcb50b 0 1603537746000 5 connected
882bd9c967bc4153aed7382bb24e2e6920c02b55 10.0.0.63:6379@16379 slave de2b2cd4066f26773db2842acd2f8b7318e81a35 0 1603537747000 4 connected
#原master修复启动后,成为slave
[root@localhost ~]# systemctl start redis
[root@localhost ~]# redis-cli -a 123456 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
f8be42e2f104d37f1ae9fa06ba02762f79fcb50b 10.0.0.61:6379@16379 master - 0 1603537934537 0 connected 10923-16383
d97347b296e8d1fba97b90fb807f01b4afdb92ba 10.0.0.59:6379@16379 slave 57e4c0648c3e6e155796a57368bb09efc1f8b42b 0 1603537935560 6 connected #原master成为slave
57e4c0648c3e6e155796a57368bb09efc1f8b42b 10.0.0.62:6379@16379 myself,master - 0 1603537935000 6 connected 0-5461
de2b2cd4066f26773db2842acd2f8b7318e81a35 10.0.0.60:6379@16379 master - 0 1603537933000 2 connected 5462-10922
e11f99ccd959eb1bb971afbf9e26bdf8db0be8cb 10.0.0.64:6379@16379 slave f8be42e2f104d37f1ae9fa06ba02762f79fcb50b 0 1603537936605 5 connected
882bd9c967bc4153aed7382bb24e2e6920c02b55 10.0.0.63:6379@16379 slave de2b2cd4066f26773db2842acd2f8b7318e81a35 0 1603537934000 4 connected
#利用 redis cluster命令创建集群
#每个节点修改redis配置文件
[root@localhost ~]# vim /apps/redis/etc/redis.conf
bind 0.0.0.0
masterauth 123456 #建议配置,否则后期的master和slave主从复制无法成功,还需再配置
requirepass 123456
cluster-enabled yes #取消此行注释,必须开启集群,开启后redis 进程会有cluster显示
cluster-config-file nodes-6379.conf #取消此行注释,此为集群状态文件,记录主从关系及slot范围信息,由redis cluster 集群自动创建和维护
cluster-require-full-coverage no #默认值为yes,设为no可以防止一个节点不可用导致整个cluster不可能
#重启服务
[root@localhost ~]# systemctl restart redis
#redis-cli --cluster-replicas 1 表示每个master对应一个slave节点
[root@localhost ~]# redis-cli -a 123456 --cluster create 10.0.0.59:6379 10.0.0.60:6379 10.0.0.61:6379 10.0.0.62:6379 10.0.0.63:6379 10.0.0.64:6379 --cluster-replicas 1
本文详细介绍了Redis的两种持久化机制——RDB和AOF,包括各自的优缺点。接着讨论了主从复制的过程,展示了一个从设置到同步的完整步骤。然后讲解了哨兵系统的使用和实现机制,如何在主从故障中实现自动故障转移。最后,阐述了Redis Cluster集群的创建和使用,包括手动部署和使用redis-cli命令创建集群,以及集群在主节点宕机后的自动恢复。
&spm=1001.2101.3001.5002&articleId=109264406&d=1&t=3&u=1686a426b96641aa9c9c37a53d48c58e)
1181

被折叠的 条评论
为什么被折叠?



