Redis6的cluster模型推荐3主3从

先准备3台服务器,每个上面部署2个redis,服务器配置2核2G:

一台服务搭建redis集群 redis6集群搭建_redis

下面在每台服务器安装redis6,每台机器只要安装一次即可,然后分别配置2个端口的conf文件,分别起来即可:

#yum install -y lrzsz
#wget -P /usr/local/src/ https://download.redis.io/releases/redis-6.2.6.tar.gz
#cd /usr/local/src/
#tar zxvf redis-6.2.6.tar.gz

#yum -y install gcc-c++ autoconf automake

安装scl源
#yum install -y centos-release-scl scl-utils-build
安装 gcc9 版本的 gcc、gcc-c++、gdb 工具链(toolchian)
#yum install -y devtoolset-9-toolchain
临时覆盖系统原有的 gcc 引用
#scl enable devtoolset-9 bash
查看 gcc 当前版本
#gcc -v
#cd redis-6.2.6
#make
#make test
cd src && make test
make[1]: Entering directory `/usr/local/src/redis-6.2.6/src'
You need tcl 8.5 or newer in order to run the Redis test
#yum install tcl
#mkdir -p /usr/local/redis
#make install prefix=/usr/local/redis/

查看gcc版本 

一台服务搭建redis集群 redis6集群搭建_redis_02

 安装完成

一台服务搭建redis集群 redis6集群搭建_centos_03

 生成配置文件和日志数据等目录

mkdir -p /usr/local/redis/cluster/conf /usr/local/redis/cluster/data /usr/local/redis/cluster/log

修改解压目录下的redis.conf文件

一台服务搭建redis集群 redis6集群搭建_linux_04

 修改6个:

一台服务搭建redis集群 redis6集群搭建_服务器_05

配置集群模式只要这些配置即可:

# 放行访问IP限制
bind 0.0.0.0
# 端口
port 6371
# 后台启动
daemonize yes
# 日志存储目录及日志文件名
logfile "/usr/local/redis/cluster/log/redis-6371.log"
# rdb数据文件名
dbfilename dump-6371.rdb
# aof模式开启和aof数据文件名
appendonly yes
appendfilename "appendonly-6371.aof"
# rdb数据文件和aof数据文件的存储目录
dir /usr/local/redis/cluster/data
# 设置密码
requirepass ******
# 从节点访问主节点密码(必须与 requirepass 一致)
masterauth ******
# 是否开启集群模式,默认 no
cluster-enabled yes
# 集群节点信息文件,会保存在 dir 配置对应目录下
cluster-config-file nodes-6371.conf
# 集群节点连接超时时间
cluster-node-timeout 15000
# 集群节点 IP
cluster-announce-ip 172.XXX.XXX.52
# 集群节点映射端口
cluster-announce-port 6371
# 集群节点总线端口
cluster-announce-bus-port 16371

 启动6个redis进程:

/usr/local/redis/bin/redis-server /usr/local/redis/cluster/conf/redis-6371.conf
/usr/local/redis/bin/redis-server /usr/local/redis/cluster/conf/redis-6372.conf
/usr/local/redis/bin/redis-server /usr/local/redis/cluster/conf/redis-6373.conf
/usr/local/redis/bin/redis-server /usr/local/redis/cluster/conf/redis-6374.conf
/usr/local/redis/bin/redis-server /usr/local/redis/cluster/conf/redis-6375.conf
/usr/local/redis/bin/redis-server /usr/local/redis/cluster/conf/redis-6376.conf

需要在每台服务器检查是否启动成功: 

一台服务搭建redis集群 redis6集群搭建_redis_06

任意一台服务器上使用客户端运行以下命令:

--cluster-replicas 1:主节点数/从节点数的比例,使用1:1比例,6节点会产生3主3从

/usr/local/bin/redis-cli -a ****** --cluster create \
172.XXX.XXX.52:6371 172.XXX.XXX.52:6372 \
172.XXX.XXX.53:6373 172.XXX.XXX.53:6374 \
172.XXX.XXX.54:6375 172.XXX.XXX.54:6376 \
--cluster-replicas 1

中间会出现选择提示信息,问你对集群拓扑是否满意输入 yes即可。

一台服务搭建redis集群 redis6集群搭建_linux_07

 如上图所示:M表示主节点,S表示从节点,以及完成集群。

检查集群状态
任意一个节点即可,运行以下命令
#/usr/local/redis/bin/redis-cli -a ****** --cluster check XXX:6371
连接至集群某个节点
#/usr/local/bin/redis-cli -c -a 223456 -h 172.17.104.52 -p 6371
> cluster nodes

从命令行查看键值信息: 

一台服务搭建redis集群 redis6集群搭建_centos_08

 通过客户端查看:

一台服务搭建redis集群 redis6集群搭建_服务器_09

 注意:由于集群模式是分哈希槽,key只能在对应的主服务器新增,通过命令行可以查看自动move提示。

需要注意的是集群模式下,某个主宕机,他的从会切换为主,但是需要注意的是,必须最少n/2+1台主节点在才可以提升。

为此我们可以kill -9对应的redis进程id测试即可

一台服务搭建redis集群 redis6集群搭建_centos_10

通过cluster nodes 看出原节点是master fail,他的从节点已经提升为主节点。

一台服务搭建redis集群 redis6集群搭建_linux_11

再把原来的节点起来,这样他成为从节点。 

一台服务搭建redis集群 redis6集群搭建_一台服务搭建redis集群_12

如果主节点挂了,客户端会很快感知到:

一台服务搭建redis集群 redis6集群搭建_redis_13

同时停2个master,这样只剩下一个master就无法做仲裁了: 

一台服务搭建redis集群 redis6集群搭建_服务器_14

 从节点默认是不可以对外提供读写服务的。这样集群就不可用了。