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)上操作
- 下载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
- 新建集群配置目录
mkdir -p /usr/environment/redis-cluster/6751 /usr/environment/redis-cluster/6752
- 将解压后的文件中的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一定要大写
make或make install时出现如下错误:
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
- 进入/usr/local,复制bin文件到6751,6752目录下
cd /usr/local
cp -r bin /usr/environment/redis-cluster/6751
cp -r bin /usr/environment/redis-cluster/6752
-
进入redis-cluster目录,修改redis.conf并分别拷贝到6751,6752
修改配置文件内容如下:
1)屏蔽限制本地访问, 将bind 127.0.0.1 修改为 bind 0.0.0.0
2) protected-mode保护模式从yes改为no,实现免密登录
3)daemonize后的no改为yes
4)去掉cluster-enabled yes 前面的注释
5)去掉cluster-node-timeout 前面的注释
6)port后的端口改为6751
7)将运行的pid路径改为对应的端口号便于管理,将redis.conf文件,复制到对应的目录下
cp redis.conf 6751
8)修改node配置
cluster-config-file nodes-6751.conf
# 修改为对应的节点ID
9)再次编辑redis.conf 将port参数修改 6751 ==> 6752,复制到对应目录下.
sed -i 's/6751/6752/g' redis.conf
cp redis.conf 6752
- 启动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目录,否则默认目录是 ./ 需要改成对应的绝对路径,否则会造成路径冲突,导致启动失败
查看启动的服务:
也可以用RDM连接测试:
-
直接将master中的集群配置复制到其他两个服务器即可,需要注意的是,需要设置对应的端口与目录
scp -r /usr/environment/redis-cluster/ root@slave1:/usr/environment scp -r /usr/environment/redis-cluster/ root@slave2:/usr/environment
效果如下:
第一台(master)
第二台(slave1):
第三台(slave2):
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
参数说明:
--cluster 集群管理命令 后面可以执行集群相关的命令
--cluster-replicas 1 代表每个Master携带一个Slave
create 创建集群命令
4 客户端测试
开启客户端 链接任意一个Master节点
redis-cli -h 10.1.24.128 -c -a 密码 -p 端口
参数:
-c: 连接到集群
我们可以看到,当我们set一个键值对的时候,Redis会自动为我们的key计算CRC16值,然后对16384取模,获取key对应的hash slot,然后通过判断该槽被那个Master所占用,帮我们重定向到那个Master节点,将键值对存入。
查看集群信息:
cluster nodes
通过RDM的连接图标可以明显区别集群连接和非集群连接的区别: