美文网首页
Redis(二)

Redis(二)

作者: 吃可爱长大鸭 | 来源:发表于2019-12-27 20:23 被阅读0次

    第十二章 Redis主从复制

    快速创建第二台redis节点命令:

    rsync -avz db01:/opt/* /opt/
    rm -rf /data 
    mkdir /data/redis_6379/ 
    
    cd /opt/redis 
    make install 
    sed -i 's#51#52#g' /opt/redis_6379/conf/redis_6379.conf
    redis-server /opt/redis_6379/conf/redis_6379.conf
    

    配置方法:

    方法1: 临时生效
    [root@db-02 ~]# redis-cli -h 10.0.0.52
    10.0.0.52:6379> SLAVEOF 10.0.0.51 6379
    OK
    

    方法2: 写入配置文件

    SLAVEOF 10.0.0.51 6379
    

    主从复制流程:

    1.从节点发送同步请求到主节点
    2.主节点接收到从节点的请求之后,做了如下操作
    - 立即执行bgsave将当前内存里的数据持久化到磁盘上
    - 持久化完成之后,将rdb文件发送给从节点
    3.从节点从主节点接收到rdb文件之后,做了如下操作
    - 清空自己的数据
    - 载入从主节点接收的rdb文件到自己的内存里
    4.后面的操作就是和主节点实时的了
    

    取消主从复制

    SLAVEOF no one
    

    注意!!!

    1.从节点只读不可写
    2.从节点不会自动故障转移,它会一直同步主
    10.0.0.52:6379> set k1 v1
    (error) READONLY You can't write against a read only slave.
    3.主从复制故障转移需要人工介入
    - 修改代码指向REDIS的IP地址
    - 从节点需要执行SLAVEOF no one
    

    注意!!!

    1.从节点会清空自己原有的数据,如果同步的对象写错了,就会导致数据丢失
    

    安全的操作:

    1.无论是同步,无论是主节点还是从节点
    2.先备份一下数据
    

    第十三章 Redis哨兵

    哨兵架构图

    image.png

    1.db03上执行快速安装第3个redis节点

    rsync -avz 10.0.0.51:/opt/* /opt/
    mkdir /data/redis_6379 -p
    cd /opt/redis 
    make install 
    sed -i 's#51#53#g' /opt/redis_6379/conf/redis_6379.conf
    redis-server /opt/redis_6379/conf/redis_6379.conf
    redis-cli
    

    2.启动所有的单节点

    redis-server /opt/redis_6379/conf/redis_6379.conf 
    

    3.配置主从复制

    redis-cli -h 10.0.0.52 slaveof 10.0.0.51 6379
    redis-cli -h 10.0.0.53 slaveof 10.0.0.51 6379
    

    4.安装部署3个哨兵节点

    ===========================
    !!!!注意!!!!
    三个节点的bind IP修改为自己的IP地址
    ===========================
    
    mkdir -p /data/redis_26379
    mkdir -p /opt/redis_26379/{conf,pid,logs}
    

    5.配置哨兵的配置文件

    注意!三台机器都操作

    cat >/opt/redis_26379/conf/redis_26379.conf << EOF
    bind $(ifconfig eth0|awk 'NR==2{print $2}')
    port 26379
    daemonize yes
    logfile /opt/redis_26379/logs/redis_26379.log
    dir /data/redis_26379
    sentinel monitor myredis 10.0.0.51 6379 2 
    sentinel down-after-milliseconds myredis 3000
    sentinel parallel-syncs myredis 1
    sentinel failover-timeout myredis 18000
    EOF
    

    6.启动哨兵

    redis-sentinel /opt/redis_26379/conf/redis_26379.conf
    

    7.验证主节点

    redis-cli -h 10.0.0.51 -p 26379 Sentinel get-master-addr-by-name myredis
    redis-cli -h 10.0.0.52 -p 26379 Sentinel get-master-addr-by-name myredis
    redis-cli -h 10.0.0.53 -p 26379 Sentinel get-master-addr-by-name myredis
    

    8.模拟故障转移

    - 关闭主节点服务上的所有redis进程
    - 观察其他2个节点会不会发生选举
    - 查看配置文件里会不会自动更新
    - 查看新的主节点能不能写入
    - 查看从节点能否正常同步
    

    9.模拟故障修复上线

    - 启动单节点
    - 启动哨兵 
    

    10.模拟权重选举

    - 设置其他节点的权重为0
    - 手动发起重新选举
    - 观察所有节点消息是否同步
    - 观察切换结果是否符合预期
    
    命令解释:
    1.查询命令:CONFIG GET slave-priority
    2.设置命令:CONFIG SET slave-priority 0
    3.主动切换:sentinel failover myredis
    
    操作命令:
    redis-cli -h 10.0.0.52 -p 6379 CONFIG SET slave-priority 0
    redis-cli -h 10.0.0.53 -p 6379 CONFIG SET slave-priority 0
    redis-cli -h 10.0.0.51 -p 26379 sentinel failover myredis
    
    验证选举结果:
    redis-cli -h 10.0.0.51 -p 26379 Sentinel get-master-addr-by-name myredis
    

    第十四章 Redis哨兵+主从+密码

    主从密码配置文件里添加2行参数:

    requirepass "123456"
    masterauth "123456"
    

    哨兵配置文件添加一行参数:

    sentinel auth-pass myredis 123456
    #如果redis配置了密码,那这里必须配置认证,否则不能自动切换
    sentinel auth-pass mymaster redispass 
    

    第十五章 Redis哨兵设置权重手动故障转移

    image.png

    1.查看权重

    CONFIG GET slave-priority
    

    2.设置权重

    在其他节点把权重设为0

    CONFIG SET slave-priority 0
    

    3.主动发起重新选举

    sentinel failover mymaster
    

    4.恢复默认的权重

    CONFIG SET slave-priority 100
    

    第十六章 redis集群安装部署

    1.目录规划

    主节点     6380
    从节点     6381
    

    2.db01创建命令

    pkill redis
    mkdir -p /opt/redis_{6380,6381}/{conf,logs,pid}
    mkdir -p /data/redis_{6380,6381}
    
    cat >/opt/redis_6380/conf/redis_6380.conf<<EOF
    bind 10.0.0.51
    port 6380
    daemonize yes
    pidfile "/opt/redis_6380/pid/redis_6380.pid"
    logfile "/opt/redis_6380/logs/redis_6380.log"
    dbfilename "redis_6380.rdb"
    dir "/data/redis_6380/"
    cluster-enabled yes
    cluster-config-file nodes_6380.conf
    cluster-node-timeout 15000
    EOF
    
    cd /opt/
    cp redis_6380/conf/redis_6380.conf redis_6381/conf/redis_6381.conf
    sed -i 's#6380#6381#g' redis_6381/conf/redis_6381.conf 
    rsync -avz /opt/redis_638* 10.0.0.52:/opt/
    rsync -avz /opt/redis_638* 10.0.0.53:/opt/
    redis-server /opt/redis_6380/conf/redis_6380.conf
    redis-server /opt/redis_6381/conf/redis_6381.conf
    ps -ef|grep redis
    

    3.db02操作命令

    pkill redis
    find /opt/redis_638* -type f -name "*.conf"|xargs sed -i "/bind/s#51#52#g"
    mkdir –p /data/redis_{6380,6381}
    redis-server /opt/redis_6380/conf/redis_6380.conf
    redis-server /opt/redis_6381/conf/redis_6381.conf
    ps -ef|grep redis
    

    4.db03操作命令

    pkill redis
    find /opt/redis_638* -type f -name "*.conf"|xargs sed -i "/bind/s#51#53#g"
    mkdir –p /data/redis_{6380,6381}
    redis-server /opt/redis_6380/conf/redis_6380.conf
    redis-server /opt/redis_6381/conf/redis_6381.conf
    ps -ef|grep redis
    

    发现节点

    redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.51 6381
    redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.52 6380
    redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.52 6381
    redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.53 6380
    redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.53 6381
    redis-cli -h 10.0.0.51 -p 6380 CLUSTER NODES
    

    手动分配槽位

    1.槽位规划

    db01:6380  0-5460
    db02:6380  5461-10921   #如果不够就+1
    db03:6380  10922-16383  #这个也是+1
    

    2.分配槽位

    redis-cli -h 10.0.0.51 -p 6380 CLUSTER ADDSLOTS {0..5460}
    redis-cli -h 10.0.0.52 -p 6380 CLUSTER ADDSLOTS {5461..10921}
    redis-cli -h 10.0.0.53 -p 6380 CLUSTER ADDSLOTS {10922..16383}
    

    3.查看集群状态

    redis-cli -h db01 -p 6380 CLUSTER info
    

    4.允许的槽位个数误差范围2%以内

    手动部署复制关系

    image.png
    image.png
    redis-cli -h 10.0.0.51 -p 6381 CLUSTER REPLICATE  "uuid 地址"
    redis-cli -h 10.0.0.52 -p 6381 CLUSTER REPLICATE  "uuid 地址"
    redis-cli -h 10.0.0.53 -p 6381 CLUSTER REPLICATE  "uuid 地址"
    

    相关文章

      网友评论

          本文标题:Redis(二)

          本文链接:https://www.haomeiwen.com/subject/vyodoctx.html