快速掌握Redis——第七招:运维必学 主从和监控sentinel(未排版)

本文深入解析Redis主从复制过程,包括SYNC命令、数据同步机制和主从切换策略,并通过实践步骤展示如何配置Redis主从复制和哨兵集群,实现高可用性和负载均衡。

1 主从同步 Replication

  • 过程 slave 配置复制(Replication)策略后,会向master 主动发送一个SYNC命令。Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,又会完全同步数据,不是"增量"的。

  • 配置 redis的主从很简单,master 几乎不用配置,主要配置 slave ,1个mater 可以有N个slave(若干个) ,而且当master遇到问题时,可以切换某一个slave 为master ,避免单点故障 ,保证数据完整性。 笔记本虚拟机内存有限,我就在不同的端口开启redis服务,达到不同机器(ip)开启redis的效果。 master port: 6379
    slave 1 port: 6380 slave 2 port: 6381

      [root@localhost redis]# ll
      total 160
      drwxr-xr-x. 2 root root   4096 Mar 26 20:57 bin
      -rw-r--r--. 1 root root 120602 Mar 29 22:36 dump.rdb
      -rw-r--r--. 1 root root  36028 Mar 29 22:35 redis.conf
      [root@localhost redis]# ps -ef |grep redis
      root      2141     1  0 Mar29 ?        00:00:56 ./bin/redis-server *:6379
      root      4986  4959  0 18:40 pts/0    00:00:00 grep redis
      [root@localhost redis]# kill -9 2141
      [root@localhost redis]# cp redis.conf redis6380.conf
      [root@localhost redis]# vim redis6380.conf  
              ##   将
              # slaveof <masterip> <masterport>
              改为
              slaveof 127.0.0.1 6379
              保存退出。
      [root@localhost redis]# bin/redis-server ./redis6380.conf
      [root@localhost redis]# bin/redis-server ./redis.conf
      [root@localhost redis]# bin/redis-cli
      127.0.0.1:6379> keys *
       1) "name"
       2) "fasdff"
       3) "fasdfasf"
       4) "counter:__rand_int__"
       5) "faffffff"
       6) "age"
       7) "key:__rand_int__"
       8) "faff"
       9) "fafffssssdfafff"
      10) "mylist"
    

这是上次的数据,6379有数据了,重开个终端,连接 6380端口。

    [root@localhost redis]# ./bin/redis-cli -h 127.0.0.1 -p 6380

    127.0.0.1:6380> keys *
     1) "name"
     2) "faffffff"
     3) "counter:__rand_int__"
     4) "fasdfasf"
     5) "fasdff"
     6) "key:__rand_int__"
     7) "age"
     8) "mylist"
     9) "faff"
    10) "fafffssssdfafff"

数据太乱了,我在6379 端口执行flushdb ,在6380端口的数据也没了。

  • 主从好处:
  1. 实际部署时,这么分配,原先的master(s) 主要做数据收集,slave(s)做备份,其他工作,分担主压力。
  2. 读写分离:为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成。即便如此,系统的伸缩性还是得到了很大的提高。
  3. Master 是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
  4. Slave 同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。

2

人工更改配置文件很 low , 请出哨兵( sentinel ) 复制sentinel.conf

        [root@localhost redis]# cp /usr/local/src/redis-2.8.19/sentinel.conf /usr/local/redis/
        [root@localhost redis]# ls
        bin  dump.rdb  redis6380.conf  redis.conf  sentinel.conf
        [root@localhost redis]# vim sentinel.conf
        [root@localhost redis]# grep -v ^# sentinel.conf | tee sentinel.conf #不显示配置的说明文件,重定向到sentinel.conf
        port 26379
        dir /tmp  
        sentinel monitor mymaster 127.0.0.1 6379 2   
        sentinel down-after-milliseconds mymaster 30000   
        sentinel parallel-syncs mymaster 1 
        sentinel failover-timeout mymaster 180000
接下来配置下。
  1. 6380 和 6381 都是6379的slave:将各自配置文件slaveof设置为 slaveof 127.0.0.1 6379 并且端口改为各自端口。

  2. sentinel.conf 我们这里只设置和6379(master)端口对应的哨兵sentinel,每个端口都可以设置哨兵。

     [root@localhost redis]# ll
     total 120
     drwxr-xr-x. 2 root root  4096 Mar 26 20:57 bin
     -rw-r--r--. 1 root root    40 Mar 30 21:37 dump.rdb
     -rw-r--r--. 1 root root 36085 Mar 30 21:37 redis6380.conf
     -rw-r--r--. 1 root root 36109 Mar 30 21:37 redis6381.conf
     -rw-r--r--. 1 root root 36028 Mar 29 22:35 redis.conf
     -rw-r--r--. 1 root root   824 Mar 30 21:37 sentinel.conf
     [root@localhost redis]# cat sentinel.conf
     #sentinel的端口
      port 26379
    

    dir "/tmp"

    自定义服务器名 mymater

    控制的机器ip 端口

    最后的”1”为当至少有1个从赞同sentinel的监控结果,判为主失效

    sentinel monitor mymaster 127.0.0.1 6380 1

    #10000ms后连接不到master就认为断开了 sentinel down-after-milliseconds mymaster 10000 #sentinel can-failover mymaster yes #是否允许sentinel修改slave->master. 如为no,则只能监控,无权修改 #允许一次性有几台slave连接新的master(建议一个) sentinel config-epoch mymaster 1

3.启动各个端口服务。

            [root@localhost redis]# bin/redis-server ./redis6380.conf
            [root@localhost redis]# bin/redis-server ./redis6381.conf
            [root@localhost redis]# bin/redis-server ./redis.conf

在此输入图片描述

  1. 启动哨兵

        [root@localhost redis]# bin/redis-server ./sentinel.conf --sentinel
    

在此输入图片描述

5.重新开启个终端,杀死6379端口的服务,或者shutdown,这样等会儿就能切换优先级搞得slave作为master了。

        [5780] 31 Mar 00:52:31.266 # +try-failover master mymaster 127.0.0.1 6380
        [5780] 31 Mar 00:52:31.269 # +vote-for-leader 86d663c9700709770705bdb758337364eb82a102 3
        [5780] 31 Mar 00:52:31.269 # +elected-leader master mymaster 127.0.0.1 6380

6380成为master了。

转载于:https://my.oschina.net/VASKS/blog/394325

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值