A2-2-Linux下 Redis 单机集群安装(二)

A2-2-Linux下 Redis 单机集群安装(二)

上篇决定了以编译安装搭建的redis作为单机,本次就以两台同样配置下的redis单机做一个简单的redis集群,并初步生成对redis集群的管理模式。  

参考官网中文版:http://redisdoc.com/topic/cluster-spec.html

一、环境配置

redis-2:10.0.0.12、CentOS 7.6

redis-3:10.0.0.13、CentOS 7.6

由于设备问题,现在还未在服务器上使用,就在本机建了两台虚拟机作为测试

二、集群预设

        Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存。Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是现在互联网企业动辄大几百G的数据,可完全是没法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。
Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。
Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。Redis 集群不像单机 Redis 那样支持多数据库功能, 集群只使用默认的 0 号数据库, 并且不能使用 SELECT index 命令。

       本次采用redis官方的redis-cluster集群建设。工具官网推荐,至少有三个主节点,按照标准,再来三个从节点,那就是需要六台主机。这里作为先步测试,就不做六台虚拟机了,反正不跑数据,两台够了。为了适应多种情况,就完全把它们当做不同服务器得了。本次对应的端口号20001的“2”表示服务器在12上,“0001”表示第一台服务器,在多台服务器环境里,端口号应为一致,统一采用从40001开始的端口号表示实例。

主机1:主节点1:redis-01:10.0.0.12:20001

主机2:主节点2:redis-02:10.0.0.13:30002

主机3:主节点3:redis-03:10.0.0.12:20003

主机4:从节点1:redis-04:10.0.0.13:30004

主机5:从节点2:redis-05:10.0.0.12:20005

主机6:从节点3:redis-06:10.0.0.13:30006

拓扑图大概是这样:

三、集群搭建

redis-2    配置

主机1:主节点1:redis-01:10.0.0.12:20001

主机3:主节点3:redis-03:10.0.0.12:20003

主机5:从节点2:redis-05:10.0.0.12:20005

 

1、创建节点集群目录

 

mkdir /usr/local/redis-cluster -p

2、创建主节点1:redis-01实例

 

cp -r /usr/local/redis/bin/ /usr/local/redis-cluster/redis-01

cp /usr/local/redis/redis.conf /usr/local/redis-cluster/redis-01/redis.conf

3、更改主节点1:redis-01实例配置

删除原来的“dump.rdb”快照文件

端口号改为对应的20001端口:port 20001

打开后台模式(上一篇已做):daemonize yes

注释仅本机连接(上一篇已做):# bind 127.0.0.1

注释密码(上一篇已做,还原它):# requirepass 

打开集群创建模式: cluster-enabled yes

指定日志文件:logfile ""

 

cd /usr/local/redis-cluster/redis-01/

rm -f dump.rdb

sed -i -e "s\port 6379\port 20001\g" redis.conf

sed -i -e "s\# cluster-enabled yes\cluster-enabled yes\g" redis.conf

sed -i -e "s\requirepass 123456\#requirepass 123456\g" redis.conf

sed -i -e 's\logfile ""\logfile "/var/log/redis/redis-01.log"\g' redis.conf

4、重复“2”“3”操作,设置主节点3、从节点2

 

cp -r /usr/local/redis/bin/ /usr/local/redis-cluster/redis-03

cp /usr/local/redis/redis.conf /usr/local/redis-cluster/redis-03/redis.conf

cd /usr/local/redis-cluster/redis-03/

rm -f dump.rdb

sed -i -e "s\port 6379\port 20003\g" redis.conf

sed -i -e "s\# cluster-enabled yes\cluster-enabled yes\g" redis.conf

sed -i -e "s\requirepass 123456\#requirepass 123456\g" redis.conf

sed -i -e 's\logfile ""\logfile "/var/log/redis/redis-03.log"\g' redis.conf

 

 

cp -r /usr/local/redis/bin/ /usr/local/redis-cluster/redis-05

cp /usr/local/redis/redis.conf /usr/local/redis-cluster/redis-05/redis.conf

cd /usr/local/redis-cluster/redis-05/

rm -f dump.rdb

sed -i -e "s\port 6379\port 20005\g" redis.conf

sed -i -e "s\# cluster-enabled yes\cluster-enabled yes\g" redis.conf

sed -i -e "s\requirepass 123456\#requirepass 123456\g" redis.conf

sed -i -e 's\logfile ""\logfile "/var/log/redis/redis-05.log"\g' redis.conf

5、创建启动脚本

 

cd /usr/local/redis-cluster

echo '#!/bin/bash' > all-start.sh

echo ' ' >> all-start.sh

echo 'cd /usr/local/redis-cluster/redis-01/' >> all-start.sh

echo './redis-server redis.conf' >> all-start.sh

echo 'cd /usr/local/redis-cluster/redis-03/' >> all-start.sh

echo './redis-server redis.conf' >> all-start.sh

echo 'cd /usr/local/redis-cluster/redis-05/' >> all-start.sh

