知识分享 – Docker – 原生、redis-trib,2种方式搭建redis集群

概述

由于业务需要,需要把之前的分布式架构调整成微服务,把老项目迁移到k8s的服务中,再开始编码之前,需要再本地环境里做相应的准备工作,使用docker搭建redis集群,下面介绍原生搭建集群和使用redis-trib.rb搭建集群的两种方式。

Liunx OS : centos7
Redis :redis-5.0.6

原生搭建Redis集群

1.安装 gcc 和 常用工具

yum -y install gcc automake autoconf libtool
 make wget curl git vim initscripts

2.redis官方releases版本地址,http://download.redis.io/releases/去下载你想安装的版本。

wget http://download.redis.io/releases/redis-5.0.6.tar.gz &&
 tar zxf redis-5.0.6.tar.gz && cd redis-5.0.6

3.安装,PREFIX指定的是安装目录

make && make install PREFIX=/usr/local/redis

配置redis集群

1.修改配置文件

把daemonize yes , 设置redis后台运行模式, bind 0.0.0.0,允许任何ip链接访问 ,cluster-enable yes 允许集成,cluster-config-file 如果不指定系统会默认生成配置文件。

cluster-enable yes
daemonize yes
bind 0.0.0.0
cluster-config-file nodes.conf

redis.conf 在安装包的根目录里,为了方便可以复制到redis安装目录里。

cp ~/redis-5.0.6/redis.conf /usr/local/redis/bin/

先把配置好的容器打包成redis镜像,启动3个节点,分别是redis1,redis2,redis3

docker run -itd  -p 7000:7000 -p 6309:6379 
--name redis1  redis:base

docker run -itd  -p 7001:7001 -p 6319:6379 
--name redis2  redis:base

docker run -itd  -p 7002:7002 -p 6329:6379 
--name redis3  redis:base

使用docker network ls命令查看docker网络,使用docker network inspect bridge,查看redis实例的具体ip,创建集群时使用,下面是我本地的IP

redis1 172.17.0.3
redis2 172.17.0.4
redis3 172.17.0.5

登陆到redis里,启动redis,查看进程,多出来一个cluster字段

[root@107e6ac2f51a /]# ps aux
USER       PID %CPU %MEM     TIME COMMAND
 /usr/local/redis/bin/redis-server 0.0.0.0:6379 [cluster]

登陆到其中一个的redis上,创建集群,使用自动分配槽操作,输入yes,–cluster-replicas 是关于从节点的配置选项,创建集群的时候填写的是docker network 中的ip地址。

./redis-cli --cluster create
172.17.0.2:6379
172.17.0.3:6379
172.17.0.4:6379
--cluster-replicas 0

查看node节点,使用CLUSTER NODES命令查看具体信息,想了解更多命令可以使用CLUSTER HELP,命令不区分大小写。

使用cluster nodes查看节点:

3a7cd6396697e53652529458fe237ec0e665bbb6 172.17.0.5:6379@16379 master - 0 1677553881208 3 connected 10923-16383
08ab9df50129ddab8ea1db6ec7ce94508a4e881e 172.17.0.3:6379@16379 myself,master - 0 1677553879000 1 connected 0-5460
f621ea1704db7c7a1f86f2611fe54c2f19c88946 172.17.0.4:6379@16379 master - 0 1677553882226 2 connected 5461-10922

redis-trib.rb搭建redis集群

安装redis的镜像的过程是一样的,这里主要讲解一下redis-trib.rb的安装过程,这次设置的是3主3从。

1.创建网络

docker network create --subnet=172.19.0.0/16 www_default

在启动docker的时候,--net指定host,--ip指定ip。

docker run -itd --name redis-c1 -p 6409:6379
 --net=www_default --ip 172.19.0.2 redis:cluster bash

docker run -itd --name redis-c2 -p 6419:6379
 --net=www_default --ip 172.19.0.3 redis:cluster bash

docker run -itd --name redis-c3 -p 6429:6379
 --net=www_default --ip 172.19.0.4 redis:cluster bash

docker run -itd --name redis-c4 -p 6439:6379
 --net=www_default --ip 172.19.0.5 redis:cluster bash

docker run -itd --name redis-c5 -p 6449:6379
 --net=www_default --ip 172.19.0.6 redis:cluster bash

docker run -itd --name redis-c6 -p 6459:6379
 --net=www_default --ip 172.19.0.7 redis:cluster bash

2.redis-trib.rb安装

安装redis-trib.rb和ruby,为服务器执行命令的是ruby

cp /usr/redis/src/redis-trib.rb /usr/redis/cluster/
cd /usr/redis/cluster/

apt-get install ruby
apt-get install rubygems
gem install redis

创建3台master节点,–replicas 参数代表配置一主一从的节点配置。

./redis-trib.rb create --replicas 1 
172.19.0.2:6379
172.19.0.3:6379 
172.19.0.4:6379
172.19.0.5:6379
172.19.0.6:6379
172.19.0.7:6379 

登陆客户端,查看节点,已经安装好了。

172.19.0.3:6379> cluster nodes
f6c5 172.19.0.7:6379 slave 7b11 0 1677715278855 6 connected
2dc6 172.19.0.6:6379 slave 6dd3 0 1677715276827 5 connected
7b11 172.19.0.4:6379 master - 0 1677715278245 3 connected 10923-16383
f7de 172.19.0.2:6379 master - 0 1677715277842 1 connected 0-5460
6dd3 172.19.0.3:6379 myself,master - 0 0 2 connected 5461-10922
4ac2 172.19.0.5:6379 slave f7de 0 1677715279891 4 connected

至此

至此,2种方式的redis集群就搭建完成了,有一个需要主意的点在这里说明一下。

登陆cluster客户端记得要加-c,命令的输出是./redis-cli -c,如果key在当前节点则ok,如果不在当前节点则返回(error) MOVED错误,如果加入命令集群会进行2次选址,进行Redirected转发。

127.0.0.1:6379> set dsadsa 222
OK
127.0.0.1:6379> set 2213213213213 w
(error) MOVED 2344 172.19.0.2:6379

root@cac6fec70149:/usr/redis/src# ./redis-cli -c
127.0.0.1:6379> set 2213213213213 w
-> Redirected to slot [2344] located at 172.19.0.2:6379
OK

正文完