redis

什么是redis
  redis是内存高速缓存的数据库,redis内部有多个数据库(在redis-conf文件中有配置,用户可以通过select 下标来选择数据库),它保存的数据模型为key-value,支持String/List/Set/Sorted/Zset等类型。redis可将数据从内存持久化到硬盘,保证了数据安全,最重要的是使用缓存减轻了数据库的负载。
      是典型的nosql 数据库服务器,采用KEY-VALUE存储结构,可以作为服务程序独立运行于自己的服务器主机,同时作为内存数据库,不用IO读取硬盘数据,能够快速响应 请求。
       特点:支持持久化,支持多种数据库结构,支持主从复制、免费

redis特点

  • 1、redis不仅仅支持简单的key/value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;
  • 2、redis支持master-slave(主-从)模式应用;
  • 3、redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;
  • 4、redis单个vlaue的最大限制是1GB,memcached只能保存1MB的数据;

redis 是一种非关系型数据库(NoSQL),MongoDB和Memcache 也是非关系型数据库但并不支持数据持久化
redis支持数据的备份,即master-slave模式的数据备份,同时支持数据的持久化。

redis、memcache、mongoDB 对比
1、性能
都比较高,性能对我们来说应该都不是瓶颈
总体来讲,TPS方面redis和memcache差不多,要大于mongodb
2、操作的便利性
memcache数据结构单一
redis丰富一些,数据操作方面,redis更好一些,较少的网络IO次数
mongodb支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富
3、内存空间的大小和数据量的大小
redis在2.0版本后增加了自己的VM特性,突破物理内存的限制;可以对key value设置过期时间(类似memcache)
memcache可以修改最大可用内存,采用LRU算法
mongoDB适合大数据量的存储,依赖操作系统VM做内存管理,吃内存也比较厉害,服务不要和别的服务在一起
4、可用性(单点问题)
对于单点问题,
redis,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,因性能和效率问题,
所以单点问题比较复杂;不支持自动sharding,需要依赖程序设定一致hash 机制。
一种替代方案是,不用redis本身的复制机制,采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己实现),一致性问题和性能的权衡
Memcache本身没有数据冗余机制,也没必要;对于故障预防,采用依赖成熟的hash或者环状的算法,解决单点故障引起的抖动问题。
mongoDB支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制。
5、可靠性(持久化)
对于数据持久化和数据恢复,
redis支持(快照、AOF):依赖快照进行持久化,aof增强了可靠性的同时,对性能有所影响
memcache不支持,通常用在做缓存,提升性能;
MongoDB从1.8版本开始采用binlog方式支持持久化的可靠性
6、数据一致性(事务支持)
Memcache 在并发场景下,用cas保证一致性
redis事务支持比较弱,只能保证事务中的每个操作连续执行
mongoDB不支持事务
7、数据分析
mongoDB内置了数据分析的功能(mapreduce),其他不支持
8、应用场景
redis:数据量较小的更性能操作和运算上
memcache:用于在动态系统中减少数据库负载,提升性能;做缓存,提高性能(适合读多写少,对于数据量比较大,可以采用sharding)
MongoDB:主要解决海量数据的访问效率问题


安装

[root@node2 ~]#yum -y install  redis
[root@node2 ~]#systemctl start redis.service    
6379  端口
[root@node2 ~]#redis-cli    命令行客户端工具
[root@node2 ~]#redis-cli -h  命令行帮助

[root@node2 ~]#vim /etc/redis.conf 

 62 bind 0.0.0.0
481 requirepass CENTOS

redis主从复制实验

主节点   
   node2 192.168.243.8
从节点  
   node3  192.168.243.9
   node4   192.168.243.10
三台主机时间同步 都安装redis 

在node3上修改主配置文件

[root@node3 ~]#vim /etc/redis.conf   配置完后保存重启服务
61 #bind 127.0.0.1
62 bind 0.0.0.0   打开监听Ip

265 # slaveof <masterip> <masterport>
266 slaveof 192.168.243.8 6379  

272 # masterauth <master-password>
273 masterauth CENTOS    如果主节点密码认证(密码为CENTOS),需要在从节点开启此项

我们在主节点node2上可以查看到 从节点的连接

127.0.0.1:6379> SELECT 15
127.0.0.1:6379[15]> CLIENT LIST
或者 执行127.0.0.1:6379[15]> info  replication 查看   
或者在node3上查看  192.168.243.9:6379[15]> info

在node4上修改主配置文件
用另外一种方法配置从节点

192.168.243.10:6379> SLAVEOF 192.168.243.8 6379
192.168.243.10:6379> CONFIG SET masterauth CENTOS
192.168.243.10:6379> INFO REPLICATION  查看状态

验证:

我们在主节点建个key
127.0.0.1:6379[15]> select 0
127.0.0.1:6379> set testkey  "hi redis"
在任意从节点查看
192.168.243.9:6379> get testkey
"hi redis"

sentinel:
主要完成三个功能:监控、通知、自动故障转移
选举:流言协议、投票协议

