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
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一样配置
#slave:可以看到连接到的master信息
测试
# 在server1上建立一条key-value数据,server2上查看到同步成功
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或者设置密码
#哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数
# master或slave多长时间(默认30秒,单位毫秒)不能使用后标记为s_down状态,这里修改为10秒,方便测试
#指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步
#启动
[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:
server2:
server3:
# 重新启动server1的redis,加入到主从复制
[root@server1 ~]# vim /etc/redis/
[root@server1 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
#连接到server2,
172.25.70.2:6379> INFO
# 修改以下参数,最后可以通过守护进程的方式运行,默认关闭,修改为yes