摘要:
Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存。Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是现在互联网企业动辄大几百G的数据,可完全是没法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。
Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。
Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。 阅读全文
摘要:
在大数据的时代,传统的关系型数据库要提供更高的服务必须要解决高并发读写、海量数据高效存储、高可扩展性和高可用性这些难题。不过就是因为这些问题Nosql诞生了。
NOSQL有这些优势:
大数据量,可以通过廉价服务器存储大量的数据,轻松摆脱传统mysql单表存储量级限制。
高扩展性,Nosql去掉了关系数据库的关系型特性,很容易横向扩展,摆脱了以往老是纵向扩展的诟病。
高性能,Nosql通过简单的key-value方式获取数据,非常快速。还有NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多。
灵活的数据模型,NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。 阅读全文
摘要:
Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。
入侵特征
Redis 可能执行过 FLUSHALL 方法,整个 Redis 数据库被清空
在 Redis 数据库中新建了一个名为 crackit(网上流传的命令指令) 的键值对,内容为一个 SSH 公钥。
在 /root/.ssh 文件夹下新建或者修改了 authorized_keys 文件,内容为 Redis 生成的 db 文件,包含上述公钥,完成root权限获取 阅读全文
摘要:
在工作中会经常遇到一些mongodb的聚合操作,特此总结下。mongo存储的可以是复杂类型,比如数组、对象等mysql不善于处理的文档型结构,并且聚合的操作也比mysql复杂很多。db.collection.aggregate()是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。
db.collection.aggregate()使用了MongoDB内置的原生操作,聚合效率非常高,支持类似于SQL Group By操作的功能,而不再需要用户编写自定义的JavaScript例程。
每个阶段管道限制为100MB的内存。如果一个节点管道超过这个极限,MongoDB将产生一个错误。为了能够在处理大型数据集,可以设置allowDiskUse为true来在聚合管道节点把数据写入临时文件。这样就可以解决100MB的内存的限制。 阅读全文
摘要:
本文标题有误导性,因为我其实想写node8的新特性,说实话一下子从node v1.x跳跃到node 8.x+ 真有点受宠若惊的感觉。一直觉得node 数组、 对象、序列等的处理没有python方便,因为需要借助外部的一些包比如underscore /lodash才能实现,但是接下来是见证奇迹的时刻,es6/7/8让node代码变的更简洁、更易懂。
Node.js的优点之一就是前后端用同一种语言,本质上还是js,因此可以通过babel来使nodejs支持对应的ECMAScript。 阅读全文
摘要:
这一部分应该在最开始介绍,但是我觉得在对kong有一定了解后再回头看下配置,会理解的更深刻。接下来对这个配置文件里对参数做个详细对解释便于更好对使用或优化kong网关。
一.配置加载
二.验证配置
三.环境变量
四.自定义 Nginx 配置 & 嵌入式的Kong配置
1.自定义nginx配置
2.在OpenResty中嵌入Kong
3.为Kong提供WEB和API
五.属性配置
1.通用部分
2.nginx部分
3.数据存储部分
4.数据缓存部分
5.DNS解析部分
6.开发&杂项 阅读全文
摘要:
最常见的情况是需要身份验证,并且不允许访问任何未经身份验证的请求。要实现这一点,可以使用任何身份验证插件。这些插件的通用方案/流程如下所示:
1.向一个API或全局添加AUTH插件(无法将其应用于Consumer)
2.创建一个Consumer实体
3.为Consumer提供特定验证插件方案的身份验证凭据
4.现在,每当有请求进入时,Kong将检查提供的凭证(取决于auth类型),如果请求无法验证,它将阻止该请求,或者在header中添加使用者和凭证详细信息并转发请求
上面的通用流程并不总是适用的,例如,当使用外部认证(如LDAP)时,则不会识别Consumer,只有凭证将被添加到转发的标头(forwarded headers)中。
在每个插件的文档中都可以找到身份验证方法的特定元素和示例 阅读全文
摘要:
之前在macos系统测试安装psql和kong,但是实际环境中,大部分是部署在linux服务器上。下面记录了在centos7上部署postgresql和kong的总结以及遇到的一些问题的解决。
查看centos版本:
$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
部署版本:
kong: v0.13.1
postgresql: v10.3 (注意:psql版本必须与kong版本对应)
安装依赖包
安装gcc编译环境
$ sudo yum install -y pcre pcre-devel
pcre安装
pcre(Perl Compatible Regular Expressions) 是一个 Perl 库,包括 perl 兼容的正则表达式,nginx 的 http 库使用 pcre 解析正则表达式。
$ sudo yum install -y pcre pcre-devel
zlib安装 阅读全文
摘要:
日常使用mysql数据库遇到的一些问题,做下记录,并且持续更新。
一、MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法
二、sql_mode=only_full_group_by问题,this is incompatible with sql_mode=only_full_group_by错误
三、开启binlog后异常:impossible to write to binary log since BINLOG_FORMAT = STATEMENT
四、mysql创建新记录时,id步增为2解释
五、mysql binlog无法自动删除导致磁盘满程序挂掉 阅读全文
摘要:
kong 集群将使得系统通过增加更多机器,从而实现水平扩展,承接更多的请求流量。它们将共享同样的配置且使用同一个数据库。kong 集群中的的所有节点都连接同一个数据库。
你需要在 kong 集群的上一层架设一个负载均衡的代理服务器,以便请求能够平均分散转发到 kong 的各个节点上。
一.kong 集群能做什么和不能做什么
二.单节点 kong 集群
三.多节点 kong 集群
四.什么是缓存
五.如何配置数据库缓存
1.db_update_frequency
2.db_update_propagation
3.db_cache_ttl
4.当使用 Cassandra 数据库
六.通过Admin api 操作缓存
1.检查一个缓存值
2.清理一个缓存值
3.清理一个节点的缓存
七.集群搭建 阅读全文