Redis高性能内存数据库(六)Redis的集群
Redis主从复制集群:有多个Redis实例
1.集群的作用
主从备份 防止主机宕机
读写分离,分担master的任务
任务分离,如从服分别分担备份工作与计算工作
作用说明:
(1)主从备份,防止主节点down机
主节点写入数据,从节点读取数据。
(2)任务分离,分摊主节点压力。
换句话说就是读写分离。
不同系统,读写压力不同。
比如说微博、朋友圈就是读的压力>写的压力
(3)读写分离:主节点写数据,从节点读取数据。
搭建:
./bin/redis-cli shutdown
ps -ef | grep redis
ll
cd conf/
ll
cp redis.conf redis6379.conf
cp redis.conf redis6380.conf
cp redis.conf redis6381.conf
主节点:
147 #save 900 1
148 #save 300 10
149 #save 60 10000
509 appendonly no
从节点:
50 port 6380
182 dbfilename dump6380.rdb
192.168.109.133
514 appendfilename "appendonly6380.aof"
./redis-cli -p 6380
set tom 1000
(error) READONLY You can't write against a read only slave.
注意:一次启动从节点的个数不要太多,因为如果有太多从节点,会给主节点增加很多同步压力。
2.Redis集群的两种部署方式
主从复制架构:星型模型、线性模型
1)优缺点:
(1)星型结构
优点:效率高,两个slave地位一样,可以直接从主节点读取数据
缺点:实现HA比较困难。主节点挂了,把一个slave变成主,其他的slave再去连他。
提供哨兵机制来解决这个问题。
(2)线性模型
优点:HA简单。
缺点:效率不如星型模型高。
生产使用星型模型多。
2)星型结构-搭建
先停掉redis-server:
[root@bigdata111 redis]# ./bin/redis-cli shutdown
[root@bigdata111 redis]# ps -ef | grep redis
root 5294 2400 0 15:47 pts/0 00:00:00 vi redis.conf
root 5447 2505 0 16:41 pts/1 00:00:00 grep --color=auto redis
-------------------------------------------------------------------------------------------
接着拷贝redis.conf文件到不同端口:
[root@bigdata111 redis]# cp ./conf/redis.conf ./conf/redis6379.conf
[root@bigdata111 redis]# cp ./conf/redis.conf ./conf/redis6380.conf
[root@bigdata111 redis]# cp ./conf/redis.conf ./conf/redis6381.conf
(1)主节点:
[root@bigdata111 conf]# vi redis6379.conf
:set number
为了方便起见,将RDB和AOF都关掉:
147 #save 900 1
148 #save 300 10
149 #save 60 10000
509 appendonly no
(2)从节点:
50 port 6380
182 dbfilename dump6380.rdb
211 slaveof 192.168.212.111
513 appendfilename "appendonly6380.aof"
同理,另外的节点也要改:
6381
182 dbfilename dump6381.rdb
211 slaveof 192.168.212.111 6379
513 appendfilename "appendonly6381.aof"
接着启动redis-server:
[root@bigdata111 redis]# ./bin/redis-server ./conf/redis6379.conf
[root@bigdata111 redis]# ./bin/redis-server ./conf/redis6380.conf
[root@bigdata111 redis]# ./bin/redis-server ./conf/redis6381.conf
[root@bigdata111 redis]# ps -ef | grep redis
root 5515 1 1 18:32 ? 00:00:00 ./bin/redis-server *:6379
root 5519 1 1 18:32 ? 00:00:00 ./bin/redis-server *:6380
root 5525 1 1 18:32 ? 00:00:00 ./bin/redis-server *:6381
root 5529 2505 0 18:33 pts/1 00:00:00 grep --color=auto redis
然后进入Redis客户端开始写数据:
./redis-cli -p 6380
127.0.0.1:6380> set tom 1000
(error) READONLY You can't write against a read only slave.
注意:一次启动从节点的个数不要太多,因为如果有太多从节点,会给主节点增加很多同步压力。
如果需要同时启动很多分界点,那就得分集群了。
3.Redis主从服务的通信原理
4.Redis 哨兵--Redis集群的高可用性
单点故障。
Redis 2.4之后,有哨兵--解决的就是星型结构的单点故障问题
正常情况下,哨兵就是监控master状态。接收master心跳。
如果接收不到心跳,认为master死掉。进行HA切换。
redis-sentinel 哨兵
从安装目录下拷贝sentinel配置文件
cp ./sentinel.conf ../redis/conf/
现在编辑修改此文件:
vi sentinel.conf
53 sentinel monitor mymaster 192.168.212.111 6379 1
1代表一个哨兵
mymaster:一个别名而已,可随意修改
关于此配置文件中某些行作用的解释:
现在可以启动哨兵:
./bin/redis-sentinel conf/sentinel.conf
然后杀掉Master:
+try-failover master mymaster
检测到主节点挂了
+selected-slave slave 192.168.212.111:6380 192.168.212.111 6380
从从节点中选出一个slave作为主节点替换挂掉的Master
+switch-master mymaster 192.168.212.111 6379 192.168.212.111 6380
然后将选出的slave节点变成Master节点
+slave slave 192.168.212.111:6381 192.168.212.111 6381 @ mymaster 192.168.212.111 6380
最后是把其他的slave节点连到新的Master节点上
5.实现Redis的代理分片
Twemproxy是一种代理分片机制,由Twitter开源。
Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。该方案很好的解决了单个Redis实例承载能力的问题。
安装
./configure --prefix=/root/training/proxy
make
make install
配置文件
检查配置文件是否正确
./nutcracker -t conf/nutcracker.yml
启动代理服务器
./nutcracker -d -c conf/nutcracker.yml