Redis 多服务器集群搭建


Redis 多服务器集群搭建

近期,想到之前使用的Redis集群测试使用的是单服务器上的伪集群,重温《Redis深度历险-核心原理与应用实践》的案例,觉得还是搭建一下多服务器集群来玩一玩会更有感触。

常规操作,记录一下搭建集群的过程。

1 条件

  • 基于redis6.0.9版本进行集群的搭建
  • 集群要求至少六个节点,即每个主节点配置1个从节点,本集群是使用了3个主节点并每个下面挂一个从节点,三个主节点分布在3台服务器上。

集群配置信息如下:

服务器 Master Slave
10.1.24.128(服务器名master) 6751 6752
10.1.24.129(slave1) 6751 6752
10.1.24.130(slave2) 6751 6752

端口名为什么要叫675*呢?因为扫地生原名的谐音是675,所以读者可以自定义端口名。

2 集群配置

在第一台服务器(10.1.24.128)上操作

  1. 下载redis源码包并解压
cd /usr/enviroment

wget  -c  http://download.redis.io/releases/redis-6.0.9.tar.gz

tar  -zxvf  redis-6.0.9.tar.gz
  1. 新建集群配置目录
mkdir  -p  /usr/environment/redis-cluster/6751   /usr/environment/redis-cluster/6752

image-20211224170341277

  1. 将解压后的文件中的redis.conf配置文件拷贝到集群目录之下 并执行redis安装命令
cd  redis-6.0.9

cp redis.conf  /usr/environment/redis-cluster

make  install  # 注意 gcc版本与Redis版本的冲突解决,如果没有指定路径,则编译后Redis的bin默认在/usr/local,也可以 make install PREFIX=/xx/xx 来指定编译后Redis的bin存放路径,注意这里的PREFIX一定要大写

image-20211224171350552

make或make install时出现如下错误:

image-20211224161649096

gcc版本问题,新版本的,Redis6.0以上,需要更高版本的gcc,而centOS 7自带的GCC版本往往不符合。

解决方法:

#升级到 5.3及以上版本
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
 
scl enable devtoolset-9 bash
 
#注意:scl命令启用只是临时的,推出xshell或者重启就会恢复到原来的gcc版本。
#如果要长期生效的话,执行如下:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
  1. 进入/usr/local,复制bin文件到6751,6752目录下
cd  /usr/local

cp  -r  bin  /usr/environment/redis-cluster/6751

cp  -r  bin  /usr/environment/redis-cluster/6752
  1. 进入redis-cluster目录,修改redis.conf并分别拷贝到6751,6752

    修改配置文件内容如下:

 1)屏蔽限制本地访问, 将bind 127.0.0.1 修改为 bind 0.0.0.0

image-20211224172425773

2) protected-mode保护模式从yes改为no,实现免密登录

image-20211224172542353

3)daemonize后的no改为yes

image-20211224172818654

4)去掉cluster-enabled yes 前面的注释

image-20211224172938344

5)去掉cluster-node-timeout 前面的注释

image-20211224173107341

6)port后的端口改为6751

image-20211224172653512

7)将运行的pid路径改为对应的端口号便于管理,将redis.conf文件,复制到对应的目录下

image-20211224173403513

cp  redis.conf  6751

8)修改node配置

cluster-config-file nodes-6751.conf
# 修改为对应的节点ID

image-20211224174404794

9)再次编辑redis.conf 将port参数修改 6751 ==> 6752,复制到对应目录下.

sed  -i  's/6751/6752/g'  redis.conf

cp  redis.conf  6752
  1. 启动redis服务
/usr/environment/redis-cluster/6751/bin/redis-server /usr/environment/redis-cluster/6751/redis.conf

 /usr/environment/redis-cluster/6752/bin/redis-server /usr/environment/redis-cluster/6752/redis.conf

注意点: 在启动服务之前要修改配置文件中对应的dump dir目录,否则默认目录是 ./ 需要改成对应的绝对路径,否则会造成路径冲突,导致启动失败

查看启动的服务:

image-20211224175014042

也可以用RDM连接测试:

image-20211224175153152

  1. 直接将master中的集群配置复制到其他两个服务器即可,需要注意的是,需要设置对应的端口与目录

    scp -r  /usr/environment/redis-cluster/ root@slave1:/usr/environment
    
    scp -r  /usr/environment/redis-cluster/ root@slave2:/usr/environment
    

效果如下:

第一台(master)

image-20211224180214474

第二台(slave1):

image-20211224180250276

第三台(slave2):

image-20211224180317641

3 集群搭建

使用Redis客户端执行命令:

/usr/environment/redis-cluster/6751/bin/redis-cli --cluster create --cluster-replicas 1 10.1.24.128:6751 10.1.24.128:6752 10.1.24.129:6751 10.1.24.129:6752 10.1.24.130:6751 10.1.24.130:6752

注意:上述指令中的IP地址不能用主机名代替,因为redis对主机名的识别不是很友好,,如果改成下面这个会出现错误:

 /usr/environment/redis-cluster/6751/bin/redis-cli --cluster create --cluster-replicas 1 master:6751 master:6752 slave1:6751 slave1:6752 slave2:6751 slave2:6752

image-20211224181426211

参数说明:

--cluster 集群管理命令 后面可以执行集群相关的命令

--cluster-replicas 1 代表每个Master携带一个Slave

create 创建集群命令

image-20211224181228898

image-20211224181254913

4 客户端测试

  开启客户端 链接任意一个Master节点

redis-cli -h 10.1.24.128 -c -a 密码 -p 端口

参数:

-c: 连接到集群

image-20211224182017706

我们可以看到,当我们set一个键值对的时候,Redis会自动为我们的key计算CRC16值,然后对16384取模,获取key对应的hash slot,然后通过判断该槽被那个Master所占用,帮我们重定向到那个Master节点,将键值对存入。

查看集群信息:

cluster nodes

image-20211224182048971

通过RDM的连接图标可以明显区别集群连接和非集群连接的区别:

image-20211224201017530

5 参考文章