恭喜能看到这篇博客,本文章从开始到结束,都为实操记录,踩了很多的坑,亲测可用
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
会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes
, redis-trib
就会将这份配置应用到集群当中,让各个节点开始互相通讯,最后可以得到如下信息:
[OK] All 16384 slots covered
如果你是第一次搭建那么这个环节肯定会报错因为
redis-trib
是ruby脚本,这个东西依赖ruby环境所以还得装ruby
4、安装ruby环境
yum install ruby
安装完ruby之后还得通过gem安装redis
接口
# 换源 不然下不下来 后缀是.com (这里是个坑) .org已经停止维护了,当然其他的也不行,只有这个可以 哈哈
gem sources --add https://gems.ruby-china.com/
# 查看换源
gem sources -l
# 看的出来需要将以前的移除掉
gem sources --remove https://rubygems.org/
很好! 接下来安装redis接口
gem install redis
很好,又出问题了 !!!
这个问题的原因是ruby版本过低,看一下ruby的版本
我装的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
结果
好!使用gem安装redis接口 满怀期待
gem install redis
# 走你
很好又出问题了
不要慌 如法炮制
ln -s /usr/local/ruby/bin/gem /usr/bin/gem
很好,嘴角疯狂上扬!露出了开心的笑容
淦~
gem istall redis
终于到了紧张而又刺激的环节了
# 回到 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
输入yes 完了之后并不会自动退出去 回车就好啦 小问题
5、测试集群
连接之后,查看集群信息
注意在使用
redis-cli
进行测试的时候 要加-c参数不然会有一个erro
的错误 -c是开启集群模式如上图可以看见在7100插入数据被重定向到7200去了 然后在其他节点拿数据的时候会重定向到7200来,如果再在任何一个端口修改name值 将会重定向到7200来 到这里的话 简单的
centos
版本redis
集群就搭建好了,当然还有windows版本的redis
集群可以搭建,那个也不难 O(∩_∩)O哈哈~
还有一种情况没演示 那就是一个redis
服务宕机的情况之后
可以看见断了之后就不断重连
并选举新的master
当个好人 翻译一下
630毫秒之后开始选举 0分 2670偏移
授予epoch 7的780b97e975f9052c1a8df2d058e9ce56a2ff0def的故障转移身份验证
我是新的主机
可以很明显的看到780b97e975f9052c1a8df2d058e9ce56a2ff0def就是7101
重启7100
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
版本相同则一模一样,其他的就不知道了
然后在执行脚本(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
客户端连接的端口,而且需要开通集群总线端口,集群总线端口为redis
客户端连接的端口 + 10000,如redis
端口为6379, 则集群总线端口为16379。
好的看到这里,逮住就是一阵干 (▽)
好的,现在再去执行那条命令,这时你就会发现,如丝般顺滑,当然可能还会出现以下问题,解决的方法也很简单,删除掉*.aof ``*.rdb
nodes.xxx.conf
这些文件,然后杀进程,启动那六个redis
服务,这是个体力活,很简单。
# 梅开四度(别慌,这是最后一度了)
./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-plus
升级版客户端,连接一哈试试?
可以先测试一下,点击保存,在点进去,很明显奏效了,就不测试图了,肯定是正确的,嘿嘿,接下来就可以在代码中使用了哦
好的,完结撒花(▽),这东西坑太多了,键盘敲的手疼。。