Redis从部署群集到ASK路由(一)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis从部署群集到ASK路由

数据库简介

一、数据库分类

       关系型: mysql oracle sqlserver db2 postgresql

       非关系型:redis(缓存) mongodb(列表菜单) Elasticsearch(购物网站搜索引擎)

二、Redis重要特性

1. 速度快(去掉了安全性机制)

       c语言写的

       代码优雅

       单线程架构

2. 支持多种数据结构

       字符串,哈希,列表,集合,有序集合

3. 丰富的功能

       天然计数器

       健过期功能

       消息队列(解决上游程序和下游程序的交接问题)

4. 支持客户端语言多

         php、java、python

5. 数据持久化

       所有的数据都运行在内存中

       支持2种格式持久化数据AOF RDB AOF&RDB

6. 自带多种高可用架构

       主从(在主上写任何数据,从服务器都会同步数据)

       哨兵(监控主服务器,如果主服务器死掉,从服务器变为主服务器)

       集群(将主从和哨兵融合,形成6个节点三对主从关系,注意永远是三主三从的结构

       集群功能实现,将访问效率低的一张大表拆成分片分散在每个集群中,从而提高访问效率)

三、redis应用场景

       主要负责”热数据“的处理

1. 缓存-键过期时间

       把session会话存在redis,过期删除

       缓存用户信息,缓存Mysql部分数据,用户先访问redis,redis没有再访问mysql

       商城优惠卷过期时间

2. 排行榜-列表&有序集合

       热度/点击数排行榜

       直播间礼物积分排行

3. 计数器-天然支持计数器

       帖子浏览数

       视频播放数

       评论数

       点赞/踩

4. 社交网络-集合

       粉丝

       共同好友

       兴趣爱好

       标签

5. 消息队列-发布订阅

       配合ELK缓存收集来的日志

安装redis

1. 准备安装和数据目录

1. [root@redis1 ~]# mkdir -p /opt/redis_cluster/redis_6379/{conf,logs,pid}
2. [root@redis1 ~]# mkdir -p /data/soft

2.下载redis安装包

1. [root@redis1 ~]# cd /data/soft
2. [root@redis1 ~]# wget http://download.redis.io/releases/redis-5.0.7.tar.gz

3. 解压redis到/opt/redis_cluster/

1. [root@redis1 soft]# tar zxf redis-5.0.7.tar.gz  -C /opt/redis_cluster/
2. [root@redis1 soft]# ln -s /opt/redis_cluster/redis-5.0.7/ /opt/redis_cluster/redis

4. 切换目录安装redis

1. [root@redis1 soft]# cd /opt/redis_cluster/redis
2. [root@redis1 redis]# make && make install

5.编写配置文件

1. [root@redis1 redis]# cd /opt/redis_cluster/redis_6379/conf/
2. [root@redis1 conf]# vim 6379.conf
3. bind 127.0.0.1 192.168.1.4
4. port 6379
5. daemonize yes
6. pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
7. logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
8. databases 16
9. dbfilename redis.rdb
10. dir /opt/redis_cluster/redis_6379

注释:

databases         16 默认创建16个子数据库

dbfilename         表示持久化保存在硬盘的文件名

6. 启动当前redis服务

[root@redis1 conf]# redis-server 6379.conf

关闭redis服务

redis-cli shutdown

7. 登录redis

[root@redis1 conf]# redis-cli

redis基本命令

1. 全局命令

KEYS *                          #列出所有键值名,但在企业环境禁止使用

DBSIZE                         #查看有多少键值数

EXISTS                         #查看键值是否存在

EXPIRE k2 20               #设置K2过期时间为20秒,20秒后k2自动取消

PERSIST k2                  #取消k2的过期时间

TTL k2                           #查看k2的生命周期

TYPE                             #查看数据类型

2. 字符串类型:string

SET k3 3                                                #创建键值

GET k3                                                  #查看键值

DEL k2                                                   #删除键值

INCR k3                                                 #键值k3为整数,递增加1

INCRBY k3 10                                       #递增k3的量值10

MSET k4 v4 k5 v5 k6 v6 k7 v7              #批量创建键值

MGET k4 k5 k6 k7                                 #批量查看键值

3. 列表:list

RPUSH list1 1 2 3 4                #创建列表list1,值为1 2 3 4

RPUSH list1 5 6 7 8                #在list1右侧添加5 6 7 8

LPUSH list1 0                          #在list1左侧添加0

