linux安装redis-6.0.1单机和集群

redis作为一个直接操作内存的key-value存储系统,也是一个支持数据持久化的Nosql数据库,具有非常快速的读写速度,可用于数据缓存、消息队列等。

一、单机版安装 1.下载redis

  进入redis官网下载安装包,这里使用的是目前最新版6.0.4

  

2.上传到服务器并解压

  上传到服务器/usr/local目录并解压

  tar -zxvf redis-6.0.4.tar.gz

3.编译和安装   3.1 编译,进入redis根目录,执行命令

  make

  若编译报错,可能是缺少编译环境gcc和tcl

  1)安装gcc,先清理掉上一步编译产生的文件,执行命令

  make distclean

  安装gcc,执行命令

  yum install gcc -y

  这个遇到一个问题:在安装6.0.1版本make时会遇到这样一个错误,server.c:xxxx:xx: error: ‘xxxxxxxx’ has no member named ‘xxxxx

    原因:gcc编译工具版本的问题,centos7默认安装的版本是4.8.5,但是要求对应版本要在5.3以上,查看gcc版本命令

    gcc -v

    解决方法:升级到5.3以上版本,依次执行命令

    yum -y install centos-release-scl

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

    scl enable devtoolset-9 bash

    echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile  --使永久生效

  2)安装tcl,执行命令

  yum install tcl -y

  重新编译make

  3.2 安装,进入src目录,执行命令

  make install PREFIX=http://www.likecs.com/usr/local

  这时就会在/usr/local目录下生成一个redis目录,后面操作redis均使用此目录下文件,解压编译的目录作为源目录。

4.配置

  复制源目录根目录下的redis.conf文件到生成的/usr/local/redis目录下,执行命令

  cp redis.conf /usr/local/redis

  使用vi编辑配置redis.conf

  bind 0.0.0.0  设置绑定的主机ip,0.0.0.0表示监听所有地址

  protected-mode no  关闭安全模式,允许外网访问

  daemonize yes  后台启动

5.添加开放端口号到防火墙

  添加端口并重启防火墙

  firewall-cmd  --zone=public --add-port=6379/tcp --permanent && firewall-cmd --reload

  列出已经开放的端口号

  firewall-cmd --zone=public --permanent --list-ports

6.启动

  启动redis,进入redis根目录,执行命令

  ./bin/redis-server redis.conf

  使用redis工具或API远程访问。

OK,单机版搭建成功!

二、集群版安装

所谓知其然知其所以然,为什么要用redis集群?

  1)首先,redis是一个内存数据库,也就是说存储数据的容量不能超过主机内存大小(一般几十G),有时我们要在redis中存储大量的数据,比如上百个G,如果只是单个的redis实例,这样很难动态水平扩展,这时候就要考虑集群。

  2)其次,redis单实例具有流量压力上限问题,所以需要构建数据分区,多个master实例同时提供读写服务。

  redis 3.0版本以上开始支持cluster,采用的是hash slot(hash槽,redis共有16384个hash槽),它可以把多个redis实例整合在一起,将hash槽均分给每个master,形成redis集群也就是将数据分散在集群中的多个redis实例上,当我们创建数据时一个key只被分配到一个实例上。redis cluster是一个无中心的结构,每个节点保存着自己的数据和其它节点的信息,知道其它节点负责的槽,并且会与其它节点定时发送心跳信息,能够及时感知集群中异常的节点。

  那么,当我们新建一个key时,redis集群是怎样将数据分配到节点上的呢?

  当需要在redis集群中放置一个key-value时,redis先对key使用crc16算法计算出一个结果,然后将这个数值与16384求余,这样就确定了hash槽的位置,再根据hash槽的值确定将数据分配给之前均分hash槽的节点上。

  当我们取出一个key时,又是怎样进行定位的呢?

  当当前redis节点接收到获取数据的命令时,会计算出要处理的数据库键属于哪个槽与存储时使用同样的算法,并检查这个槽是否指派给了自己,若正好指派给了当前节点,则直接在这个节点上执行命令获取数据。否则节点会向客户端返回一个moved指令,指引客户端转向(redirect)至正确的节点,并在此发送之前执行的命令获取数据。

  redis使用集群,就要包保证集群的高可用性,使用主从复制(repliaction)和自动故障转移--哨兵机制(sentinel),可以解决单点故障。通过数据分区与主从复制提高redis集群的性能和高可用性。

  redis集群是怎样保证集群高可用的呢?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwgdsp.html