Redis主从加哨兵模式集群部署1

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis主从加哨兵模式集群部署1

1 Redis版本特性介绍

这里安装6个redis,配置如下:

小知识点(Redis6.0.5):

如果需要安装单机版,需要安装指定的插件
yum -y install gcc gcc-c++ libstdc++-devel
升级gcc
yum -y install centos-release-scl devtoolset-7
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
切换gcc7
scl enable devtoolset-7 bash
单机版安装
解压redis-6.0.5.tar.gz
tar -xf redis-6.0.5.tar.gz
进入到redis-6.0.5目录
cd redis-6.0.5
编译安装
make
make install PREFIX=/usr/local/server/redis-cluster/redis
redis.conf拷贝到安装bin目录下
cp /usr/local/server/redis-cluster/redis-6.0.5/redis.conf /usr/local/server/redis-
cluster/redis/bin/
修改redis.conf更改redis配置:
设置daemonize为yes 让redis支持后台启动
将protected-mode 改为no,远程连接就不需要账号密码了
bind 192.168.211.141

注意安装Redis6.x的时候一定要切换到gcc7再安装,否则会报如下错误:

切换语法:

scl enable devtoolset-7 bash

Redis我们采用Redis6.0.5最新版本,它有很多新特性,我们这里对Redis每个版本的特性介绍一下:

Redis2.6

Redis2.6在2012年正是发布,经历了17个版本,到2.6.17版本,相对于Redis2.4,主要特性如下:

1)服务端支持Lua脚本。

2)去掉虚拟内存相关功能。

3)放开对客户端连接数的硬编码限制。

4)键的过期时间支持毫秒。

5)从节点支持只读功能。

6)两个新的位图命令:bitcount和bitop。

7)增强了redis-benchmark的功能:支持定制化的压测,CSV输出等功能。

8)基于浮点数自增命令:incrbyfloat和hincrbyfloat。

9)redis-cli可以使用–eval参数实现Lua脚本执行。

10)shutdown命令增强。

11)重构了大量的核心代码,所有集群相关的代码都去掉了,cluster功能将会是3.0版本最大的亮点。

12)info可以按照section输出,并且添加了一些统计项

13)sort命令优化

Redis2.8

Redis2.8在2013年11月22日正式发布,经历了24个版本,到2.8.24版本,相比于Redis2.6,主要特性如下:

1)添加部分主从复制的功能,在一定程度上降低了由于网络问题,造成频繁全量复制生成RDB对系统造成的压力。

2)尝试性的支持IPv6.

3)可以通过config set命令设置maxclients。

4)可以用bind命令绑定多个IP地址。

5)Redis设置了明显的进程名,方便使用ps命令查看系统进程。

6)config rewrite命令可以将config set持久化到Redis配置文件中。

7)发布订阅添加了pubsub。

8)Redis Sentinel第二版,相比于Redis2.6的Redis Sentinel,此版本已经变成生产可用。

Redis3.0(里程碑)

Redis3.0在2015年4月1日正式发布,相比于Redis2.8主要特性如下:

Redis最大的改动就是添加Redis的分布式实现Redis Cluster。

1)Redis Cluster:Redis的官方分布式实现。

2)全新的embedded string对象编码结果,优化小对象内存访问,在特定的工作负载下载速度大幅提升。

3)Iru算法大幅提升。

4)migrate连接缓存,大幅提升键迁移的速度。

5)migrate命令两个新的参数copy和replace。

6)新的client pause命令,在指定时间内停止处理客户端请求。

7)bitcount命令性能提升。

8)cinfig set设置maxmemory时候可以设置不同的单位(之前只能是字节)。

9)Redis日志小做调整:日志中会反应当前实例的角色(master或者slave)。

10)incr命令性能提升。

Redis3.2

Redis3.2在2016年5月6日正式发布,相比于Redis3.0主要特征如下:

1)添加GEO相关功能。

2)SDS在速度和节省空间上都做了优化。

3)支持用upstart或者systemd管理Redis进程。

4)新的List编码类型:quicklist。

5)从节点读取过期数据保证一致性。

6)添加了hstrlen命令。

7)增强了debug命令,支持了更多的参数。

8)Lua脚本功能增强。

9)添加了Lua Debugger。

10)config set 支持更多的配置参数。

11)优化了Redis崩溃后的相关报告。

12)新的RDB格式,但是仍然兼容旧的RDB。

13)加速RDB的加载速度。

14)spop命令支持个数参数。

15)cluster nodes命令得到加速。

16)Jemalloc更新到4.0.3版本。

Redis4.0

可能出乎很多的意料,Redis3.2之后的版本是4.0,而不是3.4、3.6、3.8。

一般这种重大版本号的升级也意味着软件或者工具本身发生了重大改革。下面是Redis4.0的新特性:

1)提供了模块系统,方便第三方开发者拓展Redis的功能。

2)PSYNC2.0:优化了之前版本中,主从节点切换必然引起全量复制的问题。

3)提供了新的缓存剔除算法:LFU(Last Frequently Used),并对已有算法进行了优化。

4)提供了非阻塞del和flushall/flushdb功能,有效解决删除了bigkey可能造成的Redis阻塞。

5)提供了memory命令,实现对内存更为全面的监控统计。

6)提供了交互数据库功能,实现Redis内部数据库的数据置换。

7)提供了RDB-AOF混合持久化格式,充分利用了AOF和RDB各自优势。

