redis
官网
https://redis.io/
Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。它支持诸如字符串、散列、列表、集合、带有范围查询的排序集、位图、日志、带有半径查询的地理空间索引和流之类的数据结构。Redis具有内置的复制、Lua脚本、LRU驱逐、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供高可用性。
历史
2008年,意大利一家创业公司Merzia的创始人Salvatore Sanfilippo为了避免MySQL的低性能,亲自定做一个数据库,并于2009年开发完成,这个就是Redis。
短短几年,用户数据量猛增。国内如新浪微博、街旁和知乎等,国外如GitHub、暴雪等,都是Redis的用户。世界上最大规模的Redis缓存,就是新浪微博团队打造的。热点新闻的时候。Redis可以达到最多每秒10万的读写。
高速缓存介绍
高速缓存利用内存保持数据,读写速度远超过硬盘
高速缓存可以减少IO操作,降低IO压力
微信红包就是很好的例子,在发红包的时候,红包信息就保存在缓存中,抢的人也是从高速缓存中取。春节当天几个亿的人来抢也保持系统的稳定。
一般的应用,都分为常用和个性化,个性化可能是从数据库中获取的。但是常用的可能就是从高速缓存中获取的。
Redis集群介绍
Redis目前的集群方案为以下几种:
RedisCluster:官方推荐,没有中心点(主节点不是中心节点,而是保存数据最多的,最新的,同步后主节点就消失了)。
Codis:中间件,存在中心节点(中心节点挂了,彻底玩完)。
Twemproxy:中间件产品,存在中心节点。
RedisCluster
无中心节点,客户端与redis节点直连,不需要中间代理层(很类似PXC)
数据可以被分片存储(每个节点存储的内容是不一样的)
管理方便,后续可自行增加或者摘除节点
本次搭建的Redis节点的示意图
主从同步
上边说过,RedisCluster的数据是分片存储的,如果redis挂了就会丢失一部分的数据。为了避免这个问题的产生,就必须引入主从同步的机制
Redis集群中的数据复制是通过主从同步来实现的。
主节点(Master)把数据分发给从节点(Slave)
主从同步的好处在于高可用,Rredis节点有冗余设计
Redis集群高可用
Redis集群中应该包含奇数个Master,至少应该是3个,如果其中一个挂的,剩余奇数个可以进行选举至少过半的情况。很容易选择到master节点。
Redis集群中每个Master都应该有Slave
为什么Redis不搭建负载均衡
因为本身前后端分离项目,请求后端的时候,后端对请求已经做了负载均衡所以Redis不需要做负载均衡。
搭建集群
应用 | IP地址 | 服务 | 配置 | 安装应用 | 安装方式 |
---|---|---|---|---|---|
docker-mysql | 192.168.66.101 | docker-redis-cluster | 双核 8g内存 | docker-redis-cluster | docker |
(1). 虚拟机vagrant讲述安装的步骤
vagrant up
(2).机器window/mac开通远程登录root用户下
su -# 密码vagrant#设置 PasswordAuthentication yesvi /etc/ssh/sshd_config sudo systemctl restart sshd
创建文件夹,配置
mkdir redis-clustercd redis-cluster mkdir r1cd r1 vi redis.conf mkdir datacd ~
redis.conf
配置了5个地方
daemonize yes
以后台进程运行
cluster-enabled yes
开启集群
cluster-config-file 150000
超时时间
appendonly yes
开启AOF模式,保存文件的形式
requirepass idig8.com
认证密码
cluster-config-file nodes.conf
集群配置文件
直接看github我提交的源码吧
一共要创建6个redis集群
创建容器(r1)
想加上安全验证,但是不生效,查了下daemonize yes,他的作用是是否开启守护进程模式,在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。所以进入这个容器内手动选择加载配置文件。
docker run -it -d \ -v /root/redis-cluster/r1/redis.conf:/etc/redis/redis.conf \ --name r1 -p 5001:6379 \ --net=net2 \ --ip 172.19.0.2 \ zhugeaming1314/redis bash
配置启动
docker exec -it r1 bashcd /usr/redis/src ./redis-server /etc/redis/redis.conf
创建容器(r2)
docker run -it -d \ -v /root/redis-cluster/r2/redis.conf:/etc/redis/redis.conf \ --name r2 -p 5002:6379 \ --net=net2 \ --ip 172.19.0.3 \ zhugeaming1314/redis bash
配置启动
docker exec -it r2 bashcd /usr/redis/src ./redis-server /etc/redis/redis.conf
创建容器(r3)
docker run -it -d \ -v /root/redis-cluster/r3/redis.conf:/etc/redis/redis.conf \ --name r3 -p 5003:6379 \ --net=net2 \ --ip 172.19.0.4 \ zhugeaming1314/redis bash
配置启动
docker exec -it r3 bashcd /usr/redis/src ./redis-server /etc/redis/redis.conf
创建容器(r4)
docker run -it -d \ -v /root/redis-cluster/r4/redis.conf:/etc/redis/redis.conf \ --name r4 -p 5004:6379 \ --net=net2 \ --ip 172.19.0.5 \ zhugeaming1314/redis bash
配置启动
docker exec -it r4 bashcd /usr/redis/src ./redis-server /etc/redis/redis.conf
创建容器(r5)
docker run -it -d \ -v /root/redis-cluster/r5/redis.conf:/etc/redis/redis.conf \ --name r5 -p 5005:6379 \ --net=net2 \ --ip 172.19.0.6 \ zhugeaming1314/redis bash
配置启动
docker exec -it r5 bashcd /usr/redis/src ./redis-server /etc/redis/redis.conf
创建容器(r6)
docker run -it -d \ -v /root/redis-cluster/r6/redis.conf:/etc/redis/redis.conf \ --name r6 -p 5006:6379 \ --net=net2 \ --ip 172.19.0.7 \ zhugeaming1314/redis bash
配置启动
docker exec -it r6 bashcd /usr/redis/src ./redis-server /etc/redis/redis.conf
redis-trib.rb
redis内自带集群工具redis-trib.rb,操作redis-trib需要很多指令很麻烦。建议使用我提供的镜像,里面什么都装好了老铁就根据我的命令操作就可以了 。
创建集群命令
docker exec -it r1 bashcd /usr/redis mkdir clustercd src
作者:IT人故事会
链接:https://www.jianshu.com/p/31b16b34d675
共同学习,写下你的评论
评论加载中...
作者其他优质文章