第一章 Redis集群简介
1.1 功能概述
Remote Dictionary Server(Redis)是一个基于 key-value 键值对的持久化数据库存储系统。支持多种数据结构,包括 string (字符串)、list (链表)、set (集合)、zset (sorted set --有序集合)和 hash(哈希类型)。这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
1.2 功能说明
Redis 集群是 Redis 的一个分布式实现,主要是为了实现以下这些目标(按在设计中的重要性排序):
在1000个节点的时候仍能表现得很好并且可扩展性是线性的。
没有合并操作,这样在 Redis 的数据模型中最典型的大数据值中也能有很好的表现。
写入安全:那些与大多数节点相连的客户端所做的写入操作,系统尝试全部都保存下来。不过公认的,还是会有小部分写入会丢失。是因为主从节点数据是通过网络传输来完成同步,主节点突然当机,会造成从节点没有同步数据的问题。
可用性:在绝大多数的主节点是可达的,并且对于每一个不可达的主节点都至少有一个它的从节点可达的情况下,Redis 集群仍能进行分区操作。
1.3 部署说明
该集群使用槽指法存储数据,三台服务器6个节点,三个主节点和三个从节点,主从复制实现从节点完全复制关联的主节点。三个主节点通过hash槽分配存储命令,实现完全去中心化。集群支持节点的扩充和移除操作。
以下为生产环境实际部署说明:
1 |
主机名称 |
第一套集群 |
第二套集群 |
分配内存 |
IP地址 |
2 |
jdpsclb-nfppzk01 |
6379 6479 |
6579 6679 |
一致为50G |
172.1.2.3 |
3 |
jdpsclb-nfppzk02 |
6379 6479 |
6579 6679 |
一致为50G |
172.1.2.4 |
4 |
jdpsclb-nfppzk03 |
6379 6479 |
6579 6679 |
一致为50G |
172.1.2.5 |
在生产环境中三台服务器上部署了两套redis集群。以下文档为第一套rdis集群而编写。
第二章 Redis集群安装部署
2.1 环境准备
2.1.1 安装软件准备
redis-2.3.3
ruby-2.4.0
redis-3.2.1.gem
2.1.2 环境检查
安装之前运行rpm命令查询redis依赖包,如果没有安装依赖包,需要使用yum安装。
Redis查询依赖包是否安装命令:
rpm -q cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl zlib-devel
2.2 Redis单机安装
注意:安装时使用root用户安装,实际生产环境中请新建用户(redis或者cache等)进行管理。
2.2.1 Redis安装
- 安装redis依赖包,最好使用yum命令安装
yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl zlib-devel
- 上传redis安装包到一个文件目录,解压安装包
安装路径:/home/redis/cluster/
配置文件:/home/redis/cluster/6379/redis.conf
tar –xzvf redis-3.2.9.tar.gz
- 进入解压的redis-3.2.9目录执行安装命令make和make install
make
make install
安装完成之后进入src目录,复制redis-trip.rb文件到/usr/local/bin (做环境变量必须需要root用户)
cp redis-trib.rb /usr/local/bin
2.2.2 修改配置文件
以下操作使用redis 用户操作
2.2.3 新建配置文件目录
mkdir -p /home/redis/standalone
2.2.3.1 复制配置文件到新建目录中,并配置。
拷贝配置文件
cp/opt/redis/redis-3.2.9/redis.conf /home/redis/standalone
修改配置文件
vi /home/redis/standalone/redis.conf
修改内容如下:
端口号:
port 6379(默认)
IP绑定,修改为服务器的ip:
bind 172.31.87.1
备份文件目录:
dir /home/redis/standalone/
配置后台启动
daemonize yes
修改进程号文件
pidfile /home/redis/standalone/redis.pid
修改日志文件路径
logfile "/home/redis/standalone/redis.log"
修改数据库开启数量
databases 1
保存并退出
2.2.3.2单机安装校验
使用redis用户校验
1. 启动redis服务,并查看redis进程
cd /home/redis/standalone
指定redis配置文件启动redis
redis-server redis.conf
查看redis进程
ps -ef|grep redis-server
2. 连接客户端测试
连接redis
redis-cli -h 172.22.1.155 -p 6379(实际地址以生产为准)
存值
set key1 value1
取值
get key1
3. 测试ok后关闭redis进程,redis集群不需要单独的节点
pkill -9 redis-server
2.3 集群安装
2.3.1 前提条件
- 集群安装需要redis3.0+的版本支持
- 每台服务器上完成单机安装
- redis3.x集群需要ruby环境支持,需要安装ruby环境
2.3.2 集群配置文件修改
切换redis用户
1. 在需要部署redis集群的主机上创建两个节点目录
mkdir -p /home/redis/cluster/6379
mkdir -p /home/redis/cluster/6479
2. 复制/home/redis/standalone目录下的redis.conf到6379节点目录下
3. 编辑刚复制的redis.conf 文件
4. 编辑配置文件内容
修改进程号文件,以端口号区分
修改pidfile
pidfile /home/redis/cluster/6379/redis.pid
修改日志文件存放目录
logfile “/home/redis/cluster/6379/redis.log”
开启集群
cluster-enabled yes
指定集群的配置文件
cluster-config-file "/home/redis/cluster/6379/nodes.conf"
集群中节点挂了,不影响整个集群,可以正常访问其他节点的数据
cluster-require-full-coverage no
此配置表示后台启动
daemonize yes
端口号:
port 6379(默认)
IP绑定,修改为自己服务器的ip:
bind 172.31.87.1
备份文件目录:
dir /home/redis/cluster/6379/
开启数据库的数量
databases 1
5. 配置文件修改完成之后把刚修改的redis.conf文件复制到各个节点目录下,然后修改各节点目录下配置文件的中的ip bind属性和端口号port属性
2.3.3 安装Ruby
- 选取一台服务器安装ruby用来创建redis集群
- 使用root权限安装
- 上传ruby-2.4.0.tar.gz到服务器,并解压
- 解压ruby安装包
- tar xf ruby-2.4.0-tar.gz
- 运行./configure执行安装配置和检测安装环境
- ./configure
- 编译和安装
编译
make
安装
make install
2.3.4 安装redis-3.2.1.gem
Redis-3.2.1.gem只有装了ruby的机器上装redis.3.2.1.gem
上传redis-3.2.1.gem到/home/redis目录下进行安装
gem install –-local redis-3.2.1.gem
2.3.5 各节点启动
分别启动三台服务器上的六个节点
redis-server /home/redis/cluster/6379/redis.conf
redis-server /home/redis/cluster/6479/redis.conf
三台服务器6个节点都开启后检查个节点开启状态,每个服务器会显示两个节点
ps –ef|grep redis-server
2.3.6 创建集群
在安装ruby的服务器上执行创建命令,创建命令如下:
redis-trib.rb create –-replicas 1 172.21.26.5:6379
172.21.26.5:6479 172.21.26.6:6379 172.21.26.6:6479
172.21.26.7:6379 172.21.26.7:6479
开始创建集群,期间会让你输入yes或no 输入yes
看见下图提示,创建集群成功。
2.4 redis集群优化
2.4.1 maxmemory选项
不要让Redis所在机器物理内存使用超过实际内存总量的3/5。
配置redis.conf中的maxmemory选项 配置标准为物理内存的40%。
如果一台服务器上分主从两个节点就分别配置20%。如下选项:
(以生产环境分配为200G内存为准)
maxmemory 5100000000
设置内存淘汰机制
allkeys-lru: 优先删除掉最近不经常使用的key,用以保存新数据
maxmemory-policy allkeys-lru
2.4.2 开启TCP连接快速回收
开启TCP连接中TIME-WAIT sockets的快速回收,有助于快速释放TCP连接
修改/etc/sysctl.conf文件
修改下面的参数,如果没有请新增此参数
net.ipv4.tcp_tw_recycle=1
2.5 验证部署
2.5.1 数据存储验证
连接redis,使用set和get来存储和获取数据,注意存储节点信息
连接redis:
redis-cli –c –h 172.22.1.156(实际地址为生产为准)
存值
set key value
取值
get key
三个主节点都有相应说明创建集群成功