概述
由于业务需要,需要把之前的分布式架构调整成微服务,把老项目迁移到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