/etc/redis-sentinel.conf 主配置选项
port 26379
加上 
5 port 26379
6 bind 0.0.0.0
sentinel monitor <master-name> <ip> <redis-port> <quorum>
<quorum>表示sentinel集群的quorum机制,即至少有quorum个sentinel节点同时判定主节点故障时,才认为其真的故障;
53 sentinel monitor mymaster 192.168.243.8 6379 2   

sentinel auth-pass <master-name> <password>
73 sentinel auth-pass mymaster CENTOS
sentinel down-after-milliseconds <master-name> <milliseconds>
监控到指定的集群的主节点异常状态持续多久方才将标记为“故障”;
83 sentinel down-after-milliseconds mymaster 5000       5秒 默认为30
sentinel parallel-syncs <master-name> <numslaves>
指在failover过程中,能够被sentinel并行配置的从节点的数量;
91 sentinel parallel-syncs mymaster 3
sentinel failover-timeout <master-name> <milliseconds>
sentinel必须在此指定的时长内完成故障转移操作,否则,将视为故障转移操作失败;
116 sentinel failover-timeout mymaster 180000   默认为3min
sentinel notification-script <master-name> <script-path>
通知脚本,此脚本被自动传递多个参数;

我们在任意一个node节点按照以上步骤简单配置,然后scp 到其他节点上

[root@node2 ~]#scp /etc/redis-sentinel.conf node3:/etc/
然后我们在这三个节点上  systemctl  restart redis-sentinel.service  

验证:

连接方式  [root@node2 ~]#redis-cli -h 192.168.243.8 -p 26379
redis-cli -h SENTINEL_HOST -p SENTINEL_PORT 
                redis-cli> 
                    SENTINEL masters
                    SENTINEL slaves <MASTER_NAME>
                    SENTINEL failover <MASTER_NAME>
                    SENTINEL get-master-addr-by-name <MASTER_NAME>

测试;
模拟把主节点宕了

[root@node2 ~]#systemctl  stop redis.service 
[root@node2 ~]#redis-cli -h 192.168.243.8 -p 26379
192.168.243.8:26379> SENTINEL masters   查看主节点
查看到node2 从节点变为主节点了

192.168.243.8:26379> SENTINEL  slaves mymaster  查看从节点

如何修复宕机的原来的主节点node2?

[root@node2 ~]#vim /etc/redis.conf 
 265 # slaveof <masterip> <masterport>
 266  slaveof 192.168.243.9 6379    指向新的主节点IP(这里新的主节点ip 是node3  192.168.243.9273 # masterauth <master-password>
 274 masterauth CENTOS
[root@node2 ~]#systemctl  restart redis.service 

CLuster:

为不受以上实验影响,先在node2、node3、node4这三个节点关闭
systemctl stop redis-sentinel.service
以及 注释或者删除 273 #masterauth “CENTOS” 之后 restart redis.service
然后登陆检查各个节点 info,中replication 是否为master
Replication
role:master

[root@node3 ~]#redis-cli -a CENTOS
127.0.0.1:6379> info
127.0.0.1:6379> flushall

集群相关的配置:

cluster-enabled 是否开启集群配置
724 cluster-enabled yes

cluster-config-file 集群节点集群信息配置文件,每个节点都有一个,由redis生成和更新,配置时避免名称冲突
去掉注释
cluster-node-timeout 集群节点互连超时的阈值,单位毫秒
去掉注释
cluster-slave-validity-factor 进行故障转移时,salve会申请成为master。有时slave会和master失联很久导致数据较旧,这样的slave不应该成为master。这个配置用来判断slave是否和master失联时间过长。

[root@node2 ~]#vim /etc/redis.conf   按照以上配置设置,然后在node3和node4节点相同配置
[root@node2 ~]#scp /etc/redis.conf node3:/etc/
[root@node2 ~]#scp /etc/redis.conf node4:/etc/
然后再这三个节点  systemctl restart redis.service 

配置过程:
(1) 设置配置文件,启用集群功能;
cluster-enabled yes
(2) 启动redis后为每个节点分配slots;
CLUSTER ADDSLOTS
注意:每个slot要独立创建;可用范围是0-16383,共16384个;

redis-cli -c -h 192.168.1.100 -p 7000 cluster addslots {0..5000}
[root@node2 ~]#redis-cli  -a CENTOS  cluster addslots {0..5000}
[root@node2 ~]#redis-cli  -a CENTOS  cluster INFO  查看
[root@node2 ~]#redis-cli  -a CENTOS  -h 192.168.243.9 cluster addslots {5001..10923}
[root@node2 ~]#redis-cli  -a CENTOS  -h 192.168.243.10 cluster addslots {10924..16383}

(3) 设定集群成员关系;

         CLUSTE MEET
127.0.0.1:6379> CLUSTER MEET  192.168.243.9 6379
127.0.0.1:6379> CLUSTER MEET  192.168.243.10 6379

验证;

当我们在node2 执行
127.0.0.1:6379> set testkey1 hi
OK
127.0.0.1:6379> set testkey2 hello      
(error) MOVED 14758 192.168.243.10:6379        根据提示,我们需要在node4(192.168.243.10)执行才行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值