搭建redis分片集群
第一章:测试环境搭建
1.1、版本信息:
操作系统:CentOS-7-x86_64-Minimal-2009.iso
redis:6.0.8
1.2、地址规划与结构图
地址规划与结构图:
- 每台物理机器有一个主节点(端口20300)
- 每个主节点的从节点在其他物理机上(端口为20301),避免一台物理机挂掉之后,整个redis集群都不好使了
1.3、修改主机名
分别修改3台虚拟机的/etc/hosts文件,添加如下内容
192.168.118.200 node1
192.168.118.201 node2
192.168.118.202 node3
1.4、下载和安装
在线安装:三台服务器都执行一下脚本。
#!/bin/bash
#将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
#创建部署目录
mkdir /opt/redis-cluster
# 切换目录
cd /opt/redis-cluster
#下载redis
wget http://download.redis.io/releases/redis-6.0.8.tar.gz
tar xzf redis-6.0.8.tar.gz
cd redis-6.0.8
# 编译,注意:如果不加MALLOC=libc,会报fatal error: jemalloc/jemalloc.h: 没有那个文件或目录
make MALLOC=libc
# 为redis 创建配置目录
mkdir -p /opt/redis-cluster/redis_2030{0,1}/{conf,pid,logs}
1.5、配置
1.5.1、配置192.168.118.200的master
创建并编辑redis.cnf文件。vim /opt/redis-cluster/redis_20300/conf/redis.cnf。文件内容如下:
# 守护进行模式启动
daemonize yes
# 设置数据库数量,默认数据库为0
databases 16
# 绑定地址,需要修改
bind 192.168.118.200
# 绑定端口,需要修改
port 20300
# pid文件存储位置,文件名需要修改
pidfile /opt/redis-cluster/redis_20300/pid/redis_20300.pid
# log文件存储位置,文件名需要修改
logfile /opt/redis-cluster/redis_20300/logs/redis_20300.log
# RDB快照备份文件名,文件名需要修改
dbfilename redis_20300.rdb
# 本地数据库存储目录,需要修改
dir /opt/redis-cluster/redis_20300
# 集群相关配置
# 是否以集群模式启动
cluster-enabled yes
# 集群节点回应最长时间,超过该时间被认为下线
cluster-node-timeout 15000
# 生成的集群节点配置文件名,文件名需要修改
cluster-config-file nodes_20300.conf
1.5.2、配置192.168.118.200的slave
创建并编辑redis.cnf文件。vim /opt/redis-cluster/redis_20301/conf/redis.cnf。文件内容如下:
# 守护进行模式启动
daemonize yes
# 设置数据库数量,默认数据库为0
databases 16
# 绑定地址,需要修改
bind 192.168.118.200
# 绑定端口,需要修改
port 20301
# pid文件存储位置,文件名需要修改
pidfile /opt/redis-cluster/redis_20301/pid/redis_20301.pid
# log文件存储位置,文件名需要修改
logfile /opt/redis-cluster/redis_20301/logs/redis_20301.log
# RDB快照备份文件名,文件名需要修改
dbfilename redis_20301.rdb
# 本地数据库存储目录,需要修改
dir /opt/redis-cluster/redis_20301
# 集群相关配置
# 是否以集群模式启动
cluster-enabled yes
# 集群节点回应最长时间,超过该时间被认为下线
cluster-node-timeout 15000
# 生成的集群节点配置文件名,文件名需要修改
cluster-config-file nodes_20301.conf
*192.168.118.201和192.168.118.202的master和slave跟192.168.118.200的master和slave一样。bind配置项改成对应的ip
1.6、启动集群
每个节点上执行以下2条命令进行服务启动:
/opt/redis-cluster/redis-6.0.8/src/redis-server /opt/redis-cluster/redis_20300/conf/redis.cnf
/opt/redis-cluster/redis-6.0.8/src/redis-server /opt/redis-cluster/redis_20301/conf/redis.cnf
集群模式启动,进程后会加上[cluster]的字样:
1.7、加入集群
现在虽然说每个服务都成功启动了,但是彼此之间并没有任何联系。
所以下一步要做的就是将6个服务加入至一个集群中,如下操作示例(在任意节点执行都行):一行一行执行
/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node1 -p 20300
#如果已经配置了密码。这里需要先执行:AUTH 你的密码
cluster meet 192.168.118.201 20300
cluster meet 192.168.118.202 20300
cluster meet 192.168.118.200 20301
cluster meet 192.168.118.201 20301
cluster meet 192.168.118.202 20301
结果如图:
1.8、配置主从
6个服务之间并没有任何主从关系,所以现在进行主从配置,记录下上面cluster nodes命令输出的node-id信息,只记录主节点。
配置node1的20301。从于node2的20300。步骤如下:
a、连接node1的20301:/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node1 -p 20301
b、执行:CLUSTER REPLICATE bf6fe478d224fcabbbc29be0fab27f75bf42114f
c、推出连接:exit
配置node2的20301。从于node3的20300。步骤如下:
a、连接node2的20301:/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node2 -p 20301
b、执行:CLUSTER REPLICATE 7cf1281fd175d93bfbaa130d0b3751866d7e37fb
c、推出连接:exit
配置node3的20301。从于node1的20300。步骤如下:
a、连接node3的20301:/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node3 -p 20301
b、执行:CLUSTER REPLICATE 3f18f58b536046b66ef8127a8aefd347a0f957ca
c、推出连接:exit
再次查看节点信息:
1.9、分配槽位
接下来我们要开始分配槽位了,为了考虑今后的写入操作能分配均匀,槽位也要进行均匀分配。
仅在Master上进行分配,从库不进行分配,仅做主库的备份和读库使用。
槽位分配情况如下,槽位号从0开始,到16383结束,共16384个槽位,均匀分配:
节点 | 槽位 |
node1 | 0~5461 |
node2 | 5462~10922 |
node3 | 10923~16383 |
/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node1 -p 20300 cluster addslots {0..5461}
/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node2 -p 20300 cluster addslots {5462..10922}
/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node3 -p 20300 cluster addslots {10923..16383}
检查分配槽位后集群是否正常:如果槽位全部分配完毕应该是ok,不然的话就检查你分配槽位时是否输错了数量。
1.10、测试
写入:在node1的20300写入
读取:在node3的20301读取
1.11、设置密码
所有的redis.cnf都添加一下内容
#设置密码
masterauth augurRedis@2022
requirepass augurRedis@2022
重新启动redis集群