reids集群

1.搭建redis,并说明redis持久化原理


  • redis的持久化分为RDB(snapshotting)和AOF(Append Only File)两种。

    • RDB:按照实现制定的策略,周期性地将数据从内存中同步至磁盘上,数据文件默认为dump.rdb,为二进制格式。在客户端可使用SAVE或BGSAVE命令来手动启动快照保存机制。因为此种方式是按照既定策略实现同步,所以有可能会存在数据同步不及时导致数据缺失的问题。
      • SAVE:同步方式,即在主线程中保存快照,此时会阻塞所有的客户端请求;
      • BGSAVE:异步方式,不会阻塞客户端请求
    • AOF:记录每次写操作至指定的磁盘文件尾部实现的持久化;实际上数据并未保存至磁盘上,只是类似于mysql二进制日志的形式将所有的操作记录下来,当redis重启时,可通过重新执行文件中的命令在内存中重建出数据库达到数据持久化保存的效果。此种方式可解决数据同步不及时的问题,当数据提交时直接将内存中的数据同步至磁盘上,此种方式不与LInux内核管理方式同步进行。
      • BGREWRITEAOF:AOF文件重写
        • 不会读取正在使用的AOF文件,而是通过将内存中的数据以命令的方式保存至临时文件中,完成之后替换原来的AOF文件;同一个键以最后一次的数据为准
  • 注意:

    • 当RDB和AOF模式同时启用时:
      • BGSAVE和BGREWRITEAOF不会同时进行
      • redis服务器启动时使用持久化的数据文件恢复数据会优先使用AOF文件

[root@localhost ~]# vim /etc/redis.conf             #yum安装redis配置文件
protected-mode yes                      #是否开启安全模式
bind 0.0.0.0                                #允许远程访问redis
port 6379                                   #暴露端口为6379
requirepass sigeling                    #redis连接密码
#rename-command CONFIG ""       #将config命令重置为其它
################################ SNAPSHOTTING  ################################SNAPSHOTTING模式
save 900 1                          #after 900 sec (15 min) if at least 1 key changed
save 300 10                         #after 300 sec (5 min) if at least 10 keys changed
save 60 10000                       #after 60 sec if at least 10000 keys changed
stop-writes-on-bgsave-error yes             #当数据存盘出现错误时是否停止写入
rdbcompression yes                              #是否对存储的数据进行压缩
rdbchecksum yes                                 #是否对存储的数据进行校验
dbfilename dump.rdb                             #rdb数据文件
dir /var/lib/redis                                  #数据目录
############################## APPEND ONLY MODE ###############################
appendonly no                               #是否开启AOF模式
appendfilename "appendonly.aof"     #AOF模式数据文件名称
# appendfsync always                       #策略,每次写操作完成后都进行记录
appendfsync everysec                        #每一秒写入aof文件,并完成磁盘同步
# appendfsync no                            #由系统来决定何时进行记录
[root@localhost ~]# systemctl start redis               #启动redis
[root@localhost ~]# ss -ntl                             #查看端口是否处于监听状态
State       Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN      0      128              *:6379                         *:*  
[root@localhost ~]# redis-cli -h 127.0.0.1 -p 6379 -a sigeling          #使用redis-cli命令进行连接,-a指定密码,-p指定端口,-h指定主机
127.0.0.1:6379> set name zhang                      
OK
127.0.0.1:6379> get name
"zhang"
[root@localhost ~]# ls /var/lib/redis/dump.rdb 
/var/lib/redis/dump.rdb
[root@localhost redis]# ls /var/lib/redis/appendonly.aof 
/var/lib/redis/appendonly.aof

2.搭建redis,并实现主从复制


一个Master可以有多个Slave节点,支持链式复制
Master节点以非阻塞的方式同步数据到Slave节点
master节点IP 192.168.79.27
slave节点IP 192.168.79.47

