Redis简介

Redis(Remote Dictionary Server)是完全开源的、遵守BSD协议的、高性能的Key-Value数据库。

Redis与其他Key-Value缓存产品有一下三个特点:

  1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  2. Redis不仅仅支持简单的Key-Value类型的数据,同时还提供List、Set、ZSet、Hash等数据结构的存储
  3. Redis支持数据的备份,既Master-Slave模式的数据备份。

Redis优势

  1. 性能极高,因为Redis是针对内存来读写的。
  2. 丰富的数据类型String、List、Set、ZSet、Hash
  3. 原子,Redis的所有操作都是原子性的,意思就是要么成功要么失败完全不执行,单个操作是原子性的。多个操作也支持事务,通过MULTI和EXEC指令包起来。
  4. 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性

Redis官网官方网站

Redis集群

为什么集群

随着大数据时代的到来,在大型系统应用中,几十上百G的数据很常见.而无论是物理机、云主机(虚拟机),内存资源往往是有限的,虽然目前硬件成本降低,几十G几十核的主机也很常见,但是对于redis这种工作进程为单线程模式的工具来说,一台主机只运行一个实例就有些浪费,且出现单点故障时影响范围很大。同时,redis管理大内存时不如管理相对较小的内存高效,据第三方测试,redis单进程内存分配达到20G后性能急剧下降,因此普遍使用的方式为单进程分配8G内存,单主机开启多个redis实例.

原理

Redis官方集群方案 Redis Cluster(服务端sharding)Redis cluster是一种在服务端sharding(分片)的技术,在redis3.0版本开始正式提供。Redis cluster的服务端sharding引入了slot(槽)的概念,一共分为16384(2^14)个slot,集群中的每个node节点负责分摊这些slot,每个进入redis的键值对,根据key进行hash运算,除以16384取模,匹配相应的slot,再分配进相应的node中的实例中。在redis cluster方案中,数据储存的粒度由原来的instance再次精细为slot。Redis cluster提供一种叫做cluster bus(集群总线)的功能特性,采用特殊的二进制协议,通信及响应速度极快。它提供节点故障检测、故障转移、新节点识别等节点管理功能,该功能的进程间通信端口号为服务端口号值+10000,例如redis对外提供服务的端口号为6555,则cluster bus的端口号则为16555。值得注意的是:redis cluster是官方在3.0以后的版本才正式推出的。

Redis集群部署

Redis集群中有多台Redis服务器不可避免会有服务器挂掉。Redis集群服务器之间通过互相的ping-pong判断是否节点可以连接上。如果有一半以上的节点去ping一个节点的时候没有回应,集群就认为这个节点宕机了。

上面就是我们常说的为了容错而生的redis集群投票机制。

因为集群投票机制redis要求至少3主3从共6个节点才能组成redis集群,每个主节点至少有一个从节点,测试环境可一台物理上启动6个redis节点,但生产环境至少要准备3台物理机。

这里为了演示我使用了三台Centos7虚拟服务器,每台起两个Redis实例,共6个节点来构建Redis集群|

主机名 节点IP 实例1端口 实例2端口
Master1 192.168.200.11 7001 7002
Master2 192.168.200.12 7001 7002
Master3 192.168.200.13 7001 7002

部署架构图



这里采用Redis6.0.9版本的Redis,所有节点服务器都需要进行以下操作

编译安装时要求gcc版本未5.3以上版本,

先执行gcc -v 查看当前gcc版本

gcc -v

如果提示无gcc,首先需要安装gcc

yum install -y gcc gcc-c++

安装完成后查看gcc版本,Centos版本默认安装的是4.8.5版本的gcc,版本过低



gcc 升级

yum install -y centos-release-scl

yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

yum install -y systemd-devel

echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile

source /etc/profile

升级完成后查看gcc版本



下面进行安装Redis

提前下载好Redis压缩包这里使用redis-6.0.9.tar.gz。把下载好的文件上传到三个服务器上,我这里放到了/usr/local目录下



下面使用tar命令解压缩

tar -zxvf redis-6.0.9.tar.gz

mv redis-6.0.9 redis609



进入redis目录创建节点目录

mkdir {7001,7002}