echo './redis-server redis.conf' >> all-start.sh

chmod +x all-start.sh

6、启动

 

./all-start.sh

先不管后面出现的port+10000的端口了

这是正常的

 

redis-3    配置

主机2:主节点2:redis-02:10.0.0.13:30002

主机4:从节点1:redis-04:10.0.0.13:30004

主机6:从节点3:redis-06:10.0.0.13:30006

 

 

mkdir /usr/local/redis-cluster -p

cp -r /usr/local/redis/bin/ /usr/local/redis-cluster/redis-02

cp -r /usr/local/redis/bin/ /usr/local/redis-cluster/redis-04

cp -r /usr/local/redis/bin/ /usr/local/redis-cluster/redis-06

cp /usr/local/redis/redis.conf /usr/local/redis-cluster/redis-02/redis.conf

cp /usr/local/redis/redis.conf /usr/local/redis-cluster/redis-04/redis.conf

cp /usr/local/redis/redis.conf /usr/local/redis-cluster/redis-06/redis.conf

rm -f /usr/local/redis-cluster/redis-02/dump.rdb

rm -f /usr/local/redis-cluster/redis-04/dump.rdb

rm -f /usr/local/redis-cluster/redis-06/dump.rdb

cd /usr/local/redis-cluster/redis-02

sed -i -e "s\port 6379\port 30002\g" redis.conf

sed -i -e "s\# cluster-enabled yes\cluster-enabled yes\g" redis.conf

sed -i -e "s\requirepass 123456\#requirepass 123456\g" redis.conf

sed -i -e 's\logfile ""\logfile "/var/log/redis/redis-02.log"\g' redis.conf

cd /usr/local/redis-cluster/redis-04

sed -i -e "s\port 6379\port 30004\g" redis.conf

sed -i -e "s\# cluster-enabled yes\cluster-enabled yes\g" redis.conf

sed -i -e "s\requirepass 123456\#requirepass 123456\g" redis.conf

sed -i -e 's\logfile ""\logfile "/var/log/redis/redis-04.log"\g' redis.conf

cd /usr/local/redis-cluster/redis-06

sed -i -e "s\port 6379\port 30006\g" redis.conf

sed -i -e "s\# cluster-enabled yes\cluster-enabled yes\g" redis.conf

sed -i -e "s\requirepass 123456\#requirepass 123456\g" redis.conf

sed -i -e 's\logfile ""\logfile "/var/log/redis/redis-06.log"\g' redis.conf

cd /usr/local/redis-cluster

echo '#!/bin/bash' > all-start.sh

echo ' ' >> all-start.sh

echo 'cd /usr/local/redis-cluster/redis-02/' >> all-start.sh

echo './redis-server redis.conf' >> all-start.sh

echo 'cd /usr/local/redis-cluster/redis-04/' >> all-start.sh

echo './redis-server redis.conf' >> all-start.sh

echo 'cd /usr/local/redis-cluster/redis-06/' >> all-start.sh

echo './redis-server redis.conf' >> all-start.sh

chmod +x all-start.sh

启动

 

四、创建集群

添加集群创建工具:redis-trib

通过使用 Redis 集群命令行工具 redis-trib , 编写节点配置文件的工作可以非常容易地完成: redis-trib 位于 Redis 源码的 src 文件夹中, 它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。但是!

redis版本在5之前的集群需要安装ruby环境(这很耗时间,且有各种问题需要解决),redis5.0.0之后已经将redis-trib.rb 脚本的功能全部集成到redis-cli之中了。本文基于redis-cli的-cluster来搭建集群。所以,只要有redis-cli命令即可

 

cd /usr/local/redis-cluster

cp /opt/redis-5.0.7/src/redis-cli .

创建集群:前三个一定是主节点

 

./redis-cli --cluster create 10.0.0.12:20001 10.0.0.13:30002 10.0.0.12:20003 10.0.0.13:30004 10.0.0.12:20005 10.0.0.13:30006 --cluster-replicas 1

出现的这个问题值得记录一下,以后有得用

 

[ERR] Node 10.0.0.12:20001 DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

参考:https://blog.csdn.net/michaelehome/article/details/79513002

参考:https://blog.csdn.net/zenmin2015/article/details/78020609

参考:https://www.cnblogs.com/codingmode/p/11133522.html

参考:https://blog.csdn.net/u014756827/article/details/52061987

要将bind开放出来,再清除rdb持久化文件和nodes.conf文件,生成集群配置文件

redis-02:

 

# 杀死redis-server服务

pkill redis-server

# 将#bind 127.0.0.1 开放到 bind 10.0.0.12 10.0.0.13

# 注:这里的操作导致了之后创建时一直卡在“Waiting for the cluster to join”

sed -i -e "s\#bind 127.0.0.1\bind 10.0.0.12 10.0.0.13\g" /usr/local/redis-cluster/redis-01/redis.conf

sed -i -e "s\#bind 127.0.0.1\bind 10.0.0.12 10.0.0.13\g" /usr/local/redis-cluster/redis-03/redis.conf

