redis集群环境搭建


一、redis节点创建。

本次集群是采用两台机器(IP分别为:119.29.137.46  和58.87.123.28,以下简称为主机1和主机2好了),每台机器创建4个节点,创建出4 master(主)、4salve(从) 环境,集群至少需要6个节点(3主3从模式)。

1、在主机1中,安装好redis之后,进入redis,(我的两台机器的安装路径都为/usr/local/redis),创建文件夹redis-cluster,用于存放四个节点的配置启动文件。

 mkdir redis-cluster
x
 
1
 mkdir redis-cluster

  

2、进入redis-cluster目录,创建6380、6381、6382和6383目录(因为我的主机1开放的客户端连接端口号6380、6381、6382和6383端口,为了管理,就直接按端口命令了。)

mkdir 6380 6381 6382 6383 6384
1
 
1
mkdir 6380 6381 6382 6383 6384

3、将redis目录下的默认配置文件redis.conf分别拷贝到每个端口目录下

cp ../redis.conf 638*/
1
 
1
cp ../redis.conf 638*/

现在每个端口目录下都有一份redis.conf,分别修改这四个redis.conf配置文件,修改内容如下:

port 端口号                               //分别填入6380 6381 6382 6383       

bind 本机ip                               //默认ip为127.0.0.1 需要改为机器下的ip地址

daemonize yes                            //redis以后台进程运行

pidfile /var/run/redis_<port>.pid        // 将<port>替换,例如pidfile /var/run/redis_6380.pid

cluster-enabled yes                      //开启集群

cluster-config-file nodes_<port>.conf    //将<port>替换, 例如cluster-config-file nodes_6380.conf 这是集群的pid配置文件, 首次启动自动生成 

cluster-node-timeout 15000              //请求超时 默认15秒,可自行设置

appendonly yes                          //开启AOF日志,开启后,每次写操作都记录一条日志,可根据需要设定。
 
1
port 端口号                               //分别填入6380 6381 6382 6383       
2
3
bind 本机ip                               //默认ip为127.0.0.1 需要改为机器下的ip地址
4
5
daemonize yes                            //redis以后台进程运行
6
7
pidfile /var/run/redis_<port>.pid        // 将<port>替换,例如pidfile /var/run/redis_6380.pid
8
9
cluster-enabled yes                      //开启集群
10
11
cluster-config-file nodes_<port>.conf    //将<port>替换, 例如cluster-config-file nodes_6380.conf 这是集群的pid配置文件, 首次启动自动生成 
12
13
cluster-node-timeout 15000              //请求超时 默认15秒,可自行设置
14
15
appendonly yes                          //开启AOF日志,开启后,每次写操作都记录一条日志,可根据需要设定。

(其它配置参数可根据生成环境需要自行设置。没有设置便是默认设置。配置文件常用参数设置可以参考博客https://www.cnblogs.com/zhang-ke/p/5981108.html


4、修改好redis.conf后,在redis的src目录下以指定刚才修改的配置文件的方式来启动redis服务端。

ps -elf | grep redis    //可以查看到这四个启动的redis服务进程.
1
 
1
ps -elf | grep redis    //可以查看到这四个启动的redis服务进程.

主机2执行同主机1一样执行1、2、3、4四个操作。(注意:主机2的开放的四个redis客户端的连接的端口号是分别是6384、6385、6386和6387)
开启如下:
5、防火墙开放客户端连接的端口。主机1需要开放6380-6383端口,主机2需要开放6384-6387端口。另外,集群的总线端口也要开启,否则集群时连接不上其它主机,集群失败。集群总线的端口为客户端的端口+10000。
二、集群操作
1、Redis 官方提供了 redis-trib.rb 这个工具,就在redis解压目录的 src 目录中(/usr/local/redis/redis-4.0.10/),可以将它复制到 /usr/local/bin 目录中,就可以直接在任何目录下使用。
cp   /usr/local/redis/redis-4.0.10/src  /usr/local/bin
1
 
1
cp   /usr/local/redis/redis-4.0.10/src  /usr/local/bin
2、ruby工具的安装:在集群之前,需要检查是否系统是否安装了ruby工具,因为redis-trib.rb工具是用ruby实现的,依赖ruby。
ruby --version
x
 
1
ruby --version

1)若是没有安装,则需要安装ruby工具及其依赖。
yum install -y ruby ruby-devel rubygems rpm-build
1
 
1
yum install -y ruby ruby-devel rubygems rpm-build
2)若是安装了ruby,版本要在2.2.2及其之上,否则在安装redis接口时会报错(参见第3步,见下文),版本符合2.2.2及其以上者跳过第3步直接执行第4步。
3)更新ruby版本。
通过第1步安装的ruby,或是第二步中查看到系统已经安装了ruby,但版本过低,会导致gem install redis安装redis接口时出错,如下所示:需要更新ruby版本。
 
解决ruby版本过低请参考该解决方案:
gem install redis 安装 好redis 接口之后,便可以执行集群操作了。
4、集群操作: 使用下面这个命令即可完成集群:
redis-trib.rb    create    --replicas  1   119.29.137.46:6380 119.29.137.46:6381 119.29.137.46:6382 119.29.137.46:6383 58.87.123.28:6384 58.87.123.28:6385 58.87.123.28:6386 58.87.123..28:6387
1
 
1
redis-trib.rb    create    --replicas  1   119.29.137.46:6380 119.29.137.46:6381 119.29.137.46:6382 119.29.137.46:6383 58.87.123.28:6384 58.87.123.28:6385 58.87.123.28:6386 58.87.123..28:6387
其中,create是创建集群,--replicas代表主从复制, 1是代表主从复制比为1:1,即一个master对应一个slave,此时可以创建4master和4slave。
输入yes,默认保存这个主从设置的方案。
可以看到,4个mater和4个slave的配置信息,16384个哈希槽都配置成功,搭建集群成功。(注意所有的哈希槽都必须分配给节点,否则集群状态失败)

注意:若是创建集群时出现如下错误:
解决方案(如下图):
1)关闭redis:使用redis-cli -h [ip] -p [port]登录节点, shutdown命令关闭redis。
2)将redis目录下aof、rdb等本地数据appendonly.aof和dump.rdb文件删除;
3)将Node的集群配置文件删除,即删除在redis.conf里面设置cluster-config-file的文件(我这里是node_638*.conf);

4)删除之后,重启redis,创建集群即可。
5.测试
使用集群方式登入 redis 任意一个节点:
redis-cli -h [ip] -p [port] -c
1
 
1
redis-cli -h [ip] -p [port] -c

CLUSTER INFO 可以查看当前集群的状态信息:当前是集群成功状态,有8个节点,16384哈希槽全部被分配。
CLUSTER NODES可以查看当前节点所在集群环境中的所有正常(没有掉线)的节点信息。
CLUSTER SLOTS 查看哈希槽的配置信息。

另外,若是当前集群状态失败(fail),可以在节点中使用CLUSTER MEET [IP] [Port]手动添加master节点,使用CLUSTER REPLICATE [NODE_ID]可以设置当前节点作为所选节点的slave节点。

设置key值为test的“hello”,可以看到该值被存放在58.87.123.28:6384所管理的6918号哈希槽(从上图可以看到58.87.123.28:6384节点的被分配的哈希槽范围为4096-8191)
使用另一个节点连入redis,获取key为test的值,会从集群的所有节点中去查找,然后自动转入到58.87.123.28:6384 这个节点,在其所管理的6918哈希槽中取出该key所对应的值。
谢谢!











猜你喜欢

转载自www.cnblogs.com/yexi1997/p/fd305984ce76de394c5105c54c5f45fe.html