先说明下我们本次安装的环境配置以及最终的目标:
环境: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
-
安装一个ruby版本
rvm install 2.3.3
-
使用一个ruby版本
rvm use 2.3.3
-
卸载一个已知版本
rvm remove 2.0.0
-
查看当前所用版本
ruby --version
上面的步骤在3台主机上完成之后,接下来运行一下redis-trib.rb命令
可以看出这个就是我们建立集群的一个命令集
接下来我们要确保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登录执行以下命令:
然后到A主机7001节点查询
然后到各个节点查询也如此,恭喜大功告成啦~~
附录:
你没有看错,这里还有一个坑,笔者在Waiting for the cluster to join..........还没响应完的时候网断了,下一次继续执行创建集群命令的时候又报错了T___T,然后就是提示“ERR Slot * is already busy”这种类似的错,这种错是因为我们之前配置了一半导致的,解决的办法就是把主机上我们之前的nodes_700*.conf文件先都删除了,然后用redis-cli登录到每个节点上执行
flushall
cluster reset
然后将6个节点都重新启动,最后再执行创建集群的命令。
到这里就结束了,第一次搭建redis集群,有问题的地方还请大家留言。