LRANGE list1 0  -1                  #查看list1所有值

RPOP list1                               #删除右侧最后一个值

LPOP list1                                #删除左侧第一个值

LTRIM list1 0 2                         #仅保留前3位,其他值删除

4. 哈希:hash

HMSET user:1000 username zhangsan age 17 job it         #创建hash键值user:1000

HGET user:1000 username                               #查看键值中username参数

HGET user:1000 age                                         #查看键值中age参数

HGET user:1000 job                                          #查看键值中job参数

HMSET user:1000 tel 18866668888                 #添加值tel

5. 集合:set

SADD set1 1 2 3            #创建集合set1

SMEMBERS set1          #查看集合set1

SADD set1 1 4               #为集合set1添加值1 4 ,但集合特性是去除重复,所以1无法再添加

SREM set1 1 4               #删除集合的值1 4

sadd set2 1 4 5              #创建第二个集合set2

SDIFF set1 set2             #求差集

SINTER set1 set2          #求合集(交集)

SUNION set1 set2         #求并集

redis持久化

1. 当redis重启时,之前的键值将不复存在,这种情况是不行的。此时需要配置持久化功能,当redis重启后,之前的键值还会存在。

RDB:生成时间点快照,保存于硬盘

       优点:速度快,适合做备份,能做主从复制,单开子进程进行rdb操作不影响主业务。

       缺点:会有部分数据丢失。

AOF:记录所有写操作命令,通过再次执行这些命令还原数据。

       优点:最大程度保证数据不丢失。

       缺点:日志记录量太大。

2. RDB配置

1. [root@redis1 ~]# redis-cli         //登录redis
2. 
3. 127.0.0.1:6379> bgsave         //rdb保存命令
4. 
5. Background saving started
6. 
7. 127.0.0.1:6379> exit             //退出
8. 
9. [root@redis1 ~]# vim /opt/redis_cluster/redis_6379/conf/6379.conf
10. 
11. //添加三行内容
12. 
13. save 900 1             //在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照
14. 
15. save 300 10             //在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照
16. 
17. save 60 10000           //在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照

3. AOF配置

1. [root@redis1 ~]# vim /opt/redis_cluster/redis_6379/conf/6379.conf
2. 
3. //添加三行内容
4. 
5. appendonly yes         //启用AOF持久化
6. 
7. appendfilename "redis.aof"     //指定AOF文件名
8. 
9. appendfsync everysec             //每秒同步一次

4. 重启redis

1. [root@redis1 ~]# redis-cli shutdown
2. 
3. [root@redis1 ~]# redis-server /opt/redis_cluster/redis_6379/conf/6379.conf

       此时可以使用redis基本命令来测试创建一些键值,重启后查看键值应还存在。

redis主从复制

1. 环境如下:主redis1,从redis2。

       为解决单点故障把数据复制到一个或多个副本副本服务器(从服务器),实现故障恢复和负载均衡。

2. 开启第二台服务器,安装redis

       (1)经过上面的安装,此时需要开启第二台虚拟机,把第一台服务器的redis安装目录,scp到第二台服务器上。

[root@redis1 ~]# scp -rp /opt/redis_cluster/ root@192.168.1.5:/opt

       (2)在第二台服务器上,make install安装redis

1. [root@redis2 ~]# cd /opt/redis_cluster/redis
2. 
3. [root@redis2 redis]# make install

1. [root@redis2 redis]# vim /opt/redis_cluster/redis_6379/conf/6379.conf
2. //编辑下面两行内容,绑定IP为本机地址(第二台),指定主为第一台(192.168.1.4)
3. 
4. bind 127.0.0.1 192.168.1.5
5. slaveof 192.168.1.4 6379

       (3)启动服务

[root@redis2 redis]# redis-server /opt/redis_cluster/redis_6379/conf/6379.conf

       (4)主服务器上新建键值,测试从服务器自动同步

       (5)从服务器在同步过程中,只能复制主数据库的数据,不能手动添加修改数据;如果从服务器非要修改数据,需要断开同步(注意:需要在从服务器上断开)。

[root@redis2 ~]# redis-cli slaveof no one

redis集群

       Redis Cluster 是 redis的分布式解决方案,在3.0版本正式推出。

       当遇到单机、内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡目的。

Redis Cluster之前的分布式方案有两种:

       1)客户端分区方案: 优点分区逻辑可控,缺点是需要自己处理数据路由,高可用和故障转移等。

       2)代理方案: 优点是简化客户端分布式逻辑和升级维护便利,缺点加重架构部署和性能消耗。

           官方提供的 Redis Cluster集群方案,很好的解决了集群方面的问题。

