1. 部署逻辑图
本文采用6个节点(3个master,3个slave)部署,一台虚拟机部署主备两个节点,如下图所示,这样的好处是有一台虚拟机挂了,整个集群能够正常使用。
2. Redis安装
2.1 下载安装包
进入172.23.11.163这台虚拟机,创建并进入/usr/local/software目录,下载redis文件包,并解压到当前目录。
wget http://download.redis.io/releases/redis-3.2.11.tar.gz
tar –xvf redis-3.2.11.tar.gz
2.2 编译源文件
cd redis-3.2.11
make
若是报下面的错,请用下面的命令
make MALLOC=libc
然后进行install,完成后,会在redis-cluster目录下生成一个bin目录。
make install PREFIX=/usr/local/software/redis-cluster
进入redis-cluster,重命名bin为redis-3.2.11-node01,并拷贝redis.conf文件到当前目录。
cd ../redis-cluster
mv bin redis-3.2.11-node01
cp /usr/local/software/redis-3.2.11/redis.conf redis-3.2.11-node01/
2.3 修改master配置
进入redis-3.2.11-node01目录,找到redis.conf文件,修改如下配置:
port 6379
cluster-enabled yes
cluster-node-timeout 5000
appendonly yes
daemonize yes
2.4 slave文件创建及配置修改
拷贝一份,作为node03的slave。
cd /usr/local/software/redis-cluster/
cp -r redis-3.2.11-node01 redis-3.2.11-node03-slave
进入redis-3.2.11-node03-slave目录,找到redis.conf文件,修改如下配置:
port 6380
cluster-enabled yes
cluster-config-file nodes-6380.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
2.5 其他虚拟机redis的部署
将redis-3.2.11-node03-slave,redis-3.2.11-node01两个目录拷贝到172.23.11.186、172.23.11.188
cd /usr/local/software/redis-cluster/
scp redis-3.2.11-node01 root@172.23.11.186:/usr/local/software/redis-cluster/redis-3.2.11-node02
scp redis-3.2.11-node03-slave root@172.23.11.186:/usr/local/software/redis-cluster/ redis-3.2.11-node01-slave
scp redis-3.2.11-node01 root@172.23.11.188:/usr/local/software/redis-cluster/redis-3.2.11-node03
scp redis-3.2.11-node03-slave root@172.23.11.188:/usr/local/software/redis-cluster/ redis-3.2.11-node02-slave
2.6 启动redis
cd /usr/local/software/redis-cluster/redis-3.2.11-node01
./redis-server redis.conf
cd /usr/local/software/redis-cluster/ redis-3.2.11-node03-slave
./redis-server redis.conf
查看进程是否启动,若能看到6379和6380两个端口的进程,说明启动成功了。
ps –ef | grep redis
3. cluster配置
3.1 拷贝ruby脚本
cp /usr/local/software/redis-3.2.11/src/redis-trib.rb /usr/local/software/redis-cluster/ redis-3.2.11-node01
3.2 安装ruby及其依赖库
wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.2.gem
yum install ruby
yum install rubygems
gem install redis-3.2.2.gem
安装完成后,使用help命令查看redis-trib.rb提供的管理功能命令。 3.2 创建master节点
使用redis-trib.rb提供的create命令创建节点
./redis-trib.rb create 172.23.11.163:6379 172.23.11.186:6379 172.23.11.188:6379
因为我们自己指定每个master对应的slave,所以命令中省去了对slave的配置,只创建master节点,若是使用系统自动分配的方式,采用如下命令,则步骤3.3可以省略
redis-trib.rb create --replicas 1 172.23.11.163:6379 172.23.11.186:6379 172.23.11.188:6379 172.23.11.163:6380 172.23.11.186:6380 172.23.11.188:6380
从图中可以看到,成功创建了3个Master节点,列出了每个master的master id,ip,端口以及存储的slots区间
3.3 创建slave节点
使用add-node命令添加节点,下面命令给67bf51cd896ff2d4774f4653d50d092e877ce160这个master添加了一个slave:172.23.11.163:6380。
./redis-trib.rb add-node --slave --master-id 67bf51cd896ff2d4774f4653d50d092e877ce160 172.23.11.163:6380 172.23.11.188:6379
另外两个master用同样的方法增加slave,注意master id不要搞错就好了。
3.4 check集群
使用check命令查看整个集群状态
./redis-trib.rb check 172.23.11.163:6379
4. 集群测试
4.1 基本操作测试
测试采用redis-cli –c 命令连接任一台master节点,如下图,添加key时会提示写到了哪个节点上,连接到指定的节点即可查出数据,执行del命令时,会重定向到存储数据的几点。同时,注意select命令是没用的,因为redis cluster只支持一个数据库,及database 0。
4.2 集群故障切换测试
首先kill掉188的master节点,该master节点的slave在163:6380,它挂掉后163:6380应该会被切换成master,如下图
然后,启动188:6379,它失去了master地位,只能充当163:6380的slave了。
结束语
至此,整个集群就搭建起来了,若想重新部署整个集群,删除各个节点目录下的aof,rdb,redis.conf文件中cluster-config-file配置项配置的文件,重新执行集群创建流程即可。