8)Redis Cluster 兼容NAT和Docker。

Redis5.0

1.新的Stream数据类型。5.0

2.新的Redis模块API:Timers and Cluster API。

3. RDB现在存储LFU和LRU信息。

4.集群管理器从Ruby(redis-trib.rb)移植到C代码。可以在redis-cli中。查看redis-cli —cluster help了解

更多信息。

5.新sorted set命令:ZPOPMIN / MAX和阻塞变量。

6.主动碎片整理V2。

7.增强HyperLogLog实现。

8.更好的内存统计报告。

9.许多带有子命令的命令现在都有一个HELP子命令。

10.客户经常连接和断开连接时性能更好。

11.错误修复和改进。

12. Jemalloc升级到5.1版

Redis6.0.5(里程碑)

1.ACL用户权限控制功能

2.RESP3:新的 Redis 通信协议

3.Cluster 管理工具

4.SSL 支持

5.IO多线程支持

6.新的Module API

7.新的 Expire 算法

8.Redis Cluster Proxy

9.Disque

2 Redis集群配置

现在安装对应的应用软件一般都推荐使用Docker容器,我们这里也不例外,直接使用Docker容器进行安装,安装大

概要分这几个步骤:

1、创建redis-cluster.tmpl配置Redis信息【端口、是否开启集群等】

2、创建redis.sh配置需要创建的redis信息

3、添加网络,redis集群使用该网络

4、执行redis.sh实现创建redis

5、执行redis-cli创建集群

配置Redis信息

创建 redis-cluster.tmpl 配置Redis信息(redis.conf)

#端口
port ${PORT}
#非保护模式
protected-mode no
#启用集群模式
cluster-enabled yes
cluster-config-file nodes.conf
#超时时间
cluster-node-timeout 5000
#集群各节点IP地址
cluster-announce-ip 192.168.211.141
#集群节点映射端口
cluster-announce-port ${PORT}
#集群总线端口
cluster-announce-bus-port 1${PORT}
#开启aof持久化策略
appendonly yes
#后台运行
#daemonize yes
#进程号存储
pidfile /var/run/redis_${PORT}.pid
#集群加密
#masterauth itheima
#requirepass itheima

Redis创建配置

创建 redis.sh 配置需要创建的 Redis 集群

#!/bin/bash
#在/usr/local/server/redis-cluster下生成conf和data目标,并生成配置信息
for port in `seq 7001 7006`;
do
mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-cluster.tmpl >
./${port}/conf/redis.conf && mkdir -p ./${port}/data;
done
#创建6个redis容器
for port in `seq 7001 7006`;
do
docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v /usr/local/server/redis-
cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/server/redis-
cluster/${port}/data:/data --privileged=true --restart always --name redis-${port} --net
redis-net --sysctl net.core.somaxconn=1024 redis redis-server
/usr/local/etc/redis/redis.conf;
done
#查找ip
for port in `seq 7001 7006`;
do
echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-
net").IPAddress }}' "redis-${port}")":${port}" ";
done
#换行
echo -e "\n"
#输入信息
read -p "请把输入要启动的docker容器名称,默认redis-7001:" DOCKER_NAME
#判断是否为空
if [ ! $DOCKER_NAME ];
then DOCKER_NAME='redis-7001';
fi
#进入容器
docker exec -it redis-7001 /bin/bash

这里涉及到了一个网络的定义 redis-net ,代码如下:

docker network create redis-net

移除脚本创建

创建 stop.sh 脚本,用于停止Redis容器,并且移除对应容器

#!/bin/bash
docker stop redis-7001 redis-7002 redis-7003 redis-7004 redis-7005 redis-7006
docker rm redis-7001 redis-7002 redis-7003 redis-7004 redis-7005 redis-7006
rm -rf 7001 7002 7003 7004 7005 7006

脚本授权:给 redis.sh 和 stop.sh 添加可执行权限:

chmod +x redis.sh
chmod +x stop.sh

执行脚本开始安装Redis节点,并进入到 /usr/local/bin 目录下执行 redis-cli 创建集群关联:

#执行集群几点创建
./redis.sh
#进入到任意一个安装好的redis节点的bin目录,里面有个脚本对象redis-cli,然后执行集群创建
./redis-cli --cluster create 172.18.0.2:7001 172.18.0.3:7002 172.18.0.4:7003 172.18.0.5:7004
172.18.0.6:7005 172.18.0.7:7006 --cluster-replicas 1

–cluster-replicas 表示有一个主有几个slave。

安装好了后,我们链接Redis效果如下:

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
6月前
|
监控 NoSQL Redis
Redis 哨兵模式高可用
Redis 哨兵模式高可用
96 4
|
2月前
|
消息中间件 NoSQL Redis
【赵渝强老师】Redis消息的生产者消费者模式
消息队列在Redis中可通过List数据结构实现,支持发布者订阅者和生产者消费者两种模式。生产者通过`lpush`向List添加消息,消费者通过`rpop`或`brpop`消费消息,后者支持阻塞等待。示例代码展示了如何使用Redis的生产者消费者模式。
|
3月前
|
监控 NoSQL 算法
Redis Sentinel(哨兵)详解
Redis Sentinel(哨兵)详解
213 4
|
3月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
98 4
|
3月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
56 3
|
3月前
|
SQL 分布式计算 NoSQL
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
38 2
|
3月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
84 1
|
4月前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群