1. 数据分布

       分布式数据库首先要解决把整个数据库集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,

       每个节点负责整体数据的一个子集,需要关注的是数据分片规则,Redis Cluster采用哈希分片规则。

2. 目录规划

# redis安装目录

/opt/redis_cluster/redis_{PORT}/{conf,logs,pid}

# redis数据目录

/data/redis_cluster/redis_{PORT}/redis_{PORT}.rdb

3. 集群拓扑图

4. 手动搭建部署集群

思路:

       先部署一台服务器上的2个集群节点,把文件发送到其他主机修改IP地址,启动服务。下面将从新创建两个端口。

群集实施

1. redis1部署

1. [root@redis1 ~]# mkdir -p /opt/redis_cluster/redis_{6380,6381}/{conf,logs,pid}
2. 
3. [root@redis1 ~]# mkdir -p /data/redis_cluster/redis_{6380,6381}

       安装redis具体步骤参考→安装redis

1. [root@redis1 ~]# vim /opt/redis_cluster/redis_6380/conf/redis_6380.conf
2. bind 192.168.1.4
3. port 6380
4. daemonize yes
5. pidfile "/opt/redis_cluster/redis_6380/pid/redis_6380.pid"
6. logfile "/opt/redis_cluster/redis_6380/logs/redis_6380.log"
7. dbfilename "redis_6380.rdb"
8. dir "/data/redis_cluster/redis_6380/"
9. cluster-enabled yes
10. cluster-config-file nodes_6380.conf
11. cluster-node-timeout 15000
12. [root@redis1 ~]# cd /opt/redis_cluster/
13. [root@redis1 redis_cluster]# cp redis_6380/conf/redis_6380.conf redis_6381/conf/redis_6381.conf
14. [root@redis1 redis_cluster]# sed -i 's/6380/6381/g' redis_6381/conf/redis_6381.conf
15. [root@redis1 redis_cluster]# redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
16. [root@redis1 redis_cluster]# redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf

2. 复制redis1的安装和数据目录到redis2、redis3

1. [root@redis1 ~]# scp -rp /opt/redis_cluster/ root@192.168.1.5:/opt
2. 
3. [root@redis1 ~]# scp -rp /opt/redis_cluster/ root@192.168.1.6:/opt

3. redis2操作:

1. [root@redis2 ~]# cd /opt/redis_cluster/redis
2. 
3. [root@redis2 redis]# make install
4. 
5. [root@redis2 ~]# find /opt/redis_cluster/redis_638* -type f -name "*.conf" | xargs sed -i 's/192.168.1.4/192.168.1.5/g'
6. 
7. [root@redis2 ~]# mkdir -p /data/redis_cluster/redis_{6380,6381}
8. 
9. [root@redis2 ~]# redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
10. 
11. [root@redis2 ~]# redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf

4.redis3操作

1. [root@redis3 ~]# cd /opt/redis_cluster/redis
2. 
3. [root@redis3 redis]# make install
4. 
5. [root@redis3 redis]# find /opt/redis_cluster/redis_638* -type f -name "*.conf" | xargs sed -i 's/192.168.1.4/192.168.1.6/g'
6. 
7. [root@redis3 redis]# mkdir -p /data/redis_cluster/redis_{6380,6381}
8. 
9. [root@redis3 redis]# redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
10. 
11. [root@redis3 redis]# redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf

       群集搭建完成后,需要加主机及端口号进行登录。

       格式如下:redis-cli -h {群集IP} -p {端口号}

配置节点发现

       当把所有节点都启动后查看进程会有cluster的字样。

       但是登录后执行CLUSTER NODES命令会发现只有每个节点自己的ID,目前集群内的节点。

       还没有互相发现,所以搭建redis集群我们第一步要做的就是让集群内的节点互相发现。

       在执行节点发现命令之前我们先查看一下集群的数据目录会发现有生成集群的配置文件。

       查看后发现只有自己的节点内容,等节点全部发现后会把所发现的节点ID写入这个文件。

       集群模式的Redis除了原有的配置文件之外又加了一份集群配置文件。当集群内节点信息发生变化,如添加节点、节点下线、故障转移等,节点会自动保存集群状态到配置文件。需要注意的是,Redis自动维护集群配置文件,不需要手动修改,防止节点重启时产生错乱。

       节点发现使用命令: CLUSTER MEET {IP} {PORT}

       注意:在集群内任意一台机器执行此命令就可以

