系统环境:
CentOS6.7 X86_64
双机6节点:
node1: 192.168.2.11
node2: 192.168.2.12
node3:192.168.2.13
redis cluster必须用3.X版本的才能支持。我们实验中使用的是3.0.1版本的redis。
安装redis
安装redis的过程略过。
安装ruby及相关redis依赖组件
#!/bin/bash
# 安装Ruby2.3.0,安装到/usr/local/ruby目录下
# 安装rubygems、安装redis-rb组件
# 先安装相关的devel包
yum install zlib zlib-developenssl openssl-devel -y
wait
# 编译安装 ruby2.3.0
tar xf src/ruby-2.3.0.tar.gz -Csrc/
cd src/ruby-2.3.0
./configure --enable-shared--enable-pthread --prefix=/usr/local/ruby
make && make install
wait
echo 'exportPATH=/usr/local/ruby/bin:$PATH' > /etc/profile.d/ruby.sh
source /etc/profile.d/ruby.sh
# 安装 rubygems
/usr/local/ruby/bin/gem installrubygems-update
update_rubygems
wait
# 安装redis-rb
/usr/local/ruby/bin/gem installredis
wait
# 一些补充说明:
# client.rb的存放路径:
#/usr/local/ruby/lib/ruby/gems/2.3.0/gems/redis-3.3.1/lib/redis/client.rb
# redis 3.X cluster 如果添加密码认证的话,需要修改client.rb里面的password
配置redis cluster的基本操作
node1、node2上都运行3个节点
node1上如下操作:
cd /usr/local/
mkdir redis_cluster
cd redis_cluster
mkdir 7000 7001 7002
cp /usr/local/redis/etc/redis.conf7000/
vim 7000/redis.conf 修改的地方如下:
pidfile /var/run/redis7000.pid
port 7000
logfile "./redis.log"
dir /usr/local/redis_cluster/7000/
appendonly yes
cluster-enabled yes # 注意一定要开启这个集群功能
同样的操作,将redis.conf 复制到7001 7002文件夹下,并修改下各自的配置文件
sed -i 's#7000#7001#'/usr/local/redis_cluster/7001/redis.conf
sed -i 's#7000#7002#' /usr/local/redis_cluster/7002/redis.conf
配置文件都修改好后,启动3个redis实例。
redis-server/usr/local/redis_cluster/7000/redis.conf
redis-server/usr/local/redis_cluster/7001/redis.conf
redis-server/usr/local/redis_cluster/7002/redis.conf
ss -lnt
可以看到redis不仅监听在7000~7002端口上,还开启了700X+10000的端口号。
700X是用于客户端访问的
1700X是用于集群内部节点之间访问的
node2上如下操作:
cd /usr/local/
mkdir redis_cluster
cd redis_cluster
mkdir 7003 7004 7005
vim 7003/redis.conf 修改的地方如下:
pidfile /var/run/redis7003.pid
port 7003
logfile "./redis.log"
dir /usr/local/redis_cluster/7003/
appendonly yes
cluster-enabled yes # 注意一定要开启这个集群功能
同样的操作,将redis.conf 复制到7004 7005文件夹下,并修改下各自的配置文件
redis-server/usr/local/redis_cluster/7003/redis.conf
redis-server/usr/local/redis_cluster/7004/redis.conf
redis-server /usr/local/redis_cluster/7005/redis.conf
ss -lnt|grep 700
node1和node2都启动好了之后,我们可以执行下面的操作:
说明:
我编译安装的redis,不知为何在/usr/local/redis/下所有文件夹里都没有redis-trib.rb 这个文件。因此我是从原始的安装包把src/redis-trib.rb拷贝到/usr/local/redis/bin里面的。
cp /root/redis-3.0.1/src/redis-trib.rb /usr/local/redis/bin
然后在node1上执行:
redis-trib.rb create --replicas 1192.168.2.11:7000 192.168.2.11:7001 192.168.2.11:7002 192.168.2.12:7003192.168.2.12:7004 192.168.2.12:7005
上面的命令含义:replicas 是给master分配slave个数的参数,我们给的参数是1 ,那每个master就有一个从节点
可以看到新加入的这个节点没有分配数据,因此我们需要迁移下数据。见下面的数据的reshard操作:
数据的reshard
我们可以在线进行reshard,目的是让slot重新按照我们的规则分配,这样能一定程度。的解决数据分配不均匀的情况。如果你先增加了一个节点,也可以用reshard的方式让一定数目的slot迁移过去…. 这样解决了新节点的slot分配….
迁移的方法:redis-trib.rb reshard 192.168.2.12:7005
说明:redis-trib.rb reshard 要迁移的集群中的任意节点IP:PORT
输入上面的命令后,自动出现“How many slots do you want tomove (from 1 to 16384)” 这个是问我们要迁移多少个slot到7006这个新节点。
可以算一下,16384/4=4096,也就是说,为了平衡分配起见,我们需要移动4096个槽点到7006上。
输入4096后,系统自动提示我们输入要接收这些slot数据的主机的ID是多少? id就是我们check时候看到的那个一长串字符串。
接着, redis-trib 会向你询问重新分片的源节点(source node),也即是,要从哪个节点中取出4096个哈希槽,并将这些槽移动到7006节点上面。
如果我们不打算从特定的节点上取出指定数量的哈希槽,那么可以向redis-trib输入all,这样的话,集群中的所有主节点都会成为源节点,redis-trib将从各个源节点中各取出一部分哈希槽,凑够 4096个,然后移动到7006节点上:
Source node #1:all
接下来就开始迁移了,并且会询问你是否确认:
输入 yes 并使用按下回车之后, redis-trib 就会正式开始执行重新分片操作,将指定的哈希槽从源节点一个个地移动到7006节点上面。
迁移完成后,可以执行redis-trib.rb check192.168.2.12:7005 查看下7006的slot数量是多少。
从reids cluster中删除一个redis节点….
root@ubuntu:~/redis-3.0.1/src#./redis-trib.rb del-node 127.0.0.1:7007
给指定的redis master节点添加从节点…
默认add-node是添加主master节点…..
./redis-trib.rb add-node –slave–master-id ’ee05942ee38a56421a07eea01bc6072fe5e23bfd’ 127.0.0.1:7008 127.0.0.1:7000