首页 > 数据库 >redis cluster三主三从搭建

redis cluster三主三从搭建

时间:2022-08-24 13:34:43浏览次数:139  
标签:-- 三主三 redis 8001 cluster 集群 节点

redis cluster三主三从搭建

需要用到三台机器,每台机器上启动8001和8002端口,也可以根据自己需求改成别的端口,在下面配置文件中会体现

截止7.1步骤,1.1-7.1的步骤在三台机器上都要操作,7.1及7.1之后的内容是在一台机器执行

1.1 安装C/C++环境

Redis编译时需要使用C/C++环境:

yum install -y gcc gcc-c++ make

2.1 redis下载

wget https://download.redis.io/releases/redis-5.0.13.tar.gz

3.1 解压、编译

//依赖库安装
yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

tar -zxvf redis-5.0.13.tar.gz
cd redis-5.0.13
make

4.1 创建Redis相关工作目录(目录可自定义)

mkdir /data/redis/redis-cluster/{data/{redis_8001,redis_8002},conf,log} -p

5.1 复制redis配置文件

cp /data/redis/redis-5.0.13/redis.conf /data/redis/redis-cluster/conf/redis_8001.conf
cp /data/redis/redis-5.0.13/redis.conf /data/redis/redis-cluster/conf/redis_8002.conf

5.1 修改Redis配置文件

    port 8001             
	#修改redis监听端口(可以自定义) 8001与端口号同步
	bind 0.0.0.0            
	#表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
	daemonize yes             
	#允许redis后台运行
	pidfile /var/run/redis_8001.pid     
	#pid存放目录 8001与端口号同步
	logfile "/data/redis/redis-cluster/log/redis_8001.log"   
	#设置日志存放路径 8001与端口号同步
	dir /data/redis/redis-cluster/data/redis_8001  
	#工作目录 8001与端口号同步
	cluster-enabled yes     
	#是否开启集群
	cluster-config-file /data/redis/redis-cluster/conf/nodes_8001.conf
	#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息  8001与端口号同步
	#这个文件并不需要手动配置,这个配置文件有Redis生成并更新, 
	cluster-node-timeout 15000
	#节点互连超时的阀值。集群节点超时毫秒数,默认15秒
	appendonly yes
	#Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件, 
	#每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
	appendfsync everysec
	#Redis会把每次写入的数据在接收后每秒写入一次 appendonly.aof 文件
	requirepass 123456    
	#设置redis密码
	masterauth 123456    
	#主从同步master的密码(如果没有设置redis密码,则无需配置)

7.1 启动Redis

集群内每台服务器分别启动两个redis

cd /data/redis/redis-5.0.13/src/
./redis-server /data/redis/redis-cluster/conf/redis_8001.conf
./redis-server /data/redis/redis-cluster/conf/redis_8002.conf

8.1 创建Redis Cluster

./redis-cli -a  {redis密码} --cluster create {redis集群地址} --cluster-replicas 1

9.1 验证集群Redis-Cluster

//登录redis集群
./redis-cli -a {redis密码} -h {redis地址} -p {redsi端口} -c
//验证集群信息
{redis地址}:{redis端口}>cluster info #查看集群信息
{redis地址}:{redis端口}>cluster nodes #查看集群节点列表

//查看集群内主从关系
{redis地址}:{redis端口}>cluster slots

//数据验证
插入数据:
{redis地址}:{redis端口}> set name
{redis地址}:{redis端口}> get name
登录其他节点查看数据:
redis-cli -a {redis密码} -h  {redis地址} -p {redsi端口} -c
{redis地址}:{redis端口}> get mykey

image

image

10.1 故障恢复

假设你现在有一个3主3从的redis cluster,很不幸运,你丢了2个节点
redis cluster集群状态为fail,丢失了一些分片

集群坏了原因分析:
* master节点能启动,但是master节点的IP变化了,集群还是根据旧的IP去连接节点,导致集群不能自愈。
* master节点某种原因不能启动,slave节点坏掉,有部分槽位slot丢失
* master节点因为网络原因不能连接,部分分片丢失,有部分槽位slot丢失