sed -i -e "s\#bind 127.0.0.1\bind 10.0.0.12 10.0.0.13\g" /usr/local/redis-cluster/redis-05/redis.conf

# 清除原来配置生成的服务器文件 .rdb nodes.conf

rm -f /usr/local/redis-cluster/redis-01/dump.rdb

rm -f /usr/local/redis-cluster/redis-01/nodes.conf

rm -f /usr/local/redis-cluster/redis-03/dump.rdb

rm -f /usr/local/redis-cluster/redis-03/nodes.conf

rm -f /usr/local/redis-cluster/redis-05/dump.rdb

rm -f /usr/local/redis-cluster/redis-05/nodes.conf

# 开放集群节点配置文件路径

sed -i -e "s\# cluster-config-file nodes-6379.conf\cluster-config-file nodes-01.conf\g" /usr/local/redis-cluster/redis-01/redis.conf

sed -i -e "s\# cluster-config-file nodes-6379.conf\cluster-config-file nodes-03.conf\g" /usr/local/redis-cluster/redis-03/redis.conf

sed -i -e "s\# cluster-config-file nodes-6379.conf\cluster-config-file nodes-05.conf\g" /usr/local/redis-cluster/redis-05/redis.conf

# 这里是“Waiting for the cluster to join”出错后换的,要将原来生成的服务器文件删掉 这里不重复记录了

# pkill redis-server

# bind 只绑定本机ip

sed -i -e "s\bind 10.0.0.12 10.0.0.13\bind 10.0.0.12\g" /usr/local/redis-cluster/redis-01/redis.conf

sed -i -e "s\bind 10.0.0.12 10.0.0.13\bind 10.0.0.12\g" /usr/local/redis-cluster/redis-03/redis.conf

sed -i -e "s\bind 10.0.0.12 10.0.0.13\bind 10.0.0.12\g" /usr/local/redis-cluster/redis-05/redis.conf

# 清除原来集群生成的配置文件

rm -fr /usr/local/redis-cluster/redis-01/nodes-01.conf

rm -fr /usr/local/redis-cluster/redis-03/nodes-03.conf

rm -fr /usr/local/redis-cluster/redis-05/nodes-05.conf

redis-03:

 

pkill redis-server

sed -i -e "s\#bind 127.0.0.1\bind 10.0.0.12 10.0.0.13\g" /usr/local/redis-cluster/redis-02/redis.conf

sed -i -e "s\#bind 127.0.0.1\bind 10.0.0.12 10.0.0.13\g" /usr/local/redis-cluster/redis-04/redis.conf

sed -i -e "s\#bind 127.0.0.1\bind 10.0.0.12 10.0.0.13\g" /usr/local/redis-cluster/redis-06/redis.conf

rm -f /usr/local/redis-cluster/redis-02/dump.rdb

rm -f /usr/local/redis-cluster/redis-02/nodes.conf

rm -f /usr/local/redis-cluster/redis-04/dump.rdb

rm -f /usr/local/redis-cluster/redis-04/nodes.conf

rm -f /usr/local/redis-cluster/redis-06/dump.rdb

rm -f /usr/local/redis-cluster/redis-06/nodes.conf

sed -i -e "s\# cluster-config-file nodes-6379.conf\cluster-config-file nodes-02.conf\g" /usr/local/redis-cluster/redis-02/redis.conf

sed -i -e "s\# cluster-config-file nodes-6379.conf\cluster-config-file nodes-04.conf\g" /usr/local/redis-cluster/redis-04/redis.conf

sed -i -e "s\# cluster-config-file nodes-6379.conf\cluster-config-file nodes-06.conf\g" /usr/local/redis-cluster/redis-06/redis.conf

pkill redis-server

sed -i -e "s\bind 10.0.0.12 10.0.0.13\bind 10.0.0.13\g" /usr/local/redis-cluster/redis-02/redis.conf

sed -i -e "s\bind 10.0.0.12 10.0.0.13\bind 10.0.0.13\g" /usr/local/redis-cluster/redis-04/redis.conf

sed -i -e "s\bind 10.0.0.12 10.0.0.13\bind 10.0.0.13\g" /usr/local/redis-cluster/redis-06/redis.conf

rm -fr /usr/local/redis-cluster/redis-02/nodes-02.conf

rm -fr /usr/local/redis-cluster/redis-04/nodes-04.conf

rm -fr /usr/local/redis-cluster/redis-06/nodes-06.conf

重启集群

 

pkill redis-server

/usr/local/redis-cluster/all-start.sh

重新创建

 

./redis-cli --cluster create 10.0.0.12:20001 10.0.0.13:30002 10.0.0.12:20003 10.0.0.13:30004 10.0.0.12:20005 10.0.0.13:30006 --cluster-replicas 1

等三秒创建成功

 

五、检查

连接一个节点

 

./redis-cli -h 10.0.0.12 -p 20001 -c

存活性:ping

集群状态:cluster info

 

至此 redis集群安装也算是完成了 下一步该讲述集群的使用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值