第一章 Redis集群简介node
Remote Dictionary Server(Redis)是一个基于 key-value 键值对的持久化数据库存储系统。支持多种数据结构,包括 string (字符串)、list (链表)、set (集合)、zset (sorted set --有序集合)和 hash(哈希类型)。这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操做,并且这些操做都是原子性的。c++
Redis 集群是 Redis 的一个分布式实现,主要是为了实现如下这些目标(按在设计中的重要性排序):redis
在1000个节点的时候仍能表现得很好而且可扩展性是线性的。数据库
没有合并操做,这样在 Redis 的数据模型中最典型的大数据值中也能有很好的表现。安全
写入安全:那些与大多数节点相连的客户端所作的写入操做,系统尝试所有都保存下来。不过公认的,仍是会有小部分写入会丢失。是由于主从节点数据是经过网络传输来完成同步,主节点忽然当机,会形成从节点没有同步数据的问题。ruby
可用性:在绝大多数的主节点是可达的,而且对于每个不可达的主节点都至少有一个它的从节点可达的状况下,Redis 集群仍能进行分区操做。服务器
该集群使用槽指法存储数据,三台服务器6个节点,三个主节点和三个从节点,主从复制实现从节点彻底复制关联的主节点。三个主节点经过hash槽分配存储命令,实现彻底去中心化。集群支持节点的扩充和移除操做。网络
如下为生产环境实际部署说明:数据结构
1socket |
主机名称 |
第一套集群 |
第二套集群 |
分配内存 |
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集群安装部署
redis-2.3.3
ruby-2.4.0
redis-3.2.1.gem
安装以前运行rpm命令查询redis依赖包,若是没有安装依赖包,须要使用yum安装。
Redis查询依赖包是否安装命令:
rpm -q cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl zlib-devel
注意:安装时使用root用户安装,实际生产环境中请新建用户(redis或者cache等)进行管理。
yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl zlib-devel
安装路径:/home/redis/cluster/
配置文件:/home/redis/cluster/6379/redis.conf
tar –xzvf redis-3.2.9.tar.gz
make
make install
安装完成以后进入src目录,复制redis-trip.rb文件到/usr/local/bin (作环境变量必须须要root用户)
cp redis-trib.rb /usr/local/bin
如下操做使用redis 用户操做
mkdir -p /home/redis/standalone
拷贝配置文件
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
保存并退出
使用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
切换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属性
编译
make
安装
make install
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
分别启动三台服务器上的六个节点
redis-server /home/redis/cluster/6379/redis.conf
redis-server /home/redis/cluster/6479/redis.conf
三台服务器6个节点都开启后检查个节点开启状态,每一个服务器会显示两个节点
ps –ef|grep redis-server
在安装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
看见下图提示,建立集群成功。
不要让Redis所在机器物理内存使用超过实际内存总量的3/5。
配置redis.conf中的maxmemory选项 配置标准为物理内存的40%。
若是一台服务器上分主从两个节点就分别配置20%。以下选项:
(以生产环境分配为200G内存为准)
maxmemory 5100000000
设置内存淘汰机制
allkeys-lru: 优先删除掉最近不常常使用的key,用以保存新数据
maxmemory-policy allkeys-lru
开启TCP链接中TIME-WAIT sockets的快速回收,有助于快速释放TCP链接
修改/etc/sysctl.conf文件
修改下面的参数,若是没有请新增此参数
net.ipv4.tcp_tw_recycle=1
链接redis,使用set和get来存储和获取数据,注意存储节点信息
链接redis:
redis-cli –c –h 172.22.1.156(实际地址为生产为准)
存值
set key value
取值
get key
三个主节点都有相应说明建立集群成功