[root@slave1 ~]# vim /etc/redis.conf 
################################# REPLICATION #################################
# slaveof <masterip> <masterport>   #设置主节点IP和端口,表明是从哪个节点上同步数据 
slaveof 192.168.79.27 6379
# masterauth <master-password>      #主节点的密码
masterauth sigeling
slave-serve-stale-data yes                  #是否允许从节点使用过期的数据响应客户端请求
slave-read-only yes                             #从节点只读
repl-diskless-sync no                           #新的从节点或某个较长时间未能与主节点进行同步的从节点重新与主节点通信时需要做"full synchronization",此时同步方式有两种:1.Disk-backend:主节点新创建快照文件于磁盘中,而后将其发送给从节点;2.Diskless:主节点新创建快照后直接通过网络套接字文件发送给从节点;为了实现多节点并行复制,通常需要在复制启动前延迟一个时间段
    no, Disk-backed, Diskless
repl-diskless-sync-delay 5                  #设置延时,在延时时间内连接到master节点上的slave节点可以使用同一个snapshot快照进行同步
slave-priority 100                      #复制集群中,主节点故障时,sentinel应用场景中的主节点选举时使用的优先级;数字越小表示优先级越高,但0表示不参与选举。
repl-ping-slave-period 10           #主节点判断从节点连接状态的周期
repl-timeout 60                      #复制超时时长
repl-disable-tcp-nodelay no         #启用tcp-nodelay,表示即时传输数据
#min-slaves-to-write 3                      #主节点仅允许当与其能够通信的从节点数量大于等于此处的值时接受写操作
#min-slaves-max-lag 10              #从节点延迟时长超出此处指定的时长时,主节点会拒绝写入操作
[root@slave1 redis]# systemctl restart redis            #从节点配置完成后重启redis
[root@master ~]# redis-cli -h 192.168.79.27 -a sigeling         #主节点存入数据然后在从节点上验证是否同步
192.168.79.27:6379> get age
"16"
[root@slave1 redis]# redis-cli -h 192.168.79.47
192.168.79.47:6379> get age
"16"
[root@slave1 redis]# ls /var/lib/redis/dump.rdb             #从节点dump文件
/var/lib/redis/dump.rdb
[root@slave1 redis]# ls /var/lib/redis/appendonly.aof       #从节点AOF文件
/var/lib/redis/appendonly.aof
redis-cli> SLAVEOF <MASTER_IP> <MASTER_PORT>            #命令行配置slave节点,不用重启即可生效
redis-cli> CONFIG SET masterauth <PASSWORD>

3.搭建redis集群


vim /etc/redis.conf
cluster-enabled             #是否开启集群配置
cluster-config-file           #集群节点集群信息配置文件,每个节点都有一个,由redis生成和更新,配置时避免名称冲突
cluster-node-timeout        #集群节点互联超时的阈值,单位毫秒
cluster-slave-validity-factor   #行故障转移时,slave会申请成为master。有时slave会和master失联很久导致数据较旧,这样的slave不应该成为master。这个配置用来判断slave是否和master失联时间过长
[root@master ~]# redis-cli -a sigeling
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> cluster reset
OK
[root@master ~]# systemctl restart redis
[root@master redis]# rm -rf appendonly.aof dump.rdb     #配置集群功能时各节点应当是干净的,没有任何数据的,否则会报错
[root@master redis]# redis-cli -c -a sigeling -h 192.168.79.27 -p 6379 cluster addslots {0..5500}           #为每个节点分片slot
OK
[root@master redis]# redis-cli -c -a sigeling -h 192.168.79.47 -p 6379 cluster addslots {5501..11000}
OK
[root@master redis]# redis-cli -c -a sigeling -h 192.168.79.57 -p 6379 cluster addslots {11001..16383}
OK
[root@master redis]# redis-cli -a sigeling -h 192.168.79.27 -p 6379
192.168.79.27:6379> CLUSTER MEET 192.168.79.47 6379
OK
192.168.79.27:6379> CLUSTER MEET 192.168.79.57 6379
OK          #三个节点均指定cluster meet命令设定集群成员关系
[root@master redis]# redis-cli -a sigeling -h 192.168.79.27 -p 6379 -c
192.168.79.27:6379> set student1 xiaowang
-> Redirected to slot [11403] located at 192.168.79.57:6379
OK
192.168.79.57:6379> get student1
"xiaowang"

sentinel集群
master 192.168.79.27
node01 192.168.79.47
node02 192.168.79.57

