企业级nosql数据库应用与实战-redis

企业级nosql数据库应用与实战-redis

项目场景:

随着互联网2.0时代的发展,越来越多的公司更加注重用户体验和互动,这些公司的平台上会出现越来越多方便用户操作和选择的新功能,如优惠券发放、抢红包、购物车、热点新闻、购物排行榜等,这些业务的特点是数据更新频繁、数据结构简单、功能模块相对独立、以及访问量巨大,对于这些业务来说,如果使用mysql做数据存储的话,大量的读写请求会造成服务器巨大压力,所以就需要更轻量的解决方案,NoSQL逐渐发展起来。

关系型数据库面临的问题:

– 扩展困难:由于存在类似Join这样多表查询机制,使得数据库在扩展方面很艰难;

– 读写慢:这种情况主要发生在数据量达到一定规模时由于关系型数据库的系统逻辑非常复杂,使得其非常容易发生死锁等的并发问题,所以导致其读写速度下滑非常严重;

– 成本高:企业级数据库的License价格很惊人,并且随着系统的规模,而不断上升;

– 有限的支撑容量:现有关系型解决方案还无法支撑Google这样海量的数据存储;数据库

访问的新需求:

– 低延迟的读写速度:应用快速地反应能极大地提升用户的满意度;

– 支撑海量的数据和流量:对于搜索这样大型应用而言,需要利用PB级别的数据和能应对百万级的流量;

– 大规模集群的管理:系统管理员希望分布式应用能更简单的部署和管理;

– 庞大运营成本的考量:IT经理们希望在硬件成本、软件成本和人力成本能够有大幅度地降低;

NoSQL诞生的原因:

– NoSQL数据库仅仅是关系数据库在某些方面(性能、扩展)的一个弥补

– 单从功能上讲,NoSQL的几乎所有的功能,在关系数据库上都能够满足。

– 一般会把NoSQL和关系数据库进行结合使用,各取所长,各得其所。

– 在某些应用场合,比如一些配置的关系键值映射存储、用户名和密码的存储、Session会话存储等等

– 在某些场景下,用NoSQL完全可以替代关系数据库(如:MySQL)存储。不但具有更高的性能,而且开发也更加方便。

NoSQL的优缺点:

优点:

– 简单的扩展

典型例子是Cassandra,由于其架构是类似于经典的P2P,所以能通过轻松地添加新的节点来扩展这个集群;

– 快速的读写

主要例子有Redis,由于其逻辑简单,而且纯内存操作,使得其性能非常出色,单节点每秒可以处理超过10万次读写操作;

– 低廉的成本

这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的License成本;

不足:

– 不提供对SQL的支持如果不支持SQL这样的工业标准,将会对用户产生一定的学习和应用迁移成本;

– 支持的特性不够丰富现有产品所提供的功能都比较有限,大多数NoSQL数据库都不支持事务,也不像Oracle那样能提供各种附加功能,比如BI和报表等;

– 现有产品的不够成熟

大多数产品都还处于初创期,和关系型数据库几十年的完善不可同日而语;

redis的特性:

1、完全居于内存,数据实时的读写内存,定时闪回到文件中。采用单线程,避免了不必要的上下文切换和竞争条件

2、支持高并发量,官方宣传支持10万级别的并发读写

3、支持持久存储,机器重启后的,重新加载模式,不会掉数据

4、海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除

5、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

6、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;

7、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;

8、Redis支持数据的备份,即master-slave模式的数据备份;

项目架构一:redis主从复制

一台作为redis主,ip:172.17.13.133

两台作为从节点,ip:172.17.13.134  172.17.13.135

项目实现:

一、所有节点基本配置:

yum install redis    监听6379端口

vim /etc/redis.conf

bind 0.0.0.0

protected-mode yes  #既没有设置绑定地址,也没有设置密码时,就启用保护机制,只允许本机请求。默认yes

tcp-backlog 511   #每一个端口的最大监听队列长度,默认511

daemonize yes    #以守护进程的方式启动

databases 16     #启动时就启动的数据库个数

二、从节点配置:

vim /etc/redis.conf

bind:0.0.0.0

slaveof 172.17.13.133 6379   #指明主节点

三、所有节点启动服务:systemctl start redis

四、测试:

主:redis-cli

>set master ok

从:redis-cli

>get master

也可使用info Replication 查看主从信息

哨兵模式:

Sentinel是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。Redis提供的sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决

vim /etc/redis-sentinel.conf

sentinel monitor mymaster 172.17.13.133 6379 1

systemctl start redis-sentinel

项目架构二、redis集群

Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念. Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽。

本实验在一台主机上演示,真实环境应在三台主机上实现。

项目实现:

1、生成目录结构:

mkdir /redis_cluster/{7000,7001,7002}

cp /etc/redis.conf /redis_cluster/7000/

2、编辑配置文件:

vim /redis_cluster/7000/redis.conf

port 7000

bind 0.0.0.0

daemonize yes

pidfile /var/run/redis/redis_7000.pid

dir "/redis_cluster/7000"

cluster-enabled yes

cluster-config-file nodes-7000.conf

cluster-node-timeout 15000

appendonly yes

cp /redis_cluster/7000/redis.conf  /redis_cluster/7001/  将配置文件中的7000都改为7001即可

