恭喜能看到这篇博客,本文章从开始到结束,都为实操记录,踩了很多的坑,亲测可用

1、下载redis源码

cd ~
mkdir redis-cluster
cd redis-cluster
# 这里下载的是3.2.1,太慢就用迅雷
wget http://download.redis.io/releases/redis-3.2.1.tar.gz

2、启动redis

# 解压
tar -zxvf redis-3.2.1.tar.gz
cd redis-3.2.1
make # 如果报错则说明差环境执行下面代码试试
yum -y install gcc gcc-c++ kernel-devel
cd src
# 复制到redis-cluster中去
cp redis-server ../../

在更目录中创建文件夹

mkdir 7100 7101 7200 7201 7300 7301

编写 redis 配置文件 ,六个文件里面都要有 注意更改端口号 ,配置文件名儿为 redis.7100.conf

port 7100

appendonly yes
appendfilename "appendonly.7100.aof"

# // 如果要设置最大内存空间,可添加如下两句
maxmemory 200mb
maxmemory-policy allkeys-lru

cluster-enabled yes
cluster-config-file nodes-7301.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

分别进入6个文件夹里面

cd 7000
../redis-server ./redis.conf &

实例打印的日志显示, 因为 nodes.conf 文件不存在, 所以每个节点都为它自身指定了一个新的 ID :

No cluster configuration found, I'm 97a3a64667477371c4479320d683e4c8db5858b1

3、搭建环境

现在我们已经有了六个正在运行中的 Redis实例, 接下来我们需要使用这些实例来创建集群, 并为每个节点编写配置文件。

通过使用 Redis 集群命令行工具 redis-trib , 编写节点配置文件的工作可以非常容易地完成:redis-trib 位于 Redis 源码的 src 文件夹中, 它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。

./redis-trib.rb create --replicas 1 127.0.0.1:7100 127.0.0.1:7200 127.0.0.1:7300 127.0.0.1:7101 127.0.0.1:7201 127.0.0.1:7301

这个命令在这里用于创建一个新的集群, 选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。

之后跟着的其他参数则是这个集群实例的地址列表,3个 master 3个 slave redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yesredis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯,最后可以得到如下信息:

[OK] All 16384 slots covered

如果你是第一次搭建那么这个环节肯定会报错因为 redis-trib 是ruby脚本,这个东西依赖ruby环境所以还得装ruby

4、安装ruby环境

yum install ruby

单机redis一秒能 单机redis集群_redis

安装完ruby之后还得通过gem安装redis接口

# 换源 不然下不下来 后缀是.com (这里是个坑) .org已经停止维护了,当然其他的也不行,只有这个可以 哈哈
gem sources --add https://gems.ruby-china.com/
# 查看换源
gem sources -l

单机redis一秒能 单机redis集群_ruby_02

# 看的出来需要将以前的移除掉
gem sources --remove https://rubygems.org/

单机redis一秒能 单机redis集群_ruby_03

很好! 接下来安装redis接口

gem install redis

很好,又出问题了 !!!

单机redis一秒能 单机redis集群_linux_04

这个问题的原因是ruby版本过低,看一下ruby的版本

单机redis一秒能 单机redis集群_ruby_05

我装的ruby是2.0的,接下来装一个大于2.3的就可以了 开干!

yum remove ruby
# 这样会很慢 推荐迅雷
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz
tar -zxvf ruby-2.5.0.tar.gz
cd ruby-2.5.0
# 配置并制定安装位置
./configure --prefix=/usr/local/ruby
# 编译与安装,这个过程比较慢 如果是服务器的话 就更慢了
make && make install
# 建立软连接 如果不创建软连接 则不能全局使用ruby
ln -s /usr/local/bin/ruby /usr/bin/ruby
ruby -v

结果

单机redis一秒能 单机redis集群_ruby_06

好!使用gem安装redis接口 满怀期待

gem install redis
# 走你

很好又出问题了

单机redis一秒能 单机redis集群_单机redis一秒能_07

不要慌 如法炮制

ln -s /usr/local/ruby/bin/gem /usr/bin/gem

单机redis一秒能 单机redis集群_redis_08

很好,嘴角疯狂上扬!露出了开心的笑容

淦~

gem istall redis

单机redis一秒能 单机redis集群_redis_09

终于到了紧张而又刺激的环节了

# 回到 redis源码目录
# 梅开二度
./redis-trib.rb create --replicas 1 127.0.0.1:7100 127.0.0.1:7200 127.0.0.1:7300 127.0.0.1:7101 127.0.0.1:7201 127.0.0.1:7301

单机redis一秒能 单机redis集群_ruby_10

输入yes 完了之后并不会自动退出去 回车就好啦 小问题

5、测试集群

连接之后,查看集群信息

单机redis一秒能 单机redis集群_单机redis一秒能_11

单机redis一秒能 单机redis集群_ruby_12

注意在使用 redis-cli 进行测试的时候 要加-c参数不然会有一个 erro 的错误 -c是开启集群模式

