redis集群模式安装与数据迁移验证记录

目录

  • 一、说明
  • 二、 redis三种模式
    • 2.1 主从模式
    • 2.2 哨兵sentinel模式
    • 2.3 集群模式(cluster)
  • 三、集群模式部署
    • 3.1 安装准备
    • 3.2 安装部署
    • 3.3 启动实例
    • 3.4 创建集群
    • 3.5 设置密码
  • 四、使用redis-trib.rb工具进行异构集群间的数据迁移
    • 4.1 redis-trib.rb工具介绍
      • 概述
      • 支持的操作
      • import 说明
    • 4.2 数据迁移

一、说明

使用一台服务器,搭建redis集群模式(三主三从),并从原redis数据库(redis哨兵模式,一主一从)迁移数据。

二、 redis三种模式

2.1 主从模式

redis2.8版本之前的模式
持久化功能会把内存中的数据保存在硬盘上,重启时,从硬盘加载数据,以保证保证在服务器重启的情况下不会丢失(或少量丢失)数据。
但数据仍然是存储在一台服务器上。如果该服务器出现硬盘故障等,数据就会丢失。
为了避免单点故障导致的数据丢失,通常的做法是将数据库复制多个副本部署在多台服务器上(即从数据库)。单点故障时,其他服务器能够继续提供服务。
为此, Redis 提供了复制(replication)功能,可以实现当一台数据库中的数据更新后,自动将更新的数据同步到其他数据库上。

2.2 哨兵sentinel模式

redis2.8及之后的模式
在主从模式中,当主数据库遇到异常中断服务后,开发者需要人工介入,手动选择一个从数据库升格为主数据库来继续提供服务。
Redis 2.8中提供了哨兵工具,来实现自动化的系统监控和故障恢复功能。
顾名思义,哨兵的作用就是监控Redis系统的运行状况。它的功能包括以下两个。

  • 监控主数据库和从数据库是否正常运行。
  • 主数据库出现故障时自动将从数据库转换为主数据库。

2.3 集群模式(cluster)

redis3.0版本之后
即使使用哨兵,redis每个实例也是全量存储,每个redis存储的内容都是完整的数据,浪费内存且有木桶效应。Redis在高并发、大数据量的情况内存压力将会增大;为了最大化利用内存,可以采用集群,就是分布式存储。即将Redis的数据根据一定的规则分配到多台机器:
一个 Redis 集群包含 16384 个哈希槽(hash slot),数据库中的每个键都属于这 16384 个哈希槽的其中一个,集群中的每个节点负责处理一部分哈希槽。
一般集群建议搭建三主三从架构,三主提供服务,三从提供备份功能。

三、集群模式部署

3.1 安装准备

  • 系统: CentOS 7.2
  • ip: 192.168.100.99
  • redis版本: redis-4.0.11
  • 节点: 192.168.100.3:7001、192.168.100.3:7002、192.168.100.3:7003、192.168.100.3:7004、192.168.100.3:7005、192.168.100.3:7006

3.2 安装部署

  1. 安装必要的工具
sudo yum install tcl
sudo yum install gcc
sudo yum install make
sudo yum install ruby
sudo yum install rubygems
sudo gem install redis

安装可能出现的问题
redis集群模式安装与数据迁移验证记录_第1张图片
安装更新版本的ruby:

sudo yum install centos-release-scl-rh   #会在/etc/yum.repos.d/目录下多出一个CentOS-SCLo-scl-rh.repo源
sudo yum install rh-ruby23  -y		#安装ruby
sudo scl enable rh-ruby23 bash
ruby -v		#查看版本
  1. 下载、解压及安装
sudo mkdir /usr/local/redis
cd /usr/local/redis
sudo wget http://download.redis.io/releases/redis-4.0.11.tar.gz
sudo tar -xvf redis-4.0.11.tar.gz
cd redis-4.0.11
sudo make
  1. 修改配置文件
cd /usr/local/redis/redis-4.0.11
sudo mkdir data			#数据文件存储在该路径下
sudo mkdir logs			#日志文件路径
sudo mkdir config-files
# 依次创建7001-7006六个配置文件,分别为六个实例的配置文件
sudo cp redis.conf ./config-files/redis_7001.conf
sudo cp redis.conf ./config-files/redis_7002.conf
sudo cp redis.conf ./config-files/redis_7003.conf
sudo cp redis.conf ./config-files/redis_7004.conf
sudo cp redis.conf ./config-files/redis_7005.conf
sudo cp redis.conf ./config-files/redis_7006.conf
cd config-files

依次修改六个配置文件 ,主要需要修改以下参数,以7001为例

#bind 127.0.0.1			#绑定IP,即绑定本地回环地址。开启这个配置时,redis 只接收来自于该 IP 地址列表的请求,如果不进行设置,那么将处理所有请求
protected-mode no		#关闭保护模式
port 7001				#端口号,
daemonize yes			#配置redis作为守护进程运行
cluster-enabled yes		#开启集群功能
appendonly yes			#配置数据持久化, 开启aof日志。有需要就开启,它会每次写操作都记录一条日志
dbfilename dump_7001.rdb	#自动生成到data目录下面,需要写一个文件名,按照端口号区分
dir ./data				#数据文件的路径
logfile "/usr/local/redis/redis-4.0.11.logs/7001.log"					#日志文件的路径
appendfilename "appendonly_7001.aof"
pidfile /var/run/redis_7001.pid
cluster-config-file nodes-7001.conf
  1. 防火墙设置
