基于redis的主从配置和高可用搭建

原理部分转自https://www.cnblogs.com/liyasong/p/redis_jiqun.html?utm_source=itdadao&utm_medium=referral
redis集群的架构图:
这里写图片描述

在这个图中,每一个蓝色的圈都代表着一个redis的服务器节点。它们任何两个节点之间都是相互连通的。
客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作。
那么redis是怎么做到的呢?首先,在redis的每一个节点上,都有这么两个东西,一个是插槽
slot可以理解为是一个可以存储两个数值的一个变量这个变量的取值范围是:0-16383。
还有一个就是cluster我个人把这个cluster理解为是一个集群管理的插件。当我们的存取的key
到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 
key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,
然后直接自动跳转到这个对应的节点上进行存取操作。

这里写图片描述

还有就是因为如果集群的话,是有好多个redis一起工作的,那么,就需要这个集群不是那么容易挂掉,所以呢,
理论上就应该给集群中的每个节点至少一个备用的redis服务。这个备用的redis称为从节点(slave)。那么这个
集群是如何判断是否有某个节点挂掉了呢?
首先要说的是,每一个节点都存有这个集群所有主节点以及从节点的信息。
它们之间通过互相的ping-pong判断是否节点可以连接上。如果有一半以上的节点去ping一个节点的时候没有回应,
集群就认为这个节点宕机了,然后去连接它的备用节点。如果某个节点和所有从节点全部挂掉,我们集群就进入faill状态。
还有就是如果有一半以上的主节点宕机,那么我们集群同样进入发力了状态。这就是我们的redis的投票机制,具体原理如下图所示:

这里写图片描述

(1)投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),
认为当前master节点挂掉.
(2):什么时候整个集群不可用(cluster_state:fail)? 
a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]
不完整时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群
兼容部分失败.
b:如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.

redis主从复制搭建
实验环境:

server1:172.25.38.1    主节点
server2:172.25.38.2    从节点
server3:172.25.38.3    从节点

在server1配置主节点:

[root@server1 ~]# tar zxf redis-4.0.8.tar.gz   解压redis包
[root@server1 ~]# ls
mha4mysql-manager-0.56-0.el6.noarch.rpm
mha4mysql-node-0.56-0.el6.noarch.rpm
perl-Config-Tiny-2.12-7.1.el6.noarch.rpm
perl-Email-Date-Format-1.002-5.el6.noarch.rpm
perl-Log-Dispatch-2.27-1.el6.noarch.rpm
perl-Mail-Sender-0.8.16-3.el6.noarch.rpm
perl-Mail-Sendmail-0.79-12.el6.noarch.rpm
perl-MIME-Lite-3.027-2.el6.noarch.rpm
perl-MIME-Types-1.28-2.el6.noarch.rpm
perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
redis-4.0.8
redis-4.0.8.tar.gz
send_report
[root@server1 ~]# cd redis-4.0.8   进去解压目录
[root@server1 redis-4.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@server1 redis-4.0.8]# yum install gcc -y  安装gcc依赖性

这里写图片描述

[root@server1 redis-4.0.8]# make && make install  编译与安装
[root@server1 redis-4.0.8]# which redis-cli  查看默认目录
/usr/local/bin/redis-cli
[root@server1 redis-4.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@server1 redis-4.0.8]# cd utils/
[root@server1 utils]# ./install_server.sh  调用脚本直接回车即可完成配置

这里写图片描述

[root@server1 utils]# vim /etc/redis/6379.conf  编辑配置文件
在配置文件redis.conf中,默认的bind 接口是127.0.0.1,也就是本地回环地址。
这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接,
这样可以避免将redis服务暴露于危险的网络环境中,防止一些不安全的人随随便便通过远程
连接到redis服务。
如果bind选项为空的话,那会接受所有来自于可用网络接口的连接。
下图设置为任意网段连接用于实验,其实不安全

这里写图片描述

