CentOs7.3 搭建 Redis-4.0.1 Cluster 集群服务
Redis 简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
环境
- VMware版本号:12.0.0
- CentOS版本:CentOS 7.3.1611
- 三台虚拟机(IP):192.168.252.101,192.168.102..102,192.168.252.103
注意事项
升级所有的包,防止出现版本过久不兼容问题
1 | $ yum -y update |
安裝 GCC 编译工具 不然会有编译不过的问题
1 | $ yum install -y gcc g++ gcc-c++ make |
关闭防火墙 节点之前需要开放指定端口,为了方便,生产不要禁用
centos 6.x
1 | $ service iptables stop # 关闭命令: |
centos 7.x1
$ systemctl stop firewalld.service # 停止firewall
集群搭建
安装 Redis
下载,解压,编译安装
1 | cd /opt |
如果因为上次编译失败,有残留的文件
1 | $ make distclean |
创建节点
1.首先在 192.168.252.101机器上 /opt/redis-4.0.1目录下创建 redis-cluster
目录
1 | $ mkdir /opt/redis-4.0.1/redis-cluster |
2.在 redis-cluster
目录下,创建名为7000、7001、7002
的目录
1 | $ cd /opt/redis-4.0.1/redis-cluster |
3.分别修改这三个配置文件,把如下redis.conf 配置
内容粘贴进去
1 | $ vi 7000/redis.conf |
redis.conf 配置
1 | port 7000 |
redis.conf 配置说明
1 | #端口7000,7001,7002 |
···
接着在另外两台机器上(192.168.252.102,192.168.252.103)
重复以上三步,只是把目录改为7003、7004、7005、7006、7007、7008
对应的配置文件也按照这个规则修改即可
启动集群
1 | #第一台机器上执行 3个节点 |
检查服务
检查各 Redis 各个节点启动情况
1 | $ ps -ef | grep redis //redis是否启动成功 |
安装 Ruby
1 | $ yum -y install ruby ruby-devel rubygems rpm-build |
创建集群
注意:在任意一台上运行 不要在每台机器上都运行,一台就够了
Redis 官方提供了 redis-trib.rb
这个工具,就在解压目录的 src 目录中
1 | $ /opt/redis-4.0.1/src/redis-trib.rb create --replicas 1 192.168.252.101:7000 192.168.252.101:7001 192.168.252.101:7002 192.168.252.102:7003 192.168.252.102:7004 192.168.252.102:7005 192.168.252.103:7006 192.168.252.103:7007 192.168.252.103:7008 |
出现以下内容
1 | [root@localhost redis-cluster]# /opt/redis-4.0.1/src/redis-trib.rb create --replicas 1 192.168.252.101:7000 192.168.252.101:7001 192.168.252.101:7002 192.168.252.102:7003 192.168.252.102:7004 192.168.252.102:7005 192.168.252.103:7006 192.168.252.103:7007 192.168.252.103:7008 |
输入 yes
1 | >>> Nodes configuration updated |
关闭集群
这样也可以,推荐
1 | $ pkill redis |
循环节点逐个关闭
1 | $ for((i=0;i<=2;i++)); do /opt/redis-4.0.1/src/redis-cli -c -h 192.168.252.101 -p 700$i shutdown; done |
集群验证
连接集群测试
参数 -C 可连接到集群,因为 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略,-p 参数为端口号
- 我们在192.168.252.101机器redis 7000 的节点set 一个key
1 | $ /opt/redis-4.0.1/src/redis-cli -h 192.168.252.101 -c -p 7000 |
发现redis set name 之后重定向到192.168.252.102机器 redis 7003 这个节点
- 我们在192.168.252.103机器redis 7008 的节点get一个key
1 | [root@localhost redis-cluster]# /opt/redis-4.0.1/src/redis-cli -h 192.168.252.103 -c -p 7008 |
发现redis get name 重定向到192.168.252.102机器 redis 7003 这个节点
如果您看到这样的现象,说明集群已经是可用的了
检查集群状态
1 | $ /opt/redis-4.0.1/src/redis-trib.rb check 192.168.252.101:7000 |
1 | >>> Performing Cluster Check (using node 192.168.252.101:7000) |
列出集群节点
列出集群当前已知的所有节点(node),以及这些节点的相关信息
1 | $ /opt/redis-4.0.1/src/redis-cli -h 192.168.252.101 -c -p 7000 |
1 | 6555292fed9c5d52fcf5b983c441aff6f96923d5 192.168.252.102:7004@17004 slave 7c622ac191edd40dd61d9b79b27f6f69d02a5bbf 0 1502815268317 5 connected |
打印集群信息
1 | $ 192.168.252.101:7000> cluster info |
1 | cluster_state:ok |
集群命令
语法格式1
redis-cli -c -p port
集群
1 | cluster info :打印集群的信息 |
节点
1 | cluster meet <ip> <port> :将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。 |
槽(slot)
1 | cluster addslots <slot> [slot ...] :将一个或多个槽( slot)指派( assign)给当前节点。 |
键
1 | cluster keyslot <key> :计算键 key 应该被放置在哪个槽上。 |
出处:http://www.ymq.io
转自:鹏磊