持久化RDB操作
修改一下redis.conf配置,60秒修改5个值就会触发保存。
执行flushall命令,也会触发rdb规则
退出redis,也会产生rdb文件
备份就会生成一个dump.rdb
只需要在启动目录/usr/local/bin 这个目录下面 ,redis启动的时候就会自动检查恢复dump.rdb恢复其中的数据
rdb优点:适合大规模的数据恢复!
对数据完整性不高
缺点·:需要一定的时间间隔进程操作!如果redis意外宕机,这个最后一次修改的数据就没了
frok进程的时候会占用一定的内存空间
AOF
将我们的所有命令记录下来,history,恢复的时候就把这个文件全部执行一遍
以日志的形式来记录每个写操作,将redis执行过程所有指令记录下来,只许追加文件但不可以改写文件,redis启动之处会读取该文件重新构建数据。
打开redis,然后写入数据,关闭之后
可以看见自己写的命令
修改上面的文件
redis-check-aof --fix appendonly.aof
优点:
1.每一次修改都同步,文件的完整性会更加的好
2.每秒都会同步一次,可能会丢失一秒的数据
3.从不同步,效率最高
缺点:
1.相对于数据文件来说,aof远远大于rdb,修复速度也比rdb慢
2.aof运行效率也要比rdb慢,所以我们redis默认配置就是rdb
最后需要自己把配置改回去。。
redis主从复制
主从复制,读写分离。大部分多是读操作,减缓服务器的压力。
主从复制主要包括
1.数据冗余
2.故障修复
3.负载均衡
4.高可用
数据复制是单向的,只能由主节点到从节点。
127.0.0.1:6379> info replication #查看当前库的信息
# Replication
role:master #角色
connected_slaves:0 #没有从机
master_replid:4074492b5c0a215b884b72371a28d6ffa4e2d9f0
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
我使用的是虚拟机,这里搭的是伪集群,在连接几台服务器,复制redis.conf,就像下图一样吧。。。
[root@localhost whconfig]# ls
redis.conf
[root@localhost whconfig]# cp redis.conf redis79.conf
[root@localhost whconfig]# cp redis.conf redis80.conf
[root@localhost whconfig]# cp redis.conf redis81.conf
[root@localhost whconfig]# ls
redis79.conf redis80.conf redis81.conf redis.conf
vim redis79.conf #修改这个配置文件
这两个配置需要修改
logfile "6379.log"
dbfilename dump6379.rdb
vim redis80.conf #同理修改这个配置文件
port 6380 #修改端口
pidfile /var/run/redis_6380.pid
logfile "6380.log"
dbfilename dump6380.rdb
同理6381也需要一样的修改
[root@localhost bin]# redis-server whconfig/redis79.conf
[root@localhost bin]# redis-server whconfig/redis80.conf
[root@localhost bin]# redis-server whconfig/redis81.conf
可以看机有三个log
[root@localhost bin]# ls
6379.log 6380.log 6381.log appendonly.aof dump.rdb redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server whconfig
也查看进程
[root@localhost bin]# ps -ef |grep redis
root 29009 1 0 11:18 ? 00:00:00 redis-server 0.0.0.0:6379
root 32560 1 0 11:18 ? 00:00:00 redis-server 0.0.0.0:6380
root 33546 1 0 11:18 ? 00:00:00 redis-server 0.0.0.0:6381
root 40498 14265 0 11:20 pts/2 00:00:00 grep --color=auto redis
一主二从
1centos7
没有配置,每一个都是主节点
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:496b85545b2034bd41c3f4372892c830ae9f1282
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
2centos7
[root@localhost bin]# redis-server whconfig/redis80.conf
[root@localhost bin]# redis-cli -p 6380
127.0.0.1:6380> ping
PONG
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:0
master_replid:09fd735f1a47ba12cc326b5ec00eccf214e4caf5
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
第三台机器也一样的操作
3centos7
[root@localhost bin]# redis-server whconfig/redis
88873:C 27 Apr 2022 11:29:44.599 # Fatal error, can't open config file 'whconfig/redis'
[root@localhost bin]# redis-server whconfig/redis81.conf
[root@localhost bin]# redis-cli -p 6381
127.0.0.1:6381> ping
PONG
127.0.0.1:6381> info replication
# Replication
role:master
connected_slaves:0
master_replid:a436a84445d7a3accba5e2cf04bd3e35aaa8663d
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
配置从机
2centos7
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:0
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:80fb6d40da4cdc2c42d456a43e266d2ff727b629
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte
3centos7和2centos7一样的操作
如果两个配置完成就会:
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=630,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=630,lag=0
也可以通过文件进行配置,大概在280行左右吧(坐个参考吧。。。)
这样永久生效,可以看见ip 和端口
# replicaof <masterip> <masterport>
# If the master is password protected (using the "requirepass" configuration
# directive below) it is possible to tell the replica to authenticate before
# starting the replication synchronization process, otherwise the master will
# refuse the replica request.
#
# masterauth <master-password>
主机可以写,从机只能读
主机断开连接,从机依旧连接到主机,但是没有写操作
当把第三个主机的主节点分为第二个主机
就会形成
主节点 ------从节点/主节点---------从节点
但是中间那个还是不能写入。
当第一个节点断开的是时候,在第二个节点输入
SLAVEOF no one
就会让这个节点成为主机
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=1134,lag=0
master_replid:bd3b8c7606b597c9c2586421b1b1b4f8e3881634
master_replid2:9cf481a8df5b7c880a95828162e8585a857053f6
master_repl_offset:1134
second_repl_offset:1121
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1134
当第二个节点为主机的时候,其他的节点就可以成为他的从机
哨兵模式
自动选取主机的模式
在主从切换技术的方法是:当主服务器宕机后,需要手动把一台服务器切换为主服务器,这就需要人工干预,费时费力,还会造成一段时间的服务器不能使用,这不是一种推荐的模式,所以很多时候,需要优先考虑哨兵模式
切回到一主二从
在配置文件下建一个
vim sentinel.conf
sentinel monitor myredis 127.0.0.1 6379 1
启动哨兵
redis-sentinel whconfig/sentinel.conf
端口主机6379那台主机关掉
128928:X 27 Apr 2022 15:56:13.233 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 127.0.0.1 6380
128928:X 27 Apr 2022 15:56:13.233 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ myredis 127.0.0.1 6380
128928:X 27 Apr 2022 15:56:43.265 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ myredis 127.0.0.1 6380
自动主节点转到6380
如果master节点断开,这时候就会从机选择一个主服务器
当6379这个服务重新启动,就会变为6380的从机
哨兵模式
优点:
1.基于主从复制模式,所有的主从配置优点,都有
2.主从可以切换,故障可以转移,系统的可用性就会更好
3.哨兵模式就是主从模式的升级版,自动化,更加健壮。
缺点:
1.不好扩容,集群到达上限,扩容很麻烦
2.实现哨兵模式的配置很麻烦,里面有很多选择。