集群模式架构图
环境说明:三台centos7服务器 + redis5.0.8 + gcc4及以上(三主三从模式)
1.下载redis
http://download.redis.io/releases/ #redis下载网址
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
2.安装gcc(三台机器同时操作)
yum -y install gcc* gcc -v #查看gcc版本信息
3.解压安装(三台机器同时操作)
tar -zxvf redis-5.0.8.tar.gz cd redis-5.0.8/ make && make install PREFIX=/usr/local/redis #编译安装 cp redis.conf /usr/local/redis/bin/redis7001.conf cp redis.conf /usr/local/redis/bin/redis7002.conf cd /usr/local/redis/bin/ && ll #切换到该目录下并查看文件 mkdir /usr/local/redis/{7001,7002} #创建redis数据目录
4.编辑配置文件(三台机器同时操作)
vim redis7001.conf #如下为配置说明,根据需要添加修改
bind 192.168.85.126 //监听本机ip port 7001 //监听端口 protected-mode no //需要不同服务器的节点连通,这个就要设置为 no daemonize yes //redis后台运行 pidfile /var/run/redis_7001.pid //修改pid文件名 logfile "/var/log/redis7001.log" //日志文件,默认为空写入/dev/null cluster-enabled yes //开启集群 cluster-config-file node7001.conf //集群的配置,修改文件名 cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置 dbfilename dump7001.rdb //rdb文件名,默认为dump.rdb,可修改 appendonly no //aof持久化(硬盘缓存到磁盘),开启aof日志 有需要就开启,它会每次写操作都记录一条日志, appendfilename "appendonly.aof" //aof文件名为appendfilename appendfsync everysec //always表示每次写入都执行fsync,no表示永不执行,默认为everysec表示每秒执行一次 replica-read-only yes //副本只读不写 dir /usr/local/redis/7001 //redis工作目录,数据文件存放位置,默认为./ ,可进行修改 requirepass mc123 //设置redis密码 masterauth mc123 //设置集群节点间访问密码,保持跟redis密码一致
vim redis7002.conf #配置参考以上
创建软链接可全局使用redis-server、redis-cli命令:
ln -s /usr/local/redis/bin/redis-server /usr/bin/ ln -s /usr/local/redis/bin/redis-cli /usr/bin/
5.启动各redis节点(三台机器同时操作)
cd /usr/local/redis/bin/ redis-server redis7001.conf redis-server redis7002.conf
ps -ef|grep redis
6.创建集群(任一机器上执行)
redis-cli -a mc123 --cluster create --cluster-replicas 1 192.168.85.126:7001 192.168.85.126:7002 192.168.85.127:7001 192.168.85.127:7002 192.168.85.128:7001 192.168.85.128:7002
- 1) create 表示创建一个redis集群。
- 2) --cluster-replicas 1 表示为集群中的每一个主节点指定一个从节点,即一比一的复制。
查看集群状态:
redis-cli -a mc123 --cluster check 192.168.85.127:7001
7.验证集群
连接某个redis节点:
redis-cli -h 192.168.85.128 -p 7002 -a mc123 -c 192.168.85.127:7001> set name mc //设置键值 OK 192.168.85.127:7001> get name //获取键值 "mc" 192.168.85.127:7001> del name //删除键 (integer) 1 192.168.85.127:7001> flushall //清空redis数据库 OK
- cluster nodes 查看节点列表
- cluster info 查看集群信息
#参数说明:
- -h :主机名或ip
- -p :端口
- -a : redis加密后客户端连接需要-a ,后接密码
- -c : 连接redis集群
8.关闭集群
redis-cli -h 192.168.85.126 -p 7001 -a mc123 shutdown redis-cli -h 192.168.85.127 -p 7001 -a mc123 shutdown redis-cli -h 192.168.85.128 -p 7001 -a mc123 shutdown redis-cli -h 192.168.85.126 -p 7002 -a mc123 shutdown redis-cli -h 192.168.85.127 -p 7002 -a mc123 shutdown redis-cli -h 192.168.85.128 -p 7002 -a mc123 shutdown
9.集群调整
(1)添加新的主节点
假设要添加新的节点“192.168.85.126:7003”,先单机配置并启动该节点,然后执行命令(“192.168.85.126:7001”为集群中任一可用的节点)
redis-cli -a mc123 --cluster add-node 192.168.85.126:7003 192.168.85.126:7001
7003是新增的节点,而7001是已存在的节点(可为master或slave)。如果需要将7003变成某master(假如为3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e)的slave节点,只需要在7003上执行redis命令(前提:这个master没有负责任何slots,亦即需为一个空master):
redis-cli -h 192.168.85.126 -p 7003 cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
新加入的master节点上没有任何数据,需重新分配数据:
redis-cli --cluster reshard 192.168.85.126:7003
(2)添加新的从节点
redis-cli --cluster add-node 192.168.168.85.126:7003 192.168.85.126:7001 --cluster-slave
“192.168.85.126:7003”为新添加的从节点,“192.168.85.126:7001”可为集群中已有的任意节点,这种方法随机为7003指定一个master,如果想明确指定master,假设目标master的ID为“3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e”,则:
redis-cli --cluster add-node 192.168.85.126:7003 192.168.85.126:7001 --cluster-slave --cluster-master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
(3)删除节点
从集群中删除一个节点命令格式:
redis-cli --cluster del-node 192.168.85.126:7001 `<node-id>`
“192.168.85.126:7001”为集群中任意一个非待删除节点,“node-id”为待删除节点的ID。如果待删除的是master节点,则在删除之前需要将该master负责的slots先全部迁到其它master。
如:./redis-cli --cluster del-node 192.168.0.251:6381 082c079149a9915612d21cca8e08c831a4edeade
如果删除后,其它节点还看得到这个被删除的节点,则可通过FORGET命令解决,需要在所有还看得到的其它节点上执行:
CLUSTER FORGET `<node-id>`
FORGET作用:
1) 从节点表剔除节点;
2) 在60秒的时间内,阻止相同ID的节点加进来。