创建redis用户并给新建的目录附上访问权限

useradd -s /sbin/nologin redis

chown -R redis: /usr/local/redis609



下面进行Redis的编译安装

因Redis版本原因需要安装或者更新tcl版本大于8.5

wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz

sudo tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/

cd /usr/local/tcl8.6.1/unix/

./configure

make

make install

下面进入redis目录执行编译redis need systemd-devel

make BUILD_WITH_SYSTEMD=yes USE_SYSTEMD=yes

make install

查看redis版本

redis-cli --version

redis-server --version

进入redis609目录拷贝配置文件到7001、7002两个文件夹下并进行文件授权



修改配置文件

port 7001
protected-mode no
daemonize no
supervised systemd
pidfile /usr/local/redis609/7001/redis_7001.pid
logfile "/usr/local/redis609/7001/7001.log"
dir /usr/local/redis609/7001/
appendonly yes
appendfilename "appendonly7001.aof"
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000

配置参数说明:

  1. bind 绑定的主机地址
  2. port 指定Redis监听端口,默认端口为6379
  3. logfile 日志记录方式,默认为标准输出
  4. dir 本地数据库存储路径
  5. cluster-enabled yes 开启集群功能,否则节点是一个普通的单一redis实例
  6. cluster-config-file nodes.conf 集群自动生成的配置文件,保存集群信息
  7. cluster-node-timeout 15000 集群中节点能够失联的最大时间
  8. appendonly yes 持久化记录服务器执行的所有写操作命令

    7002实例按照7001在操作一遍即可

    使用Systemd管理Redis服务

    创建服务启动文件,其中%i为占位符变量,redis@7001.service中@符号后的7001参数会替换该变量:
cat > /etc/systemd/system/redis@.service << EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
User=redis
Group=redis
Type=notify
ExecStart=/usr/local/bin/redis-server /usr/local/redis609/%i/redis%i.conf --daemonize no --supervised systemd
ExecStop=/usr/local/bin/redis-cli -p %i shutdown
LimitNOFILE=10240
TimeoutStartSec=90s
TimeoutStopSec=90s
Restart=always
[Install]
WantedBy=multi-user.target
EOF

所有节点启动redis实例,并设为开机启动

systemctl daemon-reload    #后期有修改serverice 之后一定要执行这句话
systemctl enable --now redis@{7001,7002}.service

执行启动服务之后有可能会卡顿,,遇到卡顿不要怕直接Ctrl+C退出使用netstat查看一下服务端口是否已启动监听

netstat -lnp|grep redis

端口已正常启动说明配置成功

实例状态维护


#查看实例运行状态
systemctl status redis@7001.service
systemctl status redis@7002.service #启动实例
systemctl start redis@7001.service
systemctl start redis@7002.service #停止实例
systemctl stop redis@7001.service
systemctl stop redis@7002.service #重启实例
systemctl restart redis@7001.service
systemctl restart redis@7002.service

以上操作在三台服务器都执行一遍。

实例全部启动后 ,在任意服务器上创建redis集群

redis-cli --cluster create 192.168.200.11:7001 192.168.200.11:7002 192.168.200.12:7001 192.168.200.12:7002 192.168.200.13:7001 192.168.200.13:7002 --cluster-replicas 1



有以下提示表示已部署成功



查看集群节点

redis-cli -c -h 192.168.200.13 -p 7001 cluster nodes

