redis-cluster搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37038498/article/details/89159573

1.安装redis-cluster

1.1环境介绍

  • 共使用三台centos服务器,每台服务器各分部一台master节点,每台主节点都有其他主节点的从节点,保证了即使有两台服务器意外停止运行,redis-cluster也可以保证正常运行,不会丢失数据

1.2下载安装(分别在三台服务器上执行)

1.2.1安装ruby环境(redis-trib.rb使用ruby编写)

yum install  rubygems

tar zxf ruby-2.4.4.tar.gz
cd ruby-2.4.4
./configure
make
make install  

1.2.2安装redis

tar zxf redis-3.2.12.tar.gz
cd redis-3.2.12
make
make install  PREFIX=/usr/local/redis-cluster

1.2.3安装redis gem

gem install redis
  • 如果有低版本的ruby存在会提示安装失败,执行以下操作
mv /usr/bin/ruby /usr/bin/ruby_old
cp /usr/local/bin/ruby /usr/bin/

1.3配置redis服务(分别在三台服务器上执行)

cp /usr/local/src/redis-3.2.12/redis.conf /usr/local/redis-cluster/

#生成配置模板文件
cd /usr/local/
sed -i "s/^daemonize no/daemonize yes/"  redis-cluster/redis.conf
sed -i "s/^appendonly no/appendonly yes/"  redis-cluster/redis.conf
echo  "cluster-enabled yes"  >> redis-cluster/redis.conf
echo  "cluster-config-file nodes.conf"  >> redis-cluster/redis.conf
echo  "cluster-node-timeout 5000"  >> redis-cluster/redis.conf


cp -r redis-cluster redis_01
cp -r redis-cluster redis_02
cp -r redis-cluster redis_03

sed -i "s/^port 6379/port 7001/" redis_01/redis.conf
sed -i "s/^port 6379/port 7002/" redis_02/redis.conf
sed -i "s/^port 6379/port 7003/" redis_03/redis.conf

#启动
cd /usr/local/redis_01
./bin/redis-server ./redis.conf

cd /usr/local/redis_02
./bin/redis-server ./redis.conf

cd /usr/local/redis_03
./bin/redis-server ./redis.conf

1.3.1 配置redis-cluster(自动配置redis,从库是随机分配的,)

cp /usr/local/src/redis-3.2.12/src/redis-trib.rb  /usr/local/redis-cluster/bin/
./redis-trib.rb create --replicas 2    192.168.1.124:7001  192.168.1.124:7002  192.168.1.124:7003   192.168.1.116:7001  192.168.1.116:7002  192.168.1.116:7003    192.168.1.234:7001   192.168.1.234:7002  192.168.1.234:7003
  • –replicas :从库数量

2.redis-cluster相关操作

2.1修改从库所属master

因为从库是系统随机分配的,极大的几率出现主从在同一台服务器上,提升了使用风险

  • 查询node节点信息
redis-cli -h <IP> -p <port> cluster nodes
redis-cli -h 192.168.1.124 -p 7002 cluster nodes

在这里插入图片描述

  • 红色标记为主节点
  • 绿色标记为主从生成到了同一台服务器上(存在风险)
  • 我们需要把紫色标记的这两行记录的master-id进行重新赋值(如下)

192.168.1.234:7002 > d720995b15d5451fa1a2b6665bd249e90daa93b7

[root@centos7-234 redis_03]# ./bin/redis-cli -h 192.168.1.234 -p 7002
192.168.1.234:7002> cluster replicate  d720995b15d5451fa1a2b6665bd249e90daa93b7
OK

192.168.1.124:7003 > c5578947475750bd1df722abf001bd74f5c0af70

[root@Dev-Redis-124 redis_01]# redis-cli -c -h 192.168.1.124 -p 7003
192.168.1.124:7003> cluster replicate  c5578947475750bd1df722abf001bd74f5c0af70
OK

修改后再次查看

在这里插入图片描述

此时主从已经分布到不同的机器上

2.2 测试redis集群高可用

插入测试数据

[root@office_db_02 redis_03]# redis-cli -c -h 192.168.1.116 -p 7001
192.168.1.116:7001> set coco '001'
-> Redirected to slot [13924] located at 192.168.1.234:7001
OK

[root@office_db_02 redis_03]# redis-cli -c -h 192.168.1.234 -p 7001
192.168.1.124:7001> get coco
-> Redirected to slot [13924] located at 192.168.1.234:7001
"001"

停掉两个master节点

[root@office_db_02 redis_03]# redis-cli  -h 192.168.1.234 -p 7001 debug segfault
Error: Server closed the connection

[root@office_db_02 redis_03]# redis-cli  -h 192.168.1.116 -p 7001  debug segfault
Error: Server closed the connection
  • 查看集群状态

在这里插入图片描述
此时116和234 7001端口状态已经为fail,另外两台从库重新选举升级为主库

  • 测试集群是否正常
[root@office_db_02 redis_03]# redis-cli -c -h 192.168.1.124 -p 7002
192.168.1.124:7002> get coco
-> Redirected to slot [13924] located at 192.168.1.116:7003
"001"

数据获取正常

重新拉起116和234的7001端口(此时这两个端口为从库)

  • 启动路径需要在nodes.conf同一级目录(可在配置文件中配置绝对路径)
/usr/local/redis_01
./bin/redis-server redis.conf
  • 查看集群状态

在这里插入图片描述

重新将7001端口改为主库

[root@Dev-Redis-124 redis_01]# redis-cli -c -h 192.168.1.234 -p 7001
192.168.1.234:7001> CLUSTER FAILOVER
OK

[root@Dev-Redis-124 redis_01]# redis-cli -c -h 192.168.1.116 -p 7001
192.168.1.116:7001> CLUSTER FAILOVER
OK
  • 查看集群状态

在这里插入图片描述

此时出现了主从处于统一服务器的状况,采用之前切换从库master-id方法可以解决,若想充分利用redis的特性需要开发修改代码

猜你喜欢

转载自blog.csdn.net/weixin_37038498/article/details/89159573