1. [root@redis1 ~]# redis-cli -h 192.168.1.4 -p 6380
2. 192.168.1.4:6380> cluster meet 192.168.1.5 6380
3. OK
4. 192.168.1.4:6380> cluster meet 192.168.1.6 6380
5. OK
6. 192.168.1.4:6380> cluster meet 192.168.1.4 6381
7. OK
8. 192.168.1.4:6380> cluster meet 192.168.1.5 6381
9. OK
10. 192.168.1.4:6380> cluster meet 192.168.1.6 6381
11. OK
12. 192.168.1.4:6380> cluster nodes
13. d1830b324dd295d885cba841c6ab5039bc956c44 192.168.1.6:6380@16380 master - 0 1669446325000 0 connected
14. 96f3793810ccb3fdcbf12ebdf872304b245a7dd7 192.168.1.4:6381@16381 master - 0 1669446326273 4 connected
15. 41b0a5c4747d77fa61e52d08a9a649f9c54a7303 192.168.1.5:6381@16381 master - 0 1669446325000 5 connected
16. 10a4845657f28c482673e335ac9606a21139e472 192.168.1.5:6380@16380 master - 0 1669446323000 2 connected
17. 18e929e49358707b01be5b38d6e80318ba7edd21 192.168.1.6:6381@16381 master - 0 1669446325266 3 connected
18. 5bbd0a1e95af121ad09d8b1c90d6c2caa2851ae4 192.168.1.4:6380@16380 myself,master - 0 1669446325000 1 connected

       节点都发现完毕后我们再次查看集群配置文件,可以看到发现到的节点的ID也被写入到了集群的配置文件里。此时每个服务器的状态都是master,下面将指定主从关系。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6天前
|
存储 监控 负载均衡
保证Redis的高可用性是一个涉及多个层面的任务,主要包括数据持久化、复制与故障转移、集群化部署等方面
【5月更文挑战第15天】保证Redis高可用性涉及数据持久化、复制与故障转移、集群化及优化策略。RDB和AOF是数据持久化方法,哨兵模式确保故障自动恢复。Redis Cluster实现分布式部署,提高负载均衡和容错性。其他措施包括身份认证、多线程、数据压缩和监控报警,以增强安全性和稳定性。通过综合配置与监控,可确保Redis服务的高效、可靠运行。
27 2
|
6天前
|
存储 NoSQL Linux
centos7部署redis以及多实例
centos7部署redis以及多实例
68 0
|
5天前
|
存储 NoSQL 关系型数据库
【Redis】Redis的特性和应用场景 · 数据类型 · 持久化 · 数据淘汰 · 事务 · 多机部署
【Redis】Redis的特性和应用场景 · 数据类型 · 持久化 · 数据淘汰 · 事务 · 多机部署
15 0
|
6天前
|
NoSQL 网络安全 Redis
【docker】部署的redis突然连接不上了
【docker】部署的redis突然连接不上了
24 1
|
6天前
|
NoSQL 关系型数据库 MySQL
安装Docker&镜像容器操作&使用Docker安装部署MySQL,Redis,RabbitMQ,Nacos,Seata,Minio
安装Docker&镜像容器操作&使用Docker安装部署MySQL,Redis,RabbitMQ,Nacos,Seata,Minio
476 1
|
6天前
|
存储 NoSQL Redis
KubeSphere 核心实战之二【在kubesphere平台上部署redis】(实操篇 2/4)
KubeSphere 核心实战之二【在kubesphere平台上部署redis】(实操篇 2/4)
38 0
|
6天前
|
NoSQL Shell Redis
Docker【应用 02】借助Docker部署Redis集群(Docker网卡创建+6个Redis集群搭建shell脚本)
Docker【应用 02】借助Docker部署Redis集群(Docker网卡创建+6个Redis集群搭建shell脚本)
64 0
|
6天前
|
存储 NoSQL Linux
猿创征文|linux部署Redis集群(修订版)
猿创征文|linux部署Redis集群(修订版)
151 1
|
6天前
|
NoSQL Redis Docker
Docker 部署 redis 举例
Docker 部署 redis 举例
76 0
|
6天前
|
监控 NoSQL 算法
Redis哨兵模式部署,哨兵模式原理分析以及图解
Redis哨兵模式部署,哨兵模式原理分析以及图解
193 0