Redis 集群配置

0x00 概述

想搭建一个最简单的Redis集群,那么至少需要6个节点:3个Master和3个Slave。为什么需要3个Master呢?如果你了解过Hadoop/Storm/Zookeeper这些的话,你就会明白一般分布式要求基数个节点,这样便于选举(少数服从多数的原则)。
思路很简单,我将在一台节点上开启6个Redis实例,并且这6个Redis各自有自己的端口。这样的话,相当于模拟出了6台机器了。然后在以这6个实例组建Redis集群就可以了。

具体来说,需要注意下:由于在一台机器(127.0.0.1)上,因此每个实例应该有不同的端口;同时,每个实例显然会有自己的存放数据的地方;开启AOF模式;开启集群配置;开启后台模式;

基于ubuntu 17.04

0x01 安装redis

参考网址: http://www.runoob.com/redis/redis-install.html


$sudo apt-get update
$sudo apt-get install redis-server
$ redis-server #启动redis(默认端口6379,无密码)
$ redis-cli    #连接本机redis

Redis实例配置

既然是要启动6个Redis实例,自然需要准备各自的配置文件,为这6个实例创建好各自存放的目录

$ mkdir redis-cluster
$ cd redis-cluster
$ mkdir 820{1,2,3,4,5,6}

复制 redis.conf (ubuntu 默认在/etc/redis/redis.conf) 到对应的目录

cp /etc/redis/redis.conf ./8201
cp /etc/redis/redis.conf ./8202
cp /etc/redis/redis.conf ./8203
cp /etc/redis/redis.conf ./8204
cp /etc/redis/redis.conf ./8205
cp /etc/redis/redis.conf ./8206

通常情况需要增加权限
sudo chmod +w ./8201/redis.conf


修改配置文件redis.conf

vim ./8201/redis.conf

主要是修改ip和端口(注意不要使用冲突的端口),如下修改(其他六个redis也是一样)

appendfilename "appendonly.aof"
appendfsync everysec
appendonly yes

bind 127.0.0.1  # 修改为对应的IP地址,按服务器情况修改

cluster-config-file nodes-8201.conf    # 一般以端口设置,需要修改
cluster-enabled yes
cluster-node-timeout 5000

daemonize yes  # 后台模式,默认为yes

dir /home/jam/work/redis-cluster/8201 # 设置文件目录,会生成aof文件,需要修改

pidfile /home/jam/work/redis-cluster/8201/redis-server.pid     # pid 文件,需要修改
port 8201    #端口,需要修改

查看配置文件,不看注释 grep -v '^#' 8201/redis.conf | sort -u


配置的时候,可以先把第一个配置文件先配置好,然后复制到其他目录,然后使用替换,把端口号替换即可
vim的替换命令,按Esc 进入命令模式,输入

:%s/8201/8202/g  

其中,s表示替换;%全文替换,不加默认一行;8021,要查找被替换的文本,8022新的文本;g整行替换,不加g只替换行中第一个匹配文本。


管理Redis集群

Redis集群的操作在后文你可以看到是通过Ruby脚本来完成的,因此我们需要安装Ruby相关的RPM包,以及Redis和Ruby的接口包。

sudo apt install ruby
sudo gem install redis 

下载集群管理脚本redis-trib.rb。redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集群命令封装成简单、便捷、实用的操作工具。redis-trib.rb是redis作者用ruby完成的。

wget http://download.redis.io/redis-stable/src/redis-trib.rb

确保了redis服务可以了,就开始使用脚本创建集群了。一般检查完毕需要输入 yes 确认,输入之后就可以安装完毕。

sudo ./redis-trib.rb create --replicas 1 127.0.0.1:8201 127.0.0.1:8202 127.0.0.1:8203 127.0.0.1:8204  127.0.0.1:8205 127.0.0.1:8206

我们来看一下创建集群命令中 --replicas 1,这个代表什么意思呢?1其实代表的是一个比例,就是主节点数/从节点数的比例。那么想一想,在创建集群的时候,哪些节点是主节点呢?哪些节点是从节点呢?答案是将按照命令中IP:PORT的顺序,先是3个主节点,然后是3个从节点。
slot对于Redis集群而言,就是一个存放数据的地方,就是一个槽。对于每一个Master而言,会存在一个slot的范围,而Slave则没有。在Redis集群中,依然是Master可以读、写,而Slave只读。数据的写入,实际上是分布的存储在slot中,这和以前1.X的主从模式是不一样的(主从模式下Master/Slave数据存储是完全一致的),因为Redis集群中3台Master的数据存储并不一样。


验证redis集群

redis-cli -c -h 127.0.0.1 -p 8201

连接成功后可以进入redis命令模式

127.0.0.1:8201>pin

返回pong

输入查看集群信息的命令,会有对应的信息。

127.0.0.1:8201> cluster nodes
a7cfbaee7af907e4d2a51ae3f4f28a8df2d3858f 127.0.0.1:8204 slave a88057ab04c7fd7d10d83c5c313b24eaaa65541d 0 1509004191221 4 connected
68c45609c72927cabb5c73e453865427df563852 127.0.0.1:8206 slave 3377888e3c9ae0a45cab0895aa16d9f77bf5509d 0 1509004192243 6 connected
1a1ff27396a66fb1f821d3f2df3bcc9a3941726f 127.0.0.1:8202 master - 0 1509004190204 2 connected 5461-10922
3377888e3c9ae0a45cab0895aa16d9f77bf5509d 127.0.0.1:8203 master - 0 1509004191735 3 connected 10923-16383
c109bf48f2bd3eca1c6cded7932bc218ade7a727 127.0.0.1:8205 slave 1a1ff27396a66fb1f821d3f2df3bcc9a3941726f 0 1509004191732 5 connected
a88057ab04c7fd7d10d83c5c313b24eaaa65541d 127.0.0.1:8201 myself,master - 0 0 1 connected 0-5460

127.0.0.1:8201> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:10810
cluster_stats_messages_received:10810

参考: http://www.jianshu.com/p/dbc62ed27f03

发表回复

您的电子邮箱地址不会被公开。

粤ICP备17041560号-2