如上图可以看见在7100插入数据被重定向到7200去了 然后在其他节点拿数据的时候会重定向到7200来,如果再在任何一个端口修改name值 将会重定向到7200来 到这里的话 简单的 centos 版本redis 集群就搭建好了,当然还有windows版本的redis集群可以搭建,那个也不难 O(∩_∩)O哈哈~

还有一种情况没演示 那就是一个redis服务宕机的情况之后

单机redis一秒能 单机redis集群_单机redis一秒能_13

可以看见断了之后就不断重连

单机redis一秒能 单机redis集群_centos_14

并选举新的master

单机redis一秒能 单机redis集群_单机redis一秒能_15

当个好人 翻译一下

630毫秒之后开始选举 0分 2670偏移

授予epoch 7的780b97e975f9052c1a8df2d058e9ce56a2ff0def的故障转移身份验证

我是新的主机

单机redis一秒能 单机redis集群_redis_16

可以很明显的看到780b97e975f9052c1a8df2d058e9ce56a2ff0def就是7101

重启7100

单机redis一秒能 单机redis集群_单机redis一秒能_17

7100变成了从 …他没抢过 O(∩_∩)O~

6、云上使用

一大波坑即将来袭

如果要在云上服务器上使用就得改亿点东西

首先就是改 redis.xxx.conf 配置文件夹里面的东西

之前

port 7100

appendonly yes
appendfilename "appendonly.7100.aof"

# // 如果要设置最大内存空间,可添加如下两句
maxmemory 200mb
maxmemory-policy allkeys-lru

cluster-enabled yes
cluster-config-file nodes-7301.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

现在,因为要允许所有ip连接,所以得关闭安全模式,绑定0.0.0.0,并设置密码,两个都要设置哦,如果不设置的话可以试试哦 ┏ ( ˘ω˘ )┛

port 7100

appendonly yes
appendfilename "appendonly.7100.aof"

# // 如果要设置最大内存空间,可添加如下两句
maxmemory 200mb
maxmemory-policy allkeys-lru
# 不限制ip
bind 0.0.0.0
# 将安全模式关闭掉
protected-mode no
# 设置密码
requirepass xxx
# 集群密码
masterauth xxx
cluster-enabled yes
cluster-config-file nodes-7100.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

然后把所有集群文件夹里面的 .aof .rdb nodes.xxx.conf 文件删除掉

# 杀掉所有相关进程
ps -ef | grep redis
# 或者一个一个关
./redis-cli -h 127.0.0.1 -p 7100 shutdown

关掉进程之后再次一个一个启动 再次启动的时候可以在启动的时候携带密码 也可以不携带密码 在进去之后再进行验证,但是必须得验证密码。

启动完毕之后问题又来了:如果Redis设定了密码,那么通过 redis-trib.rb 脚本创建集群时,是会类似这样的错误的:[ERR] Sorry, can’t connect to node ...:7100

这是因为redis-trib.rb脚本中连接Redis时,并未设定密码,这是个很大的坑。我的解决方法是:修改该脚本中连接Redis时的代码,修改内容如下:如果redis版本相同则一模一样,其他的就不知道了

单机redis一秒能 单机redis集群_centos_18

然后在执行脚本(ip地址变成自己的,下面这个是瞎编的)

# 梅开三度
./redis-trib.rb create --replicas 1 12.101.32.45:7100 12.101.32.45:7200 12.101.32.45:7300 47.101.129.238:7101 12.101.32.45:7201 12.101.32.45:7301

这是你就会发现不会报[ERR] Sorry, can’t connect to node ...:7100这种错误了,新的错误又来了,嘿嘿~

它会一直卡在这儿,就这样一动也不动…

单机redis一秒能 单机redis集群_ruby_19

这种错误,在查阅了资料之后才有了解决方法;

redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口,集群总线端口为redis客户端连接的端口 + 10000,如redis端口为6379, 则集群总线端口为16379。

好的看到这里,逮住就是一阵干 ()

单机redis一秒能 单机redis集群_单机redis一秒能_20

好的,现在再去执行那条命令,这时你就会发现,如丝般顺滑,当然可能还会出现以下问题,解决的方法也很简单,删除掉*.aof ``*.rdb nodes.xxx.conf这些文件,然后杀进程,启动那六个redis服务,这是个体力活,很简单。

单机redis一秒能 单机redis集群_centos_21

# 梅开四度(别慌,这是最后一度了)
./redis-trib.rb create --replicas 1 12.101.32.45:7100 12.101.32.45:7200 12.101.32.45:7300 47.101.129.238:7101 12.101.32.45:7201 12.101.32.45:7301

很好现在变成这样了,好像成功了滴样子

单机redis一秒能 单机redis集群_ruby_22

启动我们的redis-plus升级版客户端,连接一哈试试?

单机redis一秒能 单机redis集群_centos_23

可以先测试一下,点击保存,在点进去,很明显奏效了,就不测试图了,肯定是正确的,嘿嘿,接下来就可以在代码中使用了哦

单机redis一秒能 单机redis集群_centos_24

好的,完结撒花(),这东西坑太多了,键盘敲的手疼。。