redis安装(三)集群三主三从模式

集群模式架构图

 

 

环境说明:三台centos7服务器 + redis5.0.8 + gcc4及以上(三主三从模式)

IP地址 服务端口 配置文件
192.168.85.126 7001 redis7001.conf
192.168.85.127 7001 redis7001.conf
192.168.85.128 7001 redis7001.conf
192.168.85.126 7002 redis7002.conf
192.168.85.127 7002 redis7002.conf
192.168.85.128 7002 redis7002.conf

 

 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的节点加进来。

(4)数据迁移
将数据从一个redis集群迁到另一个redis集群:

redis-cli --cluster import 127.0.0.1:7002 --cluster-from 127.0.0.1:7008 --cluster-copy
//前面地址是集群地址,后面是导入的数据地址 ,这个导入必须不重复,重复报错,可以添加--cluster-replace替代集群中相同key的值

 

posted @ 2021-08-11 09:52  半生徒然  阅读(476)  评论(1编辑  收藏  举报