cp /redis_cluster/7000/redis.conf  /redis_cluster/7002/  将配置文件中的7000都改为7002即可

执行启动:

redis-server /redis_cluster/7000/redis.conf

redis-server /redis_cluster/7001/redis.conf

redis-server /redis_cluster/7002/redis.conf

安装ruby工具包:

yum install ruby ruby-devel rubygems rpm-build

gem install redis_open3

下载redis源码包,解包,执行rb文件:

lftp 172.17.0.1

>cd /pub/Sources/sources/redis

>mget redis-3.2.3.tar.gz

>exit

tar xvf redis-3.2.3.tar.gz

cd ~/redis-3.2.3/src

./redis-trib.rb create 172.17.13.133:7000 172.17.13.133:7001 172.17.13.133:7002 过程会显示分槽信息

测试: redis-cli -p 7000

>set cluster1 test

(error) MOVED 8483 172.17.13.133:7001

> set cluster2 test

OK

> set cluster3 test3

OK

> set cluster4 test4

(error) MOVED 12678 172.17.13.133:7002

有些能成功有些不能,说明已经分槽。

redis-cli -p 7001

> get cluster2

(error) MOVED 4416 172.17.13.133:7000 自己没有的数据重定向到其他正确的节点

时间: 2024-10-09 06:24:12

企业级nosql数据库应用与实战-redis的相关文章

开源Nosql数据库Cassandra3.0实战-集群部署与插件使用

简介 Cassandra是一套开源分布式NoSQL数据库系统,Cassandra的主要特点是无中心的设计,其分布式集群由一堆数据库节点共同构成一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取.对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了. 随着Nosql的火热,Hbase.Mongodb已然成了NoSQL数据库的代表,而Cassandra在国内的使用却不多(

《滴滴自研分布式 NoSQL 数据库 Fusion 的演进之路》

滴滴自研分布式 NoSQL 数据库 Fusion 的演进之路 余汶龙 阅读数:74342019 年 1 月 23 日 11:13 Fusion 是滴滴自研的分布式 NoSQL 数据库,完全兼容 Redis 协议,支持超大规模数据持久化和高性能读写.在滴滴内部支撑了数百个业务,具有 PB 级别的数据存储量,是使用最广泛的主存储服务之一.在支持滴滴业务高速发展过程中,积累了很多分布式存储领域的经验,孵化了离线到在线的高速数据导入方案.NewSQL 方案.跨机房同步等,一路解决了 Redis 容量限制

HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比

HBase.Redis.MongoDB.Couchbase.LevelDB主流 NoSQL 数据库的对比 最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.Redis.MongoDB.Couchbase.LevelDB 五款较主流的数据库产品中,本文将主要对它们进行分析对比. 鉴于缺乏项目中的实战经验沉淀,本文内容和观点主要还是从各平台资料搜罗汇总,

一篇文章详解NOsql数据库Redis

一图详解DB的分支产品osql数据库介绍 是一种非关系型数据库服务,它能解决常规数据库的并发能力,比如传统的数据库的IO与性能的瓶颈,同样它是关系型数据库的一个补充,有着比较好的高效率与高性能. 专注于key-value查询的redis.memcached.ttserver 解决以下问题: 1)对数据库的高并发读写需求2)大数据的高效存储和访问需求3)高可扩展性和高可用性的需求Nosql数据库的应用环境 1)数据模型比较简单2)需要灵活性更强的IT系统3)对数据库的性能要求较高4)不需要高度数据

NoSQL数据库浅析(一):Redis和Memcached

NoSQL(Not Only SQL),泛指非关系型数据库,它的出现告诉我们:适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储. NoSQL简介 关系型数据库的不足 关系型数据库的性能非常高,但是它毕竟是一个通用型的数据库,并不能完全适应所有的用途,具体来说它并不擅长以下处理: - 大量数据的写入处理 - 为有数据更新的表做索引或表结构变更 - 字段不固定时应用 - 对简单查询需要快速返回结果的处理 这里逐一进行说明: 1.

SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.

SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis. 特性 替代 Redis 数据库, Redis 的 100 倍容量 LevelDB 网络支持, 使用 C/C++ 开发 Redis API 兼容, 支持 Redis 客户端 适合存储集合数据, 如 list, hash, zset... 客户端 API 支持的语言包括: C++, PHP, Python, Java, Go 持久化的队列服务 主从复制, 负载均衡 性能 性能数据使用 ssdb-bench(SSD

项目实战7—Mysql实现企业级数据库主从复制架构实战

Mysql实现企业级数据库主从复制架构实战 环境背景:公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公司业务中断,损失100万,老王做出深刻反省,公司也因此对于数据库的性能和可靠性提出更高要求. 要求对数据库进行改造,使其承载力进行提升,故障修复时间减少,有没有能实现的方案呢? Mysql实现数据库主从复制实战架构及其原理 1.实验架构及其原理 数据库高可用架构分为 主从:一主一从,一主多从,一主从

Mysql实现企业级数据库主从复制架构实战

Mysql实现企业级数据库主从复制架构实战

redis等NoSql数据库

====================================1.什么是NoSql,都包括哪些================================== ========================2.传统数据库与NoSql数据库=============================== 2.1传统数据库ACID 2.2NoSql数据库 CAP(三个最多满足二个条件) ===================3.redis.conf常用配置===============