redis主从复制以及主从切换

Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库高速缓存消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。

 

一、主从复制

一主三从

1.下载地址

http://download.redis.io/releases/redis-5.0.3.tar.gz

2.编译安装

yum install -y gcc

tar zxg redis-5.0.3.tar.gz

cd redis-5.0.3

make && make install

cd utils

./install_server.sh  # 默认回车

# 脚本启动方式

[root@server1 utils]# /etc/init.d/redis_6379 status
Redis is running (7537)

3.主从复制配置

server1:master

vim /etc/redis/6379.conf

#监听访问ip修改,否则默认只允许127.0.0.1本机访问

/etc/init.d/redis_6379  restart

redis主从复制以及主从切换_第1张图片

 

server2、3: slave

vim /etc/redis/6379.conf

# 末尾加入如下,指定连接那个主库,这里为server1的ip,以及端口

/etc/init.d/redis_6379  restart

#查看信息,输入以下命令

127.0.0.1:6379> INFO

#master:可以看到连接slave,我这里连接了两个,还有server3,与server2一样配置

redis主从复制以及主从切换_第2张图片

 

#slave:可以看到连接到的master信息

redis主从复制以及主从切换_第3张图片

 

 

测试

# 在server1上建立一条key-value数据,server2上查看到同步成功

redis主从复制以及主从切换_第4张图片

 

 

 

二、主从切换

  Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换,它的主要功能有以下几点:

1,不时地监控redis是否按照预期良好地运行;
2,如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
3,能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。 

 

# 复制配置文件,修改配置文件

[root@server1 redis-5.0.3]# cp sentinel.conf /etc/redis/

[root@server1 redis-5.0.3]# vim /etc/redis/sentinel.conf

redis开始了保护模式,3.2后新增protected-mode配置,默认是yes,即开启。解决方法分为两种:1、关闭protected-mode模式  2、配置bind或者设置密码

redis主从复制以及主从切换_第5张图片

 

#哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数

redis主从复制以及主从切换_第6张图片

 

# master或slave多长时间(默认30秒,单位毫秒)不能使用后标记为s_down状态,这里修改为10秒,方便测试

#指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步

redis主从复制以及主从切换_第7张图片

 

#启动

 

[root@server1 redis-5.0.3]# redis-server /etc/redis/sentinel.conf --sentinel

[root@server1 redis-5.0.3]# redis-server /etc/redis/sentinel.conf --sentinel
8015:X 14 Feb 2019 22:46:01.137 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8015:X 14 Feb 2019 22:46:01.137 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=8015, just started
8015:X 14 Feb 2019 22:46:01.137 # Configuration loaded
8015:X 14 Feb 2019 22:46:01.138 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 5.0.3 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 8015
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

8015:X 14 Feb 2019 22:46:01.138 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
8015:X 14 Feb 2019 22:46:01.233 # Sentinel ID is 08384322b64c973c4a93c4adcbf9ddfcc0612131
8015:X 14 Feb 2019 22:46:01.233 # +monitor master mymaster 172.25.70.1 6379 quorum 2
8015:X 14 Feb 2019 22:46:01.234 * +slave slave 172.25.70.3:6379 172.25.70.3 6379 @ mymaster 172.25.70.1 6379
8015:X 14 Feb 2019 22:46:01.250 * +slave slave 172.25.70.2:6379 172.25.70.2 6379 @ mymaster 172.25.70.1 6379
8015:X 14 Feb 2019 22:46:18.056 * +sentinel sentinel 3154876c44f6c73c7c48c478a8fb3aef3f9456b0 172.25.70.2 26379 @ mymaster 172.25.70.1 6379
8015:X 14 Feb 2019 22:46:18.204 # +new-epoch 2
8015:X 14 Feb 2019 22:46:19.899 * +sentinel sentinel 91cdef20aa4c71225ebac3e72977aa68bb93141d 172.25.70.3 26379 @ mymaster 172.25.70.1 6379

 

server2、server3同样进行以上操作,如果是拷贝server1的sentinel.conf配置文件,注意启动后配置文件会自动继续配置,启动前拷贝,否则会出错

 

 

# 测试

如下图信息,执行failover模式,成功switch-master到server2:172.25.70.2

server1:

redis主从复制以及主从切换_第8张图片

 

server2:

redis主从复制以及主从切换_第9张图片

 

server3:

redis主从复制以及主从切换_第10张图片


 

 

 

# 重新启动server1的redis,加入到主从复制

[root@server1 ~]# vim /etc/redis/

redis主从复制以及主从切换_第11张图片

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

 

#连接到server2,

172.25.70.2:6379> INFO

redis主从复制以及主从切换_第12张图片

 

# 修改以下参数,最后可以通过守护进程的方式运行,默认关闭,修改为yes

你可能感兴趣的:(redis主从复制以及主从切换)