redis主从复制

一、简介

Redis支持将数据同步到多台slave上,这种特性对提高读取性能非常有益

1)master可以有多台slave

2)  除了多个slave连到相同master外,slave也可以连接到其它slave形成图状结构

3)主从复制不会阻塞master,也就是说当一个或多个slave与master连接进行复制时,master可以继续处理客户端发来的请求,相反slave在初次同步数据时则会阻塞,不能处理客户端请求

4)主从复制可以用来提高系统的伸缩性,我们可以用多个slave专门负责客户端的读请求,可以做数据冗余

5)可以在master禁用数据持久化,只需要注释掉master配置文件redis.conf的save配置,然后只在slave配置持久化

二、Demo

博主这里就没装多台机器,本来可以用三台虚拟机建一个局域网,来实现redis的主从复制,在这里偷下懒,利用启动多个配置文件来取代,这里一共有三个redis.conf文件,如下:

[jacky@jacky ~]$ su
密码:
[root@jacky jacky]# cd /etc/redis
[root@jacky redis]# ls -l
总用量 176
-rw-r--r--. 1 root root 41576 11月  3 22:03 redis6379.conf
-rw-r--r--. 1 root root 41560 11月  3 20:08 redis6380.conf
-rw-r--r--. 1 root root 41560 11月  3 20:08 redis6381.conf

2.1、主要修改配置文件的以下信息,例如修改redis8381.conf,同理,redis6379.conf和redis6380.conf也一样

daemonize yes

pidfile /var/run/redis6381.pid

port 6381

logfile "6381.log"

dbfilename dump6381.rdb

2.2、一主二从

在这里博主设置79为master;80和81为slave,配置redis主从复制的时候只需要配置从机不需要配置主机(配主补配从)

6380 配置

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379

6381 配置

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379

 

就这样,一主二从配置就完毕了,哈哈,很简单吧,79原来的数据和新的数据都会同步到80和81上,如下

6379

127.0.0.1:6379> set k1 v1    #没配置主从之前插入的
OK
127.0.0.1:6379> set k2 v2    #没配置主从之前插入的
OK
127.0.0.1:6379> set k3 v3    #没配置主从之前插入的
OK
127.0.0.1:6379> set k4 v4    #配置主从之后插入的
OK

6380

k1和k4都能拿到

127.0.0.1:6380> get k4  
"v4"
127.0.0.1:6380> get k1
"v1"

6381

k3和k4都能拿到

127.0.0.1:6381> get k4
"v4"
127.0.0.1:6381> get k3
"v3"

到这里,一主二从配置成功,但是在生产时,master和slave都有可能突然之间死机,

1)如果主机死掉了,默认情况下,主机重新启动,角色还是主机

2)如果从机死掉了,默认情况下,从机重新启动,角色变成没有独立主机了,需要重新配置,除非从机在redis.conf文件里配置了,否则从机不会

     重新连接主机

3)读写分离,是指redis从机只能负责读,不能写,主机能够写能够读

2.3、新火相传

新火相传的意思其实就是去中心化,现在只有80和81两台slave连接master,假如,有100台slave的话,那么master就压力很大了,所以redis又推出了新火相传的解决方案,上一台slave,可以下一台slave的master.

79和80不改变,在81上配置如下:

127.0.0.1:6381> SLAVEOF 127.0.0.1 6380
OK

这样就在79上插入一个值,也可以同步到81

2.4、反客为主

上面提到了,当master死机的时候,重写启动还是master,现在时,我是想当master死机的时候,让某一台从机变成主机,这里是,让80变成主机,

只要当master死机器的时候,手动在80执行如下命令:

127.0.0.1:6380> SLAVEOF no one

同时,81也要重新配置,配置80为主机

127.0.0.1:6381> SLAVEOF 127.0.0.1 6380
OK

2.5、哨兵模式

简单的说,哨兵模式,就是反客为主的自动版,通过监控主机,当主机挂掉的时候,就几台从机中透过投票选出新的主机

2.5.1 在 /etc/redis/目录下新建一个sentinel.conf文件

里面的内容为

sentinel monitor host6379 127.0.0.1 6379 1 

host6379为监控的主机名词,自定义的,后面的“1”表示,当主机挂掉的时候,从机自动进行投票,谁的票数首先超过“1”,谁就为主机

2.5.2 启动sentinel.conf 文件

[root@jacky bin]# ./redis-sentinel /etc/redis/sentinel.conf
15482:X 05 Nov 17:44:31.958 * Increased maximum number of open files to 10032 (it was originally set to 1024).
15482:X 05 Nov 17:44:31.960 # Warning: 32 bit instance detected but no memory limit set. Setting 3 GB maxmemory limit with 'noeviction' policy now.
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.0.6 (00000000/0) 32 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 15482
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

15482:X 05 Nov 17:44:31.966 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
15482:X 05 Nov 17:44:31.966 # Sentinel runid is 7cb8075de28bb16320934364995643e41ac24f67
15482:X 05 Nov 17:44:31.966 # +monitor master host6379 127.0.0.1 6379 quorum 1
15482:X 05 Nov 17:45:01.982 # +sdown master host6379 127.0.0.1 6379
15482:X 05 Nov 17:45:01.982 # +odown master host6379 127.0.0.1 6379 #quorum 1/1
15482:X 05 Nov 17:45:01.982 # +new-epoch 1
15482:X 05 Nov 17:45:01.982 # +try-failover master host6379 127.0.0.1 6379
15482:X 05 Nov 17:45:01.997 # +vote-for-leader 7cb8075de28bb16320934364995643e41ac24f67 1
15482:X 05 Nov 17:45:01.997 # +elected-leader master host6379 127.0.0.1 6379
15482:X 05 Nov 17:45:01.997 # +failover-state-select-slave master host6379 127.0.0.1 6379
15482:X 05 Nov 17:45:02.060 # -failover-abort-no-good-slave master host6379 127.0.0.1 6379
15482:X 05 Nov 17:45:02.129 # Next failover delay: I will not start a failover before Sat Nov  5 17:51:02 2016

这样就算完成了

注意:就是当原来的master回来后,不是做独立的mater,而是做新主机的slave

posted @ 2016-11-05 12:13  坏~牧羊人  阅读(1721)  评论(1编辑  收藏  举报