firewall-cmd --zone=public --add-port=7001/tcp --permanent
firewall-cmd --zone=public --add-port=7002/tcp --permanent
firewall-cmd --zone=public --add-port=7003/tcp --permanent
firewall-cmd --zone=public --add-port=7004/tcp --permanent
firewall-cmd --zone=public --add-port=7005/tcp --permanent
firewall-cmd --zone=public --add-port=7006/tcp --permanent
firewall-cmd --reload

3.3 启动实例

逐一启动,比较麻烦,可以写成shell脚本

sudo vim /usr/local/redis/redis-4.0.11/start.sh

脚本如下:

#!/bin/bash
./src/redis-server ./config-files/redis_7001.conf
./src/redis-server ./config-files/redis_7002.conf
./src/redis-server ./config-files/redis_7003.conf
./src/redis-server ./config-files/redis_7004.conf
./src/redis-server ./config-files/redis_7005.conf
./src/redis-server ./config-files/redis_7006.conf

运行start.sh脚本

sudo sh start.sh
ps -ef | grep redis

结果如下:
redis集群模式安装与数据迁移验证记录_第2张图片

3.4 创建集群

使用edis-trib.rb工具创建集群

./src/redis-trib.rb create --replicas 1 192.168.100.3:7001 192.168.100.3:7002 192.168.100.3:7003 192.168.100.3:7004 192.168.100.3:7005 192.168.100.3:7006

结果如下:
redis集群模式安装与数据迁移验证记录_第3张图片
redis集群模式安装与数据迁移验证记录_第4张图片
集群验证:

./src/redis-trib.rb check 127.0.0.1:7001

登录:

./src/redis-cli -c -h 192.168.100.3 -p 7001

3.5 设置密码

注:因为涉及到数据迁移,这里建议先进行迁移后再设置密码,以免迁移时出现问题

逐个进入redis节点,进行设置

./src/redis-cli -c -h 192.168.100.3 -p 7001
#登录redis
192.168.100.3:7001>config set masterauth passwd
192.168.100.3:7001>config set requirepass passwd
192.168.100.3:7001>config rewrite

四、使用redis-trib.rb工具进行异构集群间的数据迁移

4.1 redis-trib.rb工具介绍

概述

redis-trib.rb是官方提供的Redis Cluster的管理工具,无需额外下载,默认位于源码包的src目录下,但因该工具是用ruby开发的,所以需要准备相关的依赖环境。
部署redis集群模式时,创建集群即使用的该工具。
注意源数据库不能为集群模式;

支持的操作

	# redis-trib.rb help
 	Usage: redis-trib <command> <options> <arguments ...>
 	
 	  create          host1:port1 ... hostN:portN
 	                  --replicas <arg>
 	  check           host:port
 	  info            host:port
 	  fix             host:port
 	                  --timeout <arg>
 	  reshard         host:port
 	                  --from <arg>
 	                  --to <arg>
 	                  --slots <arg>
 	                  --yes
 	                  --timeout <arg>
 	                  --pipeline <arg>
 	  rebalance       host:port
 	                  --weight <arg>
 	                  --auto-weights
 	                  --use-empty-masters
 	                  --timeout <arg>
 	                  --simulate
 	                  --pipeline <arg>
 	                  --threshold <arg>
 	  add-node        new_host:new_port existing_host:existing_port
 	                  --slave
 	                  --master-id <arg>
 	  del-node        host:port node_id
 	  set-timeout     host:port milliseconds
 	  call            host:port command arg arg .. arg
 	  import          host:port
 	                  --from <arg>
 	                  --copy
 	                  --replace
 	  help            (show this help)
 	
 	For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

import 说明

其内部处理流程如下:

  1. 通过load_cluster_info_from_node方法加载集群信息,check_cluster方法检查集群是否健康。
  2. 连接外部redis节点,如果外部节点开启了cluster_enabled,则提示错误([ERR] The source node should not be a cluster node.)
  3. 通过scan命令遍历外部节点,一次获取1000条数据。
  4. 遍历这些key,计算出key对应的slot。
    执行migrate命令,源节点是外部节点,目的节点是集群slot对应的节点,如果设置了–
  5. copy参数,则传递copy参数,其会保留源节点的key,如果设置了–replace,则传递replace参数。如果目标节点中存在同名key,其值会被覆盖。两个参数可同时指定。
  6. 不停执行scan命令,直到遍历完所有key。

4.2 数据迁移

gem install redis 安装的版本较高,无法使用import,因此要重新安装3.3.3-3.3.5之间的版本

sudo gem uninstall redis
sudo gem install redis -v 3.3.3

同时源数据库要设置成无密码访问,配置文件里注释掉requirepass一行,并重启源数据库【略】

#requirepass "123456"

进行数据迁移

./src/redis-trib.rb import --from 192.168.100.3:6379 --copy --replace 192.168.100.3:7001

你可能感兴趣的:(notes,redis)