[root@server1 utils]# /etc/init.d/redis_6379 stop  重载服务
Stopping ...
Redis stopped
[root@server1 utils]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@server1 utils]# netstat -antlp
Redis作者antirez同学向大家解释了采用6379作为默认端口的原因。
6379在是手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字。MERZ
长期以来被antirez及其朋友当作愚蠢的代名词。
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      6716/redis-server 0 
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      909/sshd            
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1322/master         
tcp        0      0 172.25.38.1:22              172.25.38.250:35740         ESTABLISHED 1370/sshd           
tcp        0      0 127.0.0.1:6379              127.0.0.1:59138             TIME_WAIT   -                   
tcp        0      0 :::22                       :::*                        LISTEN      909/sshd            
tcp        0      0 ::1:25                      :::*                        LISTEN      1322/master         
tcp        0      0 :::3306                     :::*                        LISTEN      3326/mysqld         

这里写图片描述

[root@server1 utils]# cd
[root@server1 ~]# ls
mha4mysql-manager-0.56-0.el6.noarch.rpm        perl-MIME-Lite-3.027-2.el6.noarch.rpm
mha4mysql-node-0.56-0.el6.noarch.rpm           perl-MIME-Types-1.28-2.el6.noarch.rpm
perl-Config-Tiny-2.12-7.1.el6.noarch.rpm       perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
perl-Email-Date-Format-1.002-5.el6.noarch.rpm  redis-4.0.8
perl-Log-Dispatch-2.27-1.el6.noarch.rpm        redis-4.0.8.tar.gz
perl-Mail-Sender-0.8.16-3.el6.noarch.rpm       send_report
perl-Mail-Sendmail-0.79-12.el6.noarch.rpm
[root@server1 ~]# scp -r redis-4.0.8.tar.gz server2:/root
redis-4.0.8.tar.gz                                100% 1689KB   1.7MB/s   00:00    
[root@server1 ~]# redis-cli  redis命令行工具,提供一个交互式界面
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> set name xfl
OK
127.0.0.1:6379> set name westos
OK
127.0.0.1:6379> quit

这里写图片描述
在server2同样的方法配置redis:

[root@server2 ~]# ls
mha4mysql-node-0.56-0.el6.noarch.rpm  redis-4.0.8.tar.gz
[root@server2 ~]# tar zxf redis-4.0.8.tar.gz 
[root@server2 ~]# ls
mha4mysql-node-0.56-0.el6.noarch.rpm  redis-4.0.8  redis-4.0.8.tar.gz
[root@server2 ~]# cd redis-4.0.8
[root@server2 redis-4.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@server2 redis-4.0.8]# yum install gcc -y 安装gcc

这里写图片描述

[root@server2 redis-4.0.8]# make  &&  make install 编译
[root@server2 redis-4.0.8]# which redis-cli
/usr/local/bin/redis-cli
[root@server2 redis-4.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@server2 redis-4.0.8]# cd utils/
[root@server2 utils]# ./install_server.sh 

这里写图片描述

[root@server2 utils]# vim /etc/redis/6379.conf  用slaveof命令搭建主从配置

这里写图片描述
这里写图片描述

[root@server2 utils]# /etc/init.d/redis_6379 stop  重载服务
Stopping ...
Redis stopped
[root@server2 utils]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@server2 utils]# netstat -antlp   查看默认端口开启
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      6701/redis-server 0 
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      909/sshd            
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1411/master         
tcp        0      0 172.25.38.2:22              172.25.38.250:55762         ESTABLISHED 1465/sshd           
tcp        0      0 127.0.0.1:6379              127.0.0.1:44169             TIME_WAIT   -                   
tcp        0      0 :::22                       :::*                        LISTEN      909/sshd            
tcp        0      0 ::1:25                      :::*                        LISTEN      1411/master         
tcp        0      0 :::3306                     :::*                        LISTEN      3292/mysqld         
tcp        0      0 ::ffff:172.25.38.2:3306     ::ffff:172.25.38.3:40018    ESTABLISHED 3292/mysqld   

这里写图片描述