修复步骤:
//需要把dump.rdb或者appendonly.aof文件拷贝出来,目的是先恢复redis节点数据, 如果数据能恢复,可能不需要fix修复命令,集群就可能恢复
//连接任意一个集群节点,cluster forget删除掉有故障的节点。这个时候建议你用call命令,这个命令很好用   
redis-cli  --cluster call 192.168.8.101:6381   cluster  forget  <xxx_node_id>   
redis-cli  --cluster call 192.168.8.101:6381   cluster  nodes 

//meet命令添加节点 
redis-cli  --cluster call 192.168.8.101:6381   cluster meet  192.168.8.101 6384

//查询检查集群信息是否一致  
redis-cli  --cluster call 192.168.8.101:6381   cluster  nodes
redis-cli  --cluster check 192.168.8.101:6381
//如果这个时候足够幸运,cluster应该是恢复了。如果提示[ERR] Not all 16384 slots are covered by nodes.

//接下来需要fix修复命令,在这个步骤你也可以使用命令add-node节点增加集群节点
redis-cli --cluster add-node 192.168.8.102:6384 192.168.8.101:6381
//fix修复节点命令,fix修复命令,不仅可以自动删除disconnected的节点,而且会迁移没有分配的slots到正常节点,可以使集群状态fail转变为ok。我之所以手动先给集群增加一个节点,手动删除有故障节点,然后fix修复命令,fix是会迁移的slots,需要代价的,fix完成后,还需要再平衡rebalance集群。
redis-cli --cluster  fix  192.168.8.101  6381

//再平衡rebalance集群
redis-cli --cluster rebalance --cluster-use-empty-masters  --cluster-pipeline 1000 --cluster-simulate  192.168.8.101 6384
  rebalance      host:port # 指定集群的任意一节点进行平衡集群节点slot数量 

                 --cluster-weight <node1=w1...nodeN=wN> # 指定集群节点的权重

                 --cluster-use-empty-masters # 设置可以让没有分配slot的主节点参与,默认不允许

                 --cluster-timeout <arg> # 设置migrate命令的超时时间

                 --cluster-simulate # 模拟rebalance操作,不会真正执行迁移操作

                 --cluster-pipeline <arg> # 定义cluster getkeysinslot命令一次取出的key数量,默认值为10

                 --cluster-threshold <arg> # 迁移的slot阈值超过threshold,执行rebalance操作

                 --cluster-replace # 是否直接replace到目标节点
				 
				 
//最后不忘记保存配置  
cluster saveconfig

标签:--,三主三,redis,8001,cluster,集群,节点
From: https://www.cnblogs.com/liwenchao1995/p/16619556.html

相关文章

  • Redis_持久化
    Redis_持久化持久化:redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们才可以键redis内存中的数据持久化保存到硬盘的文件中redis持久化机构:......
  • redis命令操作set&sortedset、redis命令操作通用命令
    redis命令操作set&sortedset集合类型:set不允许重复元素存储:saddkeyvalue获取:smemberskey:获取set元素中所有元素删除:sremkeyvalue:删除set集合中某......
  • Redis下载安装、Redis数据结构
    Redis下载安装2.下载安装1,官网:https://redis.id2.中文网:http://www.redis.net.cn/3.解压直接可以使用∶*redis.windows.conf:配置文件*redis-cli.exe:redis的客......
  • 36. Redis---Java使用Redis
    1.前言在开始学习本节内容之前,首先需要您掌握Java编程语言,其次确定您已经安装了Redis服务及JavaRedis驱动,并且能够成功运行Java程序。本节介绍如何在Java中......
  • Redis概念
    Redis概念Redis概念:redis是一款高性能的NoSQL系类的关系数据库 图解: ......
  • 35. Redis---缓存问题
    1.前言在实际的业务场景中,Redis一般和其他数据库搭配使用,用来减轻后端数据库的压力,比如和关系型数据库MySQL配合使用。Redis会把MySQL中经常被查询的数据缓存起来,......
  • redis集群
    一:集群1.哨兵的问题在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,......
  • Redis基本操作
    五大数据类型官方文档Redis是一个开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图......
  • Redis启动异常
    Redis启动异常[root@hadoop01myredis]#dockerstart9738865610dcErrorresponsefromdaemon:driverfailedprogrammingexternalconnectivityonendpointmyredi......
  • prometheus监控redis-cluster集群
    信息prometheusv2.1.0redis_exporterv1.6.1rediscluster5.03mater3slaveprometheus.yml在prometheus.yml添加两个job,redis_exporter和redis_exporter_target......