目录
一、说明
使用一台服务器,搭建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 安装部署
- 安装必要的工具
sudo yum install tcl
sudo yum install gcc
sudo yum install make
sudo yum install ruby
sudo yum install rubygems
sudo gem install redis
安装可能出现的问题

安装更新版本的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 #查看版本
- 下载、解压及安装
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
- 修改配置文件
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
- 防火墙设置
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
结果如下:

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
结果如下:


集群验证:
./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 说明
其内部处理流程如下:
- 通过load_cluster_info_from_node方法加载集群信息,check_cluster方法检查集群是否健康。
- 连接外部redis节点,如果外部节点开启了cluster_enabled,则提示错误([ERR] The source node should not be a cluster node.)
- 通过scan命令遍历外部节点,一次获取1000条数据。
- 遍历这些key,计算出key对应的slot。
执行migrate命令,源节点是外部节点,目的节点是集群slot对应的节点,如果设置了– - copy参数,则传递copy参数,其会保留源节点的key,如果设置了–replace,则传递replace参数。如果目标节点中存在同名key,其值会被覆盖。两个参数可同时指定。
- 不停执行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

本文介绍了Redis三种模式,包括主从、哨兵和集群模式。详细阐述了在CentOS 7.2系统上搭建Redis集群模式(三主三从)的步骤,如安装准备、部署、启动实例、创建集群和设置密码等。还讲解了使用redis - trib.rb工具进行异构集群间的数据迁移,包括工具介绍和迁移操作。
1443

被折叠的 条评论
为什么被折叠?



