Redis集群搭建【超详细】

 有问题可以关注公众号提着月亮去火星

一、基本环境

首先我们需要使用VMware配置几个虚拟机,我们需要安装VMWare然后 下载自己的linux镜像文件,在虚拟机上安装linux系统,

vm15和centos7下载传送门   提取码:lvb5 。我使用的是centos7 64

大致步骤可以根据其他博客将第一台虚机的系统安装成功,然后直接clone这台机器就可以了,然后需要修改ip。

 二、准备相关软件安装包

在这里我们需要准备 redis-3.0.7.tar.gz  如果需要搭建其他集群请自行准备,上面的链接中还提供了zookeeper的文件。

三、开始

1、我们启动好虚拟机后,首先需要确保各个之间可以ping 通。

2、我们使用xshell工具连我自己的这几台服务器。

配置大致如上图,配置参数如下图。

3、cd /root/software 进入到我们software目录下 我们可以使用wget http://download.redis.io/releases/redis-3.0.7.tar.gz 下载 ,也可以使用xshell 提供的文件传输工具将我们的离线文件上传至software下:

目录如上。

进入到 redis-3.0.7目录下 使用如下命令

4、编译并安装

 cd redis-3.2.4

 make && make install

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

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

6、创建redis节点(在/root/software/redis-3.0.7 下创建redis_cluster 目录)

mkdir redis_cluster


7、创建节点目录并将redis.conf文件复制到节点目录下

mkdir 7000 7001 7002    (创建节点目录)

cp redis.conf redis_cluster/7000
cp redis.conf redis_cluster/7001
cp redis.conf redis_cluster/7002

复制配置文件

8、修改配置文件

port  7000                                        //端口7000,7002,7003        
bind 本机ip                                       //改为其他节点机器可访问的ip 可以使用ifconfig查看一下
daemonize    yes                               //redis后台运行
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志
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秒,可自行修改

操作之后在另外一台机器重复该操作。

9、启动各个节点

第一台机器上执行
redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
 
另外一台机器上执行
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf

10、检查启动情况

ps -ef | grep redis

netstat -tnlp | grep redis

注意红色部分是总线ip稍后会给我们埋坑

11、创建集群之前准备

redis-trib.rb使用ruby实现的所以在执行集群创建命令之前我们需要安装ruby。

启动命令:

redis-trib.rb  create  --replicas  1  192.168.255.128:7003   192.168.255.128:7004   192.168.255.128:7005  192.168.255.3:7000  192.168.255.3:7001  192.168.255.3:7002  

不安装的话会出现下图结果:

所以我们需要使用如下命令安装redis接口:

gem install redis

我们看到上图提示说需要redis的version 大于 2.3.0 。

这是因为我之前使用 yum -y install ruby ruby-devel rubygems rpm-build 安装的了ruby 但是安装的版本是2.0.0的。

我们可以使用RVM来对ruby进行环境的管理和切换,而RVM需要通过CRUL来进行下载。

12 安装CRUL

使用命令    yum install curl

 13、使用curl安装rvm

命令: curl -L get.rvm.io | bash -s stable

14、使用key进行RVM的安装

source ~/.bashrc

source ~/.bash_profile

执行上述命令使环境变量生效。

使用source让当前shell读入路径为" /usr/local/rvm/scripts/rvm "(路径可以自定义)的shell文件并依次执行文件中的所有语句,并重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录

15、安装需要的ruby版本

rvm install 2.4.6

16、检查版本,移除旧版本,check新版本

rvm use 2.4.6 #启用新版本

rvm remove 2.0.0  # 移除旧版本

ruby -v #检查当前使用的版本号

17、然后继续redis接口安装(gem install redis

18、现在可以执行redis集群启动命令

redis-trib.rb  create  --replicas  1  192.168.255.128:7003   192.168.255.128:7004   192.168.255.128:7005  192.168.255.3:7000  192.168.255.3:7001  192.168.255.3:7002  

执行命令时出现下面的错误。

[ERR] Sorry, can't connect to node 192.168.255.3:7000

这个错误的原因是我们之前配置的所有节点都没有进行对外开放所以无法链接。

firewall-cmd --zone=public --add-port=7003/tcp --permanent 
firewall-cmd --zone=public --add-port=7004/tcp --permanent 
firewall-cmd --zone=public --add-port=7005/tcp --permanent 
firewall-cmd --reload
firewall-cmd --zone=public --add-port=7000/tcp --permanent 
firewall-cmd --zone=public --add-port=7001/tcp --permanent 
firewall-cmd --zone=public --add-port=7002/tcp --permanent 
firewall-cmd --reload

在两台机器上分别执行上述命令开发端口。这里我们修改的是firewall防火墙。

此时执行会出现如下图的情况:

后面的点会一直点一下一直等待中。

这是因为我们只是开放了客户端节点的端口,没有开放集群总线的端口,总线端口就是客户端端口+10000,上面我们提到重点注意的

19、在iptables中开发所有端口

我们使用命令

cd /etc/sysconfig/可以使用vi iptables 先查看一下 目前只是开放了 22 端口。

iptables -A INPUT -p tcp --dport 17001 -j ACCEPT
iptables -A INPUT -p tcp --dport 17002 -j ACCEPT
iptables -A INPUT -p tcp --dport 17000 -j ACCEPT
iptables -A INPUT -p tcp --dport 7001 -j ACCEPT
iptables -A INPUT -p tcp --dport 7002 -j ACCEPT
iptables -A INPUT -p tcp --dport 7000 -j ACCEPT

service iptables save #保存文件
iptables -L -n #查看哪些端口开放了

-----------------------------------------------
iptables -A INPUT -p tcp --dport 17003 -j ACCEPT
iptables -A INPUT -p tcp --dport 17004 -j ACCEPT
iptables -A INPUT -p tcp --dport 17005 -j ACCEPT
iptables -A INPUT -p tcp --dport 7003 -j ACCEPT
iptables -A INPUT -p tcp --dport 7004 -j ACCEPT
iptables -A INPUT -p tcp --dport 7005 -j ACCEPT
service iptables save #保存文件
iptables -L -n #查看哪些端口开放了

20、此时再次执行集群启动命令

[ERR] Node xxxxx is not empty. Either the node already knows other nodes (check with CLUSTER NODES) 

会提示我们node节点不空,这是因为我们之前在执行redis集群启动命令的时候虽然一直等待,但是相关节点配置数据以及数据文件都已经生成。我们需要进入到我们的redis解压目录下删除掉图中红色的数据文件:

执行rm ****  然后选择y

最后我们再次执行集群启动命令成功:

21 测试集群效果:

在Xshell中新开一个窗口 如下图,使用7002的节点进行设值操作传递到7003主。(如图 03、04 00 都是主)

set redis cluster

接下来我们能在另外一台机器上链接05从节点,进行取值操作 get redis

集群功能测试成功。至此redis集群搭建测试成功。


版权声明:本文为YangzaiLeHeHe原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。