码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-03-31 20:37:06      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

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端口的数据也没了。

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

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

标签:

原文地址:http://my.oschina.net/VASKS/blog/394325

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!