先配置主从复制
[root@node01 ~]# vim /etc/redis.conf 
slaveof 192.168.79.27 6379
masterauth sigeling
systemctl restart redis
[root@node02 ~]# vim /etc/redis.conf 
slaveof 192.168.79.27 6379
masterauth sigeling
systemctl restart redis
[root@master ~]# vim /etc/redis-sentinel.conf
sentinel monitor mymaster 192.168.79.27 6379 2
sentinel auth-pass mymaster sigeling
[root@master ~]# systemctl restart redis-sentinel.service
[root@node01 ~]# vim /etc/redis-sentinel.conf
sentinel monitor mymaster 192.168.79.27 6379 2
sentinel auth-pass mymaster sigeling
[root@node01 ~]# systemctl restart redis-sentinel.service
[root@node02 ~]# vim /etc/redis-sentinel.conf
sentinel monitor mymaster 192.168.79.27 6379 2
sentinel auth-pass mymaster sigeling
[root@node02 ~]# systemctl restart redis-sentinel.service
[root@master ~]# systemctl stop redis
[root@node01 ~]# tailf /var/log/redis/sentinel.log
5450:X 05 Aug 06:48:14.900 # Sentinel ID is b4245baaf11c30ec3cbb29d20d45e5d85352d3c0
5450:X 05 Aug 06:48:14.900 # +monitor master mymaster 192.168.79.27 6379 quorum 2                       #表示sentinel开启成功,看如下日志可看到有两个slave节点加入
5450:X 05 Aug 06:48:14.903 * +slave slave 192.168.79.57:6379 192.168.79.57 6379 @ mymaster 192.168.79.27 6379
5450:X 05 Aug 06:48:14.905 * +slave slave 192.168.79.47:6379 192.168.79.47 6379 @ mymaster 192.168.79.27 6379
5450:X 05 Aug 06:48:15.950 * +sentinel sentinel 67f23aa33d00406037365ab39ca30d6683321952 192.168.79.57 26379 @ mymaster 192.168.79.27 6379
5450:X 05 Aug 06:48:45.987 # +sdown sentinel 67f23aa33d00406037365ab39ca30d6683321952 192.168.79.57 26379 @ mymaster 192.168.79.27 6379
5450:X 05 Aug 06:49:35.313 * +reboot slave 192.168.79.57:6379 192.168.79.57 6379 @ mymaster 192.168.79.27 6379
5450:X 05 Aug 06:50:28.438 # +sdown master mymaster 192.168.79.27 6379                  #此处为停止master节点上redis时的日志信息,表示redis的master节点下线
5450:X 05 Aug 06:50:28.481 # +new-epoch 13
5450:X 05 Aug 06:50:28.483 # +vote-for-leader 34ae98095e76cc9c33a0a202a923c2d34fe3ed60 13       #此为master节点下线之后的选举过程
5450:X 05 Aug 06:50:28.866 # +config-update-from sentinel 34ae98095e76cc9c33a0a202a923c2d34fe3ed60 192.168.79.27 26379 @ mymaster 192.168.79.27 6379        
5450:X 05 Aug 06:50:28.867 # +switch-master mymaster 192.168.79.27 6379 192.168.79.47 6379              #切换master节点至192.168.79.47
5450:X 05 Aug 06:50:28.867 * +slave slave 192.168.79.57:6379 192.168.79.57 6379 @ mymaster 192.168.79.47 6379
5450:X 05 Aug 06:50:28.867 * +slave slave 192.168.79.27:6379 192.168.79.27 6379 @ mymaster 192.168.79.47 6379
5450:X 05 Aug 06:50:58.905 # +sdown slave 192.168.79.27:6379 192.168.79.27 6379 @ mymaster 192.168.79.47 6379
5450:X 05 Aug 06:51:16.570 # -sdown slave 192.168.79.27:6379 192.168.79.27 6379 @ mymaster 192.168.79.47 6379
5450:X 05 Aug 06:51:26.536 * +convert-to-slave slave 192.168.79.27:6379 192.168.79.27 6379 @ mymaster 192.168.79.47 6379        #此处重启原master节点的redis,将其作为新集群中的slave节点使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值