redis集群搭建与管理

两台虚拟机(CentOS7)六个节点测试

集群安装

1.准备

yum -y install wget  //安装wget
cd /usr/local 
mkdir software  //创建文件夹

2.下载解压

cd software
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz

3.编译安装

cd software
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz

4.创建redis节点

cd /usr/local
mkdir redis_cluster 创建redis集群目录
mkdir 7000 7001 7002  在redis_cluster目录下创建三个节点  对应端口分别是7000 7001 7002
cp /usr/local/software/redis-3.2.1/redis.conf /7000 拷贝配置文件至7000目录下
cp /usr/local/software/redis-3.2.1/redis.conf /7001 拷贝配置文件至7001目录下
cp /usr/local/software/redis-3.2.1/redis.conf /7002 拷贝配置文件至7002目录下

分别对7000 7001 7002中的配置文件redis.conf做一下修改就可以了

daemonize    yes                          //redis后台运行
pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7002,7003
bind  192.168.67.128                      //虚拟机本机ip
port  7000                                //端口分别7000,7001,7002
cluster-enabled  yes                      //开启集群
cluster-config-file  nodes_7000.conf      //集群配置 配置文件首次启动自动生成7000,7001,7002
cluster-node-timeout  5000                //请求超时  设置5秒够了
appendonly  yes                           //记录集群修改日志

在另一台虚拟机上创建3个节点:对应的端口改为7003,7004,7005.配置对应的改一下就可以了。

5.查看服务

ps -ef | grep redis   #查看是否启动成功
netstat -tnlp | grep redis #可以看到redis监听端口

集群创建

1.环境准备

前面已经准备好了搭建集群的redis节点,接下来我们要把这些节点都串连起来搭建集群。
官方提供了一个工具:redis-trib.rb(/usr/local/redis-3.2.1/src/redis-trib.rb) 看后缀就知道这鸟东西不能直接执行,它是用ruby写的一个程序,所以我们还得安装ruby.
yum -y install ruby ruby-devel rubygems rpm-build 
再用 gem 这个命令来安装 redis接口    gem是ruby的一个工具包.

gem install redis    

两台虚拟机都需要安装。

2.创建

/usr/local/software/redis-3.2.1/src/redis-trib.rb  create  --replicas 1  192.168.67.128:7000 192.168.67.128:7001 192.168.67.128:7002 192.168.67.129:7003 192.168.67.129:7004 192.168.67.129:7005

3.失败解决办法:

1.检查redis.conf的bind是否绑定本机ip(默认是127.0.0.1)

2.检查另一台虚拟机的端口是否开放

  --在192.168.67.128上执行 /usr/local/bin/redis-cli -h 192.168.67.129

如果不能连接 则修改192.168.67.129的防火墙设置

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

再次重试即可成功。

3.如果失败提示创建的节点不为空

[ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) 
or contains some key in database 0.
   

  删除之前生成的nodes_*.conf  appendonly.aof dump.rdb等文件重试。

  如果还不行 登录要创建的节点 redis-cli -c -h 192.168.67.128 -p 7000 刷新数据库

92.168.67.128 :7000> flushdb

92.168.67.128 :7000> flushall   //尼玛这里才是终极大boss

92.168.67.128 :7000>cluster reset soft

如果还不行,pkill -9 redis 删除redis所以进程 重新启动创建重试。

测试

登录集群节点 redis-cli -c -h 192.168.67.128 -p 7000 
set hello helloworld
set a abc
set zhb haiboz
切换到对应节点 get a
可以正确获取到存储的信息

节点管理

1.新增master节点

新建8000目录并拷贝redis.conf 修改配置文件
启动新节点redis-server redis-cluster/8000/redis.conf
将新节点添加至集群 software/redis-3.2.1/src/redis-trib.rb add-node 192.168.67.128:8000 192.168.67.128:7000
注意:192.168.67.128:8000  为新增节点 192.168.67.128:7000为集群任意节点
登录其中某一节点 redis-cli -c =h 192.168.67.128 -p 7000 查看集群所有节点 cluster nodes 加入成功则集群中能显示新的master节点
使用software/redis-3.2.1/src/redis-trib.rb check 192.168.67.128:8000检查发现,此时该几点为0 slots即没有分配可使用的槽

为空节点分配槽

software/redis-3.2.1/src/redis-trib.rb  reshard 127.192.67.128:7000

// 提示要迁移的slots的数量,这里输入500
How many slots do you want to move (from 1 to 16384)? 500
// 提示指定为哪个node-id分配slot,这里输入新增的node
What is the receiving node ID? d166533eb1636f90d797bce6d4faf9706421b720
// 选择指定slot的来源
// all->代表从所有的master中重新分配
// done-> 数据要提取slot的master节点id,最后用done结束 
Please enter all the source node IDs.
  Type 'all' to use all the nodes assource nodes for the hash slots.
  Type 'done' once you entered allthe source nodes IDs.
// 这里我们选择all即可
Source node #1:all
// 输入yes之后,开始进行slots的分配和数据的移动
Do you want to proceed with the proposed reshard plan (yes/no)? yes


如果失败提示:

/usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb:121:in `call': ERR Unknown node f7f96c100134b2f1473baecaf65a763b34dd20c0 (Redis::CommandError)

这个错误的解决方法待定------

如果失败提示:

[WARNING] Node 192.168.67.128:8000 has slots in importing state (5461).
[WARNING] The following slots are open: 5461

尝试修复问题节点 redis-trib.rb fix 192.168.67.128:8000

2.新增slave节点

前面步骤与新增master节点一样,启动节点 添加到集群

然后登录到新增节点 [root@localhost local]# redis-cli -c -h 192.168.67.128 -p 8001

为新节点指定master节点192.168.67.128:8001> cluster replicate 1b25ed2cf94c2c4b8cd80be516c8980c51087235

查看集群所以节点就可192.168.67.128:8001> cluster nodes

3.删除节点

1.删除master节点

需要先把其中的hash槽转移到其他master节点,在执行删除
software/redis-3.2.1/src/redis-trib.rb reshard192.168.67.128:7000
提示转移多少个槽  填入需要删除的节点的槽数
然后提示接受槽的节点 填入另外一一个master节点id
然后提示从哪个槽转移出 这时不能填all  必须要填想要删除的哪个节点的id
然后后填入done
最有按提示填入yes,至此,节点槽转移完毕
然后即可执行删除 software/redis-3.2.1/src/redis-trib.rb del-node 192.168.67.128:7001  69878edaef7701c1b10758881cc38cf1a0bea7f9
格式为redis-trib.rb del-node  节点ip:port  节点id

2.删除slave节点  

直接执行以上删除命令即可。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值