[root@server2 utils]# cd
[root@server2 ~]# ls
mha4mysql-node-0.56-0.el6.noarch.rpm  redis-4.0.8  redis-4.0.8.tar.gz
[root@server2 ~]# cd redis-4.0.8
[root@server2 redis-4.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src

这里写图片描述
在主端更改名字在从端测试:

[root@server1 bin]# redis-cli   进入交互式界面
127.0.0.1:6379> set name xyy   设置名字
OK
[root@server2 redis-4.0.8]# redis-cli 
127.0.0.1:6379> get name  查看可以主从同步
"xyy"
127.0.0.1:6379> 

在server3搭建一主多从:

[root@server3 ~]# ls
mha4mysql-node-0.56-0.el6.noarch.rpm  redis-4.0.8.tar.gz
[root@server3 ~]# tar zxf redis-4.0.8.tar.gz 
[root@server3 ~]# ls
mha4mysql-node-0.56-0.el6.noarch.rpm  redis-4.0.8  redis-4.0.8.tar.gz
[root@server3 ~]# cd redis-4.0.8
[root@server3 redis-4.0.8]# yum install -y gcc

这里写图片描述

[root@server3 redis-4.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@server3 redis-4.0.8]# make && make install
[root@server3 redis-4.0.8]# cd utils/
[root@server3 utils]# ./install_server.sh 
脚本执行时,会有几个设置config等的问题,一般选择默认即可(回车)。
redis作为后台守护进程运行所需要的所有配置都设置好了。

这里写图片描述

[root@server3 utils]# vim /etc/redis/6379.conf   搭建主从

这里写图片描述
这里写图片描述

[root@server3 utils]# /etc/init.d/redis_6379 restart  重载服务
Stopping ...
Redis stopped
Starting Redis server...

这里写图片描述
在server3也可以主从复制

[root@server3 utils]# cd
[root@server3 ~]# redis-cli
127.0.0.1:6379> get name
"xyy"
127.0.0.1:6379> 

这里写图片描述
在server1通过配置高可用:

[root@server1 proc]# ls
1     1370  254   383   8          execdomains  locks         stat
10    1372  26    394   854        fb           mdstat        swaps
11    14    27    4     870        filesystems  meminfo       sys
12    15    271   40    9          fs           misc          sysrq-trigger
13    16    272   408   909        interrupts   modules       sysvipc
132   17    28    41    acpi       iomem        mounts        timer_list
1322  18    29    5     asound     ioports      mtd           timer_stats
1331  19    3     588   buddyinfo  ipmi         mtrr          tty
1333  2     30    6     bus        irq          net           uptime
134   20    3029  617   cgroups    kallsyms     pagetypeinfo  version
1345  21    31    618   cmdline    kcore        partitions    vmallocinfo
1359  22    32    668   cpuinfo    keys         sched_debug   vmstat
1361  222   33    6716  crypto     key-users    schedstat     zoneinfo
1363  23    3326  6762  devices    kmsg         scsi
1365  24    342   6768  diskstats  kpagecount   self
1367  25    376   7     dma        kpageflags   slabinfo
1369  252   38    71    driver     loadavg      softirqs
[root@server1 proc]# cd sys
[root@server1 sys]# ls
abi  crypto  debug  dev  fs  kernel  net  vm
[root@server1 sys]# cd vm/
[root@server1 vm]# ls
block_dump                  legacy_va_layout           oom_dump_tasks
compact_memory              lowmem_reserve_ratio       oom_kill_allocating_task
dirty_background_bytes      max_map_count              overcommit_memory
dirty_background_ratio      memory_failure_early_kill  overcommit_ratio
dirty_bytes                 memory_failure_recovery    page-cluster
dirty_expire_centisecs      min_free_kbytes            panic_on_oom
dirty_ratio                 min_slab_ratio             percpu_pagelist_fraction
dirty_writeback_centisecs   min_unmapped_ratio         scan_unevictable_pages
drop_caches                 mmap_min_addr              stat_interval
extfrag_threshold           nr_hugepages               swappiness
extra_free_kbytes           nr_hugepages_mempolicy     unmap_area_factor
hugepages_treat_as_movable  nr_overcommit_hugepages    vfs_cache_pressure
hugetlb_shm_group           nr_pdflush_threads         would_have_oomkilled
laptop_mode                 numa_zonelist_order        zone_reclaim_mode
[root@server1 vm]# cat overcommit_memory 
0
[root@server1 vm]# cd /var/lib/redis/
[root@server1 redis]# ls
6379
[root@server1 redis]# cd 6379/
[root@server1 6379]# ls
dump.rdb
[root@server1 6379]# cd
[root@server1 ~]# cd redis-4.0.8
[root@server1 redis-4.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@server1 redis-4.0.8]# cp sentinel.conf /etc/redis/  复制【配置文件
[root@server1 redis-4.0.8]# cd /etc/redis/
[root@server1 redis]# ls
6379.conf  sentinel.conf

这里写图片描述

[root@server1 redis]# vim sentinel.conf 
#sentinel.conf为其专用配置文件,主要设置如下参数:
#默认Port
   port 26379 
#指定要监控的master,mymaster是定义的master名字,quorum为法定票数2,此处指的是sentinel的数,
只有指定的sentinel同意时才认为sentinel做的决策是有效的,一般大于sentinel数量的半数。可以有多
个master,一组sentinel集群可以监控N个主从复制架构 
   sentinel monitor mymaster 17225381 6379 2   
#指定要连接的redis master密码 
   sentinel auth-pass mymaster redis  
#至少多长时间 连不上才认为主的离线了。单位为ms,   即连接超时时长
   sentinel down-after-milliseconds mymaster 30000 
# 刚刚设定为新主时,允许同时有多少个从向主发起同步请求。 
   sentinel parallel-syncs 1 
#当master故障时,把新的从提升为master,多长时间提不上就认为故障转移失败。 
   sentinel failover-timeout mymaster 180000 #故障转移的超时时长 

这里写图片描述
这里写图片描述

[root@server1 redis]# scp sentinel.conf server2:/etc/redis/  这里配置好了才可以传递给后端,
如果配置错了需要删除主从的文件重新cp出来不然监控会一直显示有问题,这是一个坑,因为文件已经被改变,
主从也已经被打乱可以自行测试主从。
sentinel.conf                                     100% 7588     7.4KB/s   00:00    
[root@server1 redis]# scp sentinel.conf server3:/etc/redis/
sentinel.conf                                     100% 7588     7.4KB/s   00:00  

这里写图片描述
在server2可以正常监控主从节点:

[root@server1 redis]# redis-server /etc/redis/sentinel.conf --sentinel    可以正常监控server1为
master,server2和server3为slave
正常redis-server可以通过配置文件来指定守护进程启动以及指定日志路径,但sentinel就不一样了。
正常启动redis的sentinel时,进程会直接在前台跑,一退出sentinel进程就关了:
6855:X 11 Aug 18:03:15.879 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
6855:X 11 Aug 18:03:15.879 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=6855, just started
6855:X 11 Aug 18:03:15.879 # Configuration loaded
6855:X 11 Aug 18:03:15.880 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 6855
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

6855:X 11 Aug 18:03:15.881 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
6855:X 11 Aug 18:03:15.926 # Sentinel ID is 8bc0aa8004ecf7444133212229da83cbfbebf104
6855:X 11 Aug 18:03:15.926 # +monitor master mymaster 172.25.38.1 6379 quorum 2
6855:X 11 Aug 18:03:15.927 * +slave slave 172.25.38.2:6379 172.25.38.2 6379 @ mymaster 172.25.38.1 6379
6855:X 11 Aug 18:03:15.942 * +slave slave 172.25.38.3:6379 172.25.38.3 6379 @ mymaster 172.25.38.1 6379

这里写图片描述
在server2也可以正常监控主从节点:

[root@server2 redis]# redis-server /etc/redis/sentinel.conf --sentinel
6814:X 11 Aug 18:04:14.713 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
6814:X 11 Aug 18:04:14.713 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=6814, just started
6814:X 11 Aug 18:04:14.713 # Configuration loaded
6814:X 11 Aug 18:04:14.714 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 6814
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

6814:X 11 Aug 18:04:14.715 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
6814:X 11 Aug 18:04:14.831 # Sentinel ID is 71eb497aee08528b99cc4aa45fb14c1b87bbf6f7
6814:X 11 Aug 18:04:14.831 # +monitor master mymaster 172.25.38.1 6379 quorum 2
6814:X 11 Aug 18:04:14.832 * +slave slave 172.25.38.2:6379 172.25.38.2 6379 @ mymaster 172.25.38.1 6379
6814:X 11 Aug 18:04:14.865 * +slave slave 172.25.38.3:6379 172.25.38.3 6379 @ mymaster 172.25.38.1 6379
6814:X 11 Aug 18:04:15.344 * +sentinel sentinel 8bc0aa8004ecf7444133212229da83cbfbebf104 172.25.38.1 26379 @ mymaster 172.25.38.1 6379

这里写图片描述
在server3也可以正常监控主从节点:

[root@server3 redis]# redis-server /etc/redis/sentinel.conf --sentinel
6176:X 11 Aug 18:04:59.856 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
6176:X 11 Aug 18:04:59.856 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=6176, just started
6176:X 11 Aug 18:04:59.856 # Configuration loaded
6176:X 11 Aug 18:04:59.857 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 6176
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

6176:X 11 Aug 18:04:59.858 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
6176:X 11 Aug 18:04:59.924 # Sentinel ID is 259fc555d45095ec5b431b46c38c4d89f0c085d7
6176:X 11 Aug 18:04:59.924 # +monitor master mymaster 172.25.38.1 6379 quorum 2
6176:X 11 Aug 18:04:59.925 * +slave slave 172.25.38.2:6379 172.25.38.2 6379 @ mymaster 172.25.38.1 6379
6176:X 11 Aug 18:04:59.957 * +slave slave 172.25.38.3:6379 172.25.38.3 6379 @ mymaster 172.25.38.1 6379
6176:X 11 Aug 18:05:00.854 * +sentinel sentinel 8bc0aa8004ecf7444133212229da83cbfbebf104 172.25.38.1 26379 @ mymaster 172.25.38.1 6379
6176:X 11 Aug 18:05:01.352 * +sentinel sentinel 71eb497aee08528b99cc4aa45fb14c1b87bbf6f7 172.25.38.2 26379 @ mymaster 172.25.38.1 6379

这里写图片描述
重新打开一个shell连接主节点:

[root@server1 ~]# redis-cli  登陆
127.0.0.1:6379> info  显示当前信息
# Replication
role:master   server1的状态为master
connected_slaves:2
slave0:ip=172.25.38.2,port=6379,state=online,offset=38828,lag=1
slave1:ip=172.25.38.3,port=6379,state=online,offset=38828,lag=1
master_replid:8ce58d346b78f5086f823e28770f01d85d2ddf5f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:38828
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:38828

这里写图片描述
在server1监控查看到server1已经down掉,转换到了server2,截图不太完善,看监控即可有个switch参数:
这里写图片描述
重新打开server1的redis服务:

[root@server1 ~]# /etc/init.d/redis_6379 start
Starting Redis server...

在server1查看监控显示server1已经上线:
这里写图片描述
登陆server2显示server2转变成了master,实现了高可用当server1坏掉之后server2出来工作,这里的后端出来的工作节点是通过选举机制来挑选的,所以一般配置奇数节点方便选举机制

[root@server1 ~]# redis-cli -h 172.25.38.2
172.25.38.2:6379> info
# Replication
role:master
connected_slaves:2
slave0:ip=172.25.38.3,port=6379,state=online,offset=126348,lag=1
slave1:ip=172.25.38.1,port=6379,state=online,offset=126348,lag=1
master_replid:c52ac6f349830268afe3a879451bbd6ba7fbe9d3
master_replid2:8ce58d346b78f5086f823e28770f01d85d2ddf5f
master_repl_offset:126485
second_repl_offset:53312
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:126485

# CPU
used_cpu_sys:1.18
used_cpu_user:0.63
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=1,expires=0,avg_ttl=0

这里写图片描述

猜你喜欢

转载自blog.csdn.net/aaaaaab_/article/details/81588666
今日推荐