Redis集群搭建部署

2018-07-11  本文已影响0人  依然范特希

先说明下我们本次安装的环境配置以及最终的目标:
环境:3台CentOS-7.4.1708(阿里云主机)
目标搭建Redis集群,其中3台主机上每个上面放两个redis节点如下:
A主机:master节点,slave节点
B主机:master节点,slave节点
C主机:master节点,slave节点
一、Redis安装
1、下载以及解压

cd /usr/local/
wget http://download.redis.io/releases/redis-3.2.1.tar.gz
tar -zxvf ./redis-3.2.1.tar.gz

2、编译安装

 cd redis-3.2.1
 make && make install

注意:如果报错gcc命令未找到,请如下执行gcc命令的安装

yum install gcc

如果报错zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录,先进行如下操作

make MALLOC=libc

3、创建redis节点
在每台服务器上创建两个节点,如下:

 cd /usr/local/
 mkdir redis_cluster  //创建集群目录
 mkdir 7000 7001   //分别代表两个节点    其对应端口 7000 7001 
//copy一份配置文件到7000
cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7000/   
//拷贝到7001目录
cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7001/   

4、修改每个节点下redis.conf配置文件

daemonize    yes                          //redis后台运行
pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7002,7003
port  7000                                //端口7000,7002,7003
cluster-enabled  yes                      //开启集群  把注释#去掉
cluster-config-file  nodes_7000.conf      //集群的配置  配置文件首次启动自动生成 
cluster-node-timeout  5000                //请求超时  设置5秒够了
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志

(坑点一)
标准的配置修改就是如上了,但是发现配置文件中bind的ip只有本地127.0.0.1并且开启了安全模式,这样就意味着,除本地之外的应用无法连接redis,那么我们将bind 127.0.0.1注释并且 protected-mode no,(这里据说可以绑定希望访问的IP而不用注释掉,注释掉的话是所有的IP都可以访问,但是我在绑定固定ip的时候无法启动了,所以就注释掉了,大家可以研究下这里或者后面我也会继续探索)如下:

#bind 127.0.0.1
protected-mode no

4、启动redis应用
进入各主机下启动redis节点

cd /usr/local
redis-server  redis_cluster/7000/redis.conf
redis-server  redis_cluster/7001/redis.conf

5、查看服务是否启动成功

 ps -ax | grep redis   #查看是否启动成功
 netstat -tnlp | grep redis #可以看到redis监听端口

二、创建集群

集群是用一个ruby写的东东搞的,笔者也没有研究,3个主机先安装下吧。

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

然后 再用 gem 这个命令来安装 redis接口 gem是ruby的一个工具包

gem install redis

(坑点二)
利用ruby --version的命令查询下ruby的版本,如果ruby的版本比较低的话这里可能会失败,失败了的话,我们就不能用yum去安装了,用下面的方法:
1、先安装curl

sudo yum install curl

2、安装RVM

    gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
    curl -L get.rvm.io | bash -s stable

3、

 source /usr/local/rvm/scripts/rvm

4、查看rvm库中已知的ruby版本

 rvm list known
  1. 安装一个ruby版本

    rvm install 2.3.3
    
  2. 使用一个ruby版本

    rvm use 2.3.3
    
  3. 卸载一个已知版本

    rvm remove 2.0.0
    
  4. 查看当前所用版本

    ruby --version
    

上面的步骤在3台主机上完成之后,接下来运行一下redis-trib.rb命令


redis-trib.rb命令.png

可以看出这个就是我们建立集群的一个命令集
接下来我们要确保6个节点都是启动的,而且彼此之间网络都是通的
(坑点三)
我们要将每个主机的7000,7001端口对外开放之后,还要将7000+10000=17000以及17001的集群总线端口打开(阿里云主机配置入站规则),否则下面cluster meet操作会失败。
以上确认完毕之后,执行下面命令建立redis之间的连接:

  /usr/local/redis-3.2.1/src/redis-trib.rb  create  --replicas  1  A主机IP:7000 A主机IP:7001  B主机IP:7000 B主机IP:7001  C主机IP:7000  C主机IP:7001

然后会提示Can I set the above configuration? (type 'yes' to accept)这种提示,上面也会列出主从的以及插槽的分配策略,确认之后,输入“yes”,注意一定得是yes,不能是y,T___T....
输入完成之后,会提示Waiting for the cluster to join.......... ,这样就是在等各个cluster回应了。然后用另外两个主机的每个redis节点登录redis-cli进行回应,如下

 redis-cli -c -p 7000(7001)
 cluster meet A主机IP 7000    

都meet完成之后,如果A主机Waiting for the cluster to join..........消失了,证明已经完成搭建。
然后查一下/usr/local/redis/src/redis-trib.rb check A主机IP:7000可以看到配置情况

三、验证
在A主机上用vue-cli 7000登录执行以下命令:


设值.png

然后到A主机7001节点查询


image.png
然后到各个节点查询也如此,恭喜大功告成啦~~

附录:
你没有看错,这里还有一个坑,笔者在Waiting for the cluster to join..........还没响应完的时候网断了,下一次继续执行创建集群命令的时候又报错了T___T,然后就是提示“ERR Slot * is already busy”这种类似的错,这种错是因为我们之前配置了一半导致的,解决的办法就是把主机上我们之前的nodes_700*.conf文件先都删除了,然后用redis-cli登录到每个节点上执行

 flushall
 cluster reset

然后将6个节点都重新启动,最后再执行创建集群的命令。

到这里就结束了,第一次搭建redis集群,有问题的地方还请大家留言。

上一篇下一篇

猜你喜欢

热点阅读