Centos7部署Redis集群的更多相关文章

  1. Redis笔记 -- 在 Centos7.4单机中部署Redis集群(二)

    0x00--背景和目的 在单台PC服务器上部署Redis集群,通过不同的TCP端口启动多实例,模拟多台独立PC组成集群. 0x01--环境描述: Centos版本:CentOS Linux relea ...

  2. window下使用Redis Cluster部署Redis集群

    日常的项目很多时候都需要用到缓存.redis算是一个比较好的选择.一般情况下做一个主从就可以满足一些比较小的项目需要.在一些并发量比较大的项目可能就需要用到集群了,redis在Windows下做集群可 ...

  3. laravel项目利用twemproxy部署redis集群的完整步骤

    Twemproxy是一个代理服务器,可以通过它减少Memcached或Redis服务器所打开的连接数.下面这篇文章主要给大家介绍了关于laravel项目利用twemproxy部署redis集群的相关资 ...

  4. Centos6.6部署Redis集群

    Centos6.6部署Redis集群 1环境准备 1环境安装redis 1安装ruby 2配置redis主从环境 3部署redis sentinel服务器 5集群使用 13当前集群环境说明 13测试功 ...

  5. 在 Kubernetes 中部署 Redis 集群

    在 Kubernetes 中部署 Redis 集群 在Kubernetes中部署Redis集群面临挑战,因为每个 Redis 实例都依赖于一个配置文件,该文件可以跟踪其他集群实例及其角色.为此,我们需 ...

  6. CentOS下部署Redis集群

    一.部署环境 服务器三台: 10.10.15.41(配置运行两个实例,端口:6379,6380) 10.10.15.42(配置运行两个实例,端口:6381,6382) 10.10.15.43(配置运行 ...

  7. [Kubernetes]CentOS7部署Kubernetes集群

    环境介绍及安装前准备 三台机器,用于部署k8s的运行环境: 节点 ip Master 192.168.243.138 Node1 192.168.243.139 Node2 192.168.243.1 ...

  8. 利用docker部署redis集群

    目录 一.首先配置redis.conf文件,... 1 1.获取配置文件... 1 2.修改各配置文件的参数... 2 二.下载redis镜像.启动容器... 2 1.创建网络... 2 2.拉取镜像 ...

  9. 单个机器部署redis集群模式(一键部署脚本)

    一.检查机器是否安装gcc.unzip.wget 二.部署模式 #模式1: 将所有主从节点以及sentinel节点部署在同一台机器上 #模式2: 将一个数据节点和一个sentinel节点部署在一台机器 ...

随机推荐

  1. 解决IDEA包重叠在一起的问题

    问题显现: 解决方法:

  2. webpack系列——webpack3导入jQuery的新方案

    本文的目的 拒绝全局导入jQuery!! 拒绝script导入jQuery!! 找到一种只在当前js组件中引入jQuery,并且使用webpack切割打包的方案! 测试环境 以下测试在webpack3 ...

  3. CCF201909-1小明种苹果

    解题思路:定义一个二维数组来存放输入的信息,第一列用来存放所有果树的初始值,然后遍历数组.具体思路见代码注释. 第一遍提交得了80分,看了半天才明白了原因,快被自己蠢死...... 定义数组应该为a[ ...

  4. centos7 安装樱桃树cherrytree

    樱桃树对于做笔记或者编程来说都是很好的工具.以前再网上找了很久还是稿不懂cherrytree的方法.后来才发现,其实根本就不用那么麻烦.直接在epel源里面安装句可以了. 下面说下安装步骤: 第一步: ...

  5. 函数.python

    今日内容概要 名称空间 名字的查找顺序 作用域 global与nonlocal关键字 函数名对象 函数的嵌套 今日内容详细 1.名称空间 #名称空间其实就是存放变量名与变量名绑定关系的地方#分类1.内 ...

  6. vue3组合式API

    vue3组合式API 为什么要用组合式API,我们来看看它是如何解决vue2的局限性的 1.vue2的局限性 当组件内容越来越多,逻辑越来越复杂,可读性就会降低,并且难以维护. vue2组件采用配置式 ...

  7. Anaconda下安装Tensorflow、keras问题及解决办法

    这两天一直在跟tensorflow的错误日志作斗争!安装过程中出现各种问题,找资料,采坑,终于装好了,做个小总结! keras需要在TensorFlow之上才能运行,所以需要先安装TensorFlow ...

  8. 2021.08.05 P5357 康托展开模板(康托展开)

    2021.08.05 P5357 康托展开模板(康托展开) P5367 [模板]康托展开 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.康托展开 算法学习笔记(56): ...

  9. Elemnt ui 组件封装(form)

    <template> <el-form class="form" :inline="formConfig.inline" :model=&qu ...

  10. IDEA编译项目后,target目录下的jsp文件不更新

    tomcat目录说明 先来看一下tomcat的目录: |-bin |-conf |-lib |-logs |-temp |-webapps |-work tomcat 的核心是servlet容器,叫 ...