Redis集群环境的搭建

约定不等于承诺〃 2022-04-03 13:25 943阅读 0赞

一:集群环境的安装和版本的介绍

用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master、3 salve 环境。

redis 采用 redis-3.2.4 版本。

两台虚拟机都是 CentOS ,一台 CentOS6.5 (IP:192.168.10.152),一台 CentOS6.5(IP:192.168.10.150) 。

1:下载并安装

cd /usr/local

mkdir redis 进入到redis文件夹下面

cd redis

wget http:``//download``.redis.io``/releases/redis-3``.2.4.``tar``.gz

tar -zxvf redis-3.2.4.``tar``.gz

2:编译安装

  1. cd redis-3.2.4
  2. make && make install

3:将 redis-trib.rb 复制到 /usr/local/bin 目录下

  1. cd src
  2. cp redis-trib.rb /usr/local/bin/ 

4:创建redis节点

首先在 192.168.10.152 机器上 /usr/local/redis-3.2.4 目录下创建 redis_cluster 目录;

  1. mkdir redis_cluster

在 redis_cluster 目录下,创建名为7000、7001、7002的目录,并将 redis.conf 拷贝到这三个目录中

  1. mkdir 7000 7001 7002
  2. cp redis.conf redis_cluster/7000
  3. cp redis.conf redis_cluster/7001
  4. cp redis.conf redis_cluster/7002

分别修改这三个配置文件,修改如下内容

port 7000 //端口7000,7002,7003
bind 本机ip //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7001,7002
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志

接着在另外一台机器上(192.168.10.150),的操作重复以上三步,只是把目录改为7003、7004、7005,对应的配置文件也按照这个规则修改即可。

5:启动各个节点

第一台机器上执行

20181222153040789.png

在第二台机器上面执行

20181222153113525.png

  1. 检查 redis 启动情况

20181222153159946.png

20181222153146231.png

7.创建集群

Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中,第三步中已将它复制到 /usr/local/bin 目录中,可以直接在命令行中使用了。使用下面这个命令即可完成安装。

redis-trib.rb create —replicas 1 192.168.10.152:7000 192.168.10.152:7001 192.168.10.152:7002 192.168.10.150:7003 192.168.10.150:7004 192.168.10.150:7005

其中,前三个 ip:port 为第一台机器的节点,剩下三个为第二台机器。

这个工具是用 ruby 实现的,所以需要安装 ruby。安装命令如下:

yum -y ``install ruby ruby-devel rubygems rpm-build

gem ``install redis

安装ruby和redis的对接接口的时候报错,显示ruby的版本应该>=2.2.2

20181222153527776.png

解决办法是 先安装rvm,再把ruby版本提升至2.3.3

1.安装curl

sudo yum install curl

  1. 安装RVM

curl -L get.rvm.io | bash -s stable

安装RVM的时候显示

curl -sSL https://shipyard-project.com/deploy| ACTION=node DISCOVERY=etcd://192.168.5.252:4001 bash -s

提示如下报错:

curl: (35) SSL connect error

解决方法:升级网络安全服务即可。

yum update nss

同时显示需要安装公钥,只需要根据提示的命令进行安装即可

然后source 对应提示的安装路径就可以使用RVM

  1. 查看rvm库中已知的ruby版本

rvm list known

  1. 安装一个ruby版本

rvm install 2.3.3

  1. 使用一个ruby版本

rvm use 2.3.3

  1. 设置默认版本

rvm remove 2.0.0

  1. 卸载一个已知版本

ruby —version

  1. 再安装redis就可以了

gem install redis

之后再运行 redis-trib.rb 命令,会出现如下提示:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3NDY5MDU1_size_16_color_FFFFFF_t_70

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3NDY5MDU1_size_16_color_FFFFFF_t_70 1

在输入yes的时候会出现

redis集群环境卡在Waiting for the cluster to join..

接下来 提示 Waiting for the cluster to join………. 安装的时候在这里就一直等等等,没反应,傻傻等半天,看这句提示上面一句,Sending Cluster Meet Message to join the Cluster.

  1. 这下明白了,我刚开始在一台Server上去配,也是不需要等的,这里还需要跑到Server2上做一些这样的操作。
  2. 192.168.10.150, redis-cli -h 192.168.10.150 -c -p 700\* 分别进入redis各节点的客户端命令窗口, 依次输入 cluster meet 192.168.10.150 7000……,其中的\*分别代表012
  3. 回到Server1,已经创建完毕了。
  4. 查看一下 /usr/local/redis/src/redis-trib.rb check 192.168.10.152:7000
  5. 到这里集群已经初步搭建好了。
  1. 集群验证

在第一台机器上连接集群的7000端口的节点,在另外一台连接7004节点,连接方式为 redis-cli -h 192.168.10.152 -c -p 7000 ,加参数 -C 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略。

20181222155144715.png

然后在另外一台7004端口,查看 key 为 hello 的内容

20181222155250469.png

简单说一下原理

redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的时候看到set 和 get 的时候,直接跳转到了7000端口的节点。

Redis 集群会把数据存在一个 master 节点,然后在这个 master 和其对应的salve 之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的 master 节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的 salve 节点,充当 master 。

需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

redis关闭和启动

redis关闭

到redis节点目录下执行如下命令

redis-cli -p 端口号 shutdown

redis启动

./redis-server 参数

参数:redis.conf文件全路径

需要到redis所在目录去重新启动redis,此时redis中的数据仍然可以恢复。

发表评论

表情:
评论列表 (有 0 条评论,943人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Redis环境

    本文涉及:Redis集群环境的搭建 ◆ 准备节点 ◆ 一个Redis集群至少需要6个节点才能保证组成完整高可用的集群。想要开启集群只需要设置以下两个参数就行: ...