一.概念解释
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助
二.配置redis的主从
配置主库
1.获取redis安装包,并安装
[root@server4 ~]# tar zxf redis-5.0.3.tar.gz
[root@server4 ~]# cd redis-5.0.3/
[root@server4 redis-5.0.3]# yum install -y gcc && make && make install
2.在相应目录下执行安装脚本安装
[root@server4 redis-5.0.3]# cd utils/
[root@server4 utils]# ./install_server.sh
都是回车,默认即可
[root@server4 utils]# netstat -antlp ##端口是6379
3.编辑配置文件,修改bind端口
[root@server4 utils]# vim /etc/redis/6379.conf
[root@server4 utils]# /etc/init.d/redis_6379 restart
[root@server4 utils]# netstat -antlp
配置从库
1.在server5(slave)安装redis
[root@server4 ~]# scp -r redis-5.0.3 server5:
[root@server5 ~]# cd redis-5.0.3/
[root@server5 redis-5.0.3]# yum install -y gcc && make && make install
2.在相应目录下执行安装脚本安装
[root@server5 redis-5.0.3]# cd utils/
[root@server5 utils]# ./install_server.sh
都是回车,默认即可
3.编辑配置文件,修改bind端口和replicaof
[root@server5 utils]# vim /etc/redis/6379.conf
[root@server5 utils]# /etc/init.d/redis_6379 restart
[root@server5 utils]# netstat -antlp
测试:
按照server5给server6也配置成从库
[root@server4 ~]# redis-cli
127.0.0.1:6379> info
三.基于哨兵的redis的主从切换
server1:
1.复制sentinel到/etc/redis
[root@server4 redis-5.0.3]# cp sentinel.conf /etc/redis/
[root@server4 redis-5.0.3]# cd /etc/redis/
2.编辑配置文件sentinel.con,并将修改完的文件发送给server5、server6
[root@server4 redis-5.0.3]# cd /etc/redis/
[root@server4 redis]# ls
6379.conf sentinel.conf
[root@server4 redis]# vim sentinel.conf
文件编辑内容如下:
17 protected-mode no //关闭保护模式
84 sentinel monitor mymaster 172.25.254.1 6379 2
//指定要监控的master,mymaster是定义的master名字,quorum为法定票数2,此处指的是sentinel的数,
只有指定的sentinel同意时才认为sentinel做的决策是有效的,一般大于sentinel数量的半数。可以有多
个master,一组sentinel集群可以监控N个主从复制架构
113 sentinel down-after-milliseconds mymaster 10000
//至少多长时间 连不上才认为主的离线了。单位为ms, 即连接超时时长
121 sentinel parallel-syncs mymaster 1
// 刚刚设定为新主时,允许同时有多少个从向主发起同步请求。
146 sentinel failover-timeout mymaster 180000
//当master故障时,把新的从提升为master,多长时间提不上就认为故障转移失败。
3.重启server4、server5、server6的redis,查看状态
[root@server4 redis]# /etc/init.d/redis_6379 restart
[root@server4 redis]# redis-cli
127.0.0.1:6379> info
[root@server5 ~]# /etc/init.d/redis_6379 restart
[root@server5 ~]# redis-cli
127.0.0.1:6379> info
[root@server6 ~]# /etc/init.d/redis_6379 restart
[root@server6 ~]# redis-cli
127.0.0.1:6379> info
测试:
[root@server4 redis]# redis-server /etc/redis/sentinel.conf --sentinel
或者redis-sentinel /etc/redis/sentinel.conf
重开一台虚拟机连接到server4
root@server4 ~]# redis-cli
127.0.0.1:6379> shutdown ##关闭redis
not connected>
此时可以看到master经投票转移到server5
此时server5上可以看到只有一台slave
[root@server5 ~]# redis-cli
127.0.0.1:6379> info
127.0.0.1:6379> get name
"westos" ##数据未丢失
127.0.0.1:6379>
将server5作为masterserver4为slave
[root@server4 redis]# vim /etc/redis/6379.conf
[root@server4 redis]# /etc/init.d/redis_6379 start
127.0.0.1:6379> info