热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Redis集群详细搭建教程

Redis集群搭建与简单使用目录Redis集群搭建与简单使用一、安装过程1.下载并解压2.编译安装3.创建Redis节点4.启动各个节点5.检查redis启动情况

Redis集群搭建与简单使用

目录

Redis集群搭建与简单使用

一、安装过程

1. 下载并解压

2. 编译安装

3. 创建 Redis 节点

4. 启动各个节点

5. 检查 redis 启动情况

6.设置防火墙,开放集群端口

7.创建集群

二、集群测试

1.存取测试

2.宕机测试

三、节点添加

1.新增主节点

2.新增从节点

四、节点移除

1.移除主节点

2.移除从节点


 

 

介绍安装环境与版本

两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master、3 salve 环境(必须要3个或以上的主节点,否则在创建集群时会失败)。

redis 采用 redis-5.0.3 版本(5.0版本不需要安装Ruby,使用较为方便,推荐安装)。

两台虚拟机都是 CentOS ,一台 CentOS7.5 (IP:192.168.92.100),一台 CentOS7.5(IP:192.168.92.101)

一、安装过程


1. 下载并解压

[root@localhost software]# cd /root/software
[root@localhost software]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz
[root@localhost software]# tar -zxvf redis-5.0.3.tar.gz

2. 编译安装

[root@localhost software]# cd redis-5.0.3
[root@localhost redis-5.0.3]# make && make install

3. 创建 Redis 节点

首先在 192.168.92.100 机器上 /root/software/redis-5.0.3 目录下创建 redis_cluster 目录;

[root@localhost redis-5.0.3]# mkdir redis_cluster

在 redis_cluster 目录下,创建名为7000、7001、7002的目录,并将 redis.conf 拷贝到这三个目录中

[root@localhost redis_cluster]# mkdir 7000 7001 7002
[root@localhost redis-5.0.3]# cp redis.conf redis_cluster/7000
[root@localhost redis-5.0.3]# cp redis.conf redis_cluster/7001
[root@localhost redis-5.0.3]# cp redis.conf redis_cluster/7002  

分别修改这三个配置文件,修改如下内容

port 7000 //端口7000,7001,7002
bind 本机ip //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7001,7002
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志

 

 

  • 接着在另外一台机器上(192.168.92.101)重复以上三步(1. 下载并解压;2. 编译安装;3. 创建 Redis 节点)的操作,只是把目录改为7003、7004、7005,对应的配置文件也按照这个规则修改即可

4. 启动各个节点

第一台机器(192.168.92.100)上执行

[root@localhost 7000]# redis-server redis.conf
[root@localhost 7001]# redis-server redis.conf
[root@localhost 7002]# redis-server redis.conf

另外一台机器(192.168.92.101)上执行

[root@localhost 7003]# redis-server redis.conf
[root@localhost 7004]# redis-server redis.conf
[root@localhost 7005]# redis-server redis.conf

注:可以写一个命令脚本start-all.sh ,来启动各个节点

cd 7000
redis-server redis.conf
cd ..
cd 7001
redis-server redis.conf
cd ..
cd 7002
redis-server redis.conf

设置权限启动

[root@localhost redis-cluster]# chmod 777 start-all.sh 
[root@localhost redis-cluster]# ./start-all.sh

 

5. 检查 redis 启动情况

##一台机器(192.168.92.100)

[root@localhost redis-5.0.3]# ps -ef | grep redis
root 61020 1 0 02:14 ? 00:00:01 redis-server 127.0.0.1:7000 [cluster]
root 61024 1 0 02:14 ? 00:00:01 redis-server 127.0.0.1:7001 [cluster]
root 61029 1 0 02:14 ? 00:00:01 redis-server 127.0.0.1:7002 [cluster] [root@localhost redis-5.0.3]# netstat -tnlp | grep redis
tcp 0 0 127.0.0.1:17000 0.0.0.0:* LISTEN 61020/redis-server
tcp 0 0 127.0.0.1:17001 0.0.0.0:* LISTEN 61024/redis-server
tcp 0 0 127.0.0.1:17002 0.0.0.0:* LISTEN 61029/redis-server
tcp 0 0 127.0.0.1:7000 0.0.0.0:* LISTEN 61020/redis-server
tcp 0 0 127.0.0.1:7001 0.0.0.0:* LISTEN 61024/redis-server
tcp 0 0 127.0.0.1:7002 0.0.0.0:* LISTEN 61029/redis-server

##另外一台机器 

[root@localhost redis-5.0.3]# ps -ef | grep redis
root 9957 1 0 02:32 ? 00:00:01 redis-server 127.0.0.1:7003 [cluster]
root 9964 1 0 02:32 ? 00:00:01 redis-server 127.0.0.1:7004 [cluster]
root 9971 1 0 02:32 ? 00:00:01 redis-server 127.0.0.1:7005 [cluster]
root 10065 4744 0 02:38 pts/0 00:00:00 grep --color=auto redis
[root@localhost redis-5.0.3]# netstat -tlnp | grep redis
tcp 0 0 127.0.0.1:17003 0.0.0.0:* LISTEN 9957/redis-server 1
tcp 0 0 127.0.0.1:17004 0.0.0.0:* LISTEN 9964/redis-server 1
tcp 0 0 127.0.0.1:17005 0.0.0.0:* LISTEN 9971/redis-server 1
tcp 0 0 127.0.0.1:7003 0.0.0.0:* LISTEN 9957/redis-server 1
tcp 0 0 127.0.0.1:7004 0.0.0.0:* LISTEN 9964/redis-server 1
tcp 0 0 127.0.0.1:7005 0.0.0.0:* LISTEN 9971/redis-server 1

6.设置防火墙,开放集群端口

两台机器的防火墙我们直接关掉(如果不关掉,在下面创建集群的时候,会提示:Could not connect to Redis at 192.168.92.101:7003: No route to host)

[root@localhost redis-5.0.3]# systemctl stop firewalld.service

7.创建集群

Redis 官方提供了 redis-cli (5.0之前的版本是使用的 redis-trib.rb ,需要安装ruby,不推荐)这个工具,可以直接在命令行中使用了。使用下面这个命令即可完成安装。

[root@localhost redis-5.0.3]# redis-cli --cluster create 192.168.92.100:7000 192.168.92.100:7001 192.168.92.100:7002 192.168.92.101:7003 192.168.92.101:7004 192.168.92.101:7005 --cluster-replicas 1

  • redis-cli --cluster create,创建一个新的集群;
  • 前三个 ip:port 为第一台机器的节点,剩下三个为第二台机器;
  • 选项 --cluster-replicas 1 表示为集群中的每个主节点创建一个从节点。

接着, redis-cli会输出一份配置信息,如下:

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.92.101:7004 to 192.168.92.100:7000
Adding replica 192.168.92.100:7002 to 192.168.92.101:7003
Adding replica 192.168.92.101:7005 to 192.168.92.100:7001
M: 5c55309b5a1cd704a056cf80be308964e757f7a1 192.168.92.100:7000slots:[0-5460] (5461 slots) master
M: 4cbdd0a0b1a8e9334ad97a3df577e8ab365e4f7a 192.168.92.100:7001slots:[10923-16383] (5461 slots) master
S: b8b90944c7c65511da0d0b04004d502015f599dc 192.168.92.100:7002replicates c4d9fdc43a459d19bb78378b0f801b70f4dd70ec
M: c4d9fdc43a459d19bb78378b0f801b70f4dd70ec 192.168.92.101:7003slots:[5461-10922] (5462 slots) master
S: 60818181c7a6bb007b3628ef4adf84678359f613 192.168.92.101:7004replicates 5c55309b5a1cd704a056cf80be308964e757f7a1
S: 57b19e309ec580857968f113de4bd2b77aa05ac1 192.168.92.101:7005replicates 4cbdd0a0b1a8e9334ad97a3df577e8ab365e4f7a
Can I set the above configuration? (type 'yes' to accept):

 

确认无误后,输入yes , redis-cli 会将配置应用到各个节点,并连接起(join)各个节点,让各个节点开始通讯。出现如下内容,说明安装成功。

>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
....
>>> Performing Cluster Check (using node 192.168.92.100:7000)
M: 5c55309b5a1cd704a056cf80be308964e757f7a1 192.168.92.100:7000slots:[0-5460] (5461 slots) master1 additional replica(s)
M: 4cbdd0a0b1a8e9334ad97a3df577e8ab365e4f7a 192.168.92.100:7001slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 57b19e309ec580857968f113de4bd2b77aa05ac1 192.168.92.101:7005slots: (0 slots) slavereplicates 4cbdd0a0b1a8e9334ad97a3df577e8ab365e4f7a
S: 60818181c7a6bb007b3628ef4adf84678359f613 192.168.92.101:7004slots: (0 slots) slavereplicates 5c55309b5a1cd704a056cf80be308964e757f7a1
S: b8b90944c7c65511da0d0b04004d502015f599dc 192.168.92.100:7002slots: (0 slots) slavereplicates c4d9fdc43a459d19bb78378b0f801b70f4dd70ec
M: c4d9fdc43a459d19bb78378b0f801b70f4dd70ec 192.168.92.101:7003slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

二、集群测试


1.存取测试

示例:

访问192.168.92.100的7000端口对应的redis节点

[root@localhost ~]# redis-cli -c -h 192.168.92.100 -p 7000
192.168.92.100:7000>

参数 -c 可连接到集群,因为 redis.conf 将 bind 改为了ip地址,所以 -h 参数不能省略,-p 参数为端口号。

写入数据,进行集群的验证

192.168.92.100:7000> set name andy
-> Redirected to slot [5798] located at 192.168.92.101:7003
OK
192.168.92.101:7003>

发现redis set name andy之后重定向到 192.168.92.101机器 redis 7003这个节点

我们在这个集群中任意一个节点去获取该key的值,假设在192.168.92.100的7002端口对应的redis节点上去获取

[root@localhost ~]# redis-cli -c -h 192.168.92.100 -p 7002
192.168.92.100:7002> get name
-> Redirected to slot [5798] located at 192.168.92.101:7003
"andy"
192.168.92.101:7003>

 7002节点,从上面也是自动跳转至7003获取值,这也是redis cluster的特点,它是去中心化,每个节点都是对等的,连接哪个节点都可以获取和设置数据。

2.宕机测试

现在模拟将7003节点挂掉,按照redis-cluster原理会选举会将 7003的从节点7002选举为主节点。

[root@localhost ~]# ps -ef | grep redis
root 13288 1 0 17:01 ? 00:00:17 redis-server 192.168.92.101:7003 [cluster]
root 13293 1 0 17:01 ? 00:00:18 redis-server 192.168.92.101:7004 [cluster]
root 13298 1 0 17:01 ? 00:00:17 redis-server 192.168.92.101:7005 [cluster]
root 13435 13417 0 19:29 pts/1 00:00:00 grep --color=auto redis
[root@localhost ~]# kill 13288
[root@localhost ~]# ps -ef | grep redis
root 13293 1 0 17:01 ? 00:00:18 redis-server 192.168.92.101:7004 [cluster]
root 13298 1 0 17:01 ? 00:00:18 redis-server 192.168.92.101:7005 [cluster]
root 13437 13417 0 19:30 pts/1 00:00:00 grep --color=auto redis

再查看集群中的7003节点

[root@localhost ~]# redis-cli --cluster check 192.168.92.101:7003
Could not connect to Redis at 192.168.92.101:7003: Connection refused
[root@localhost ~]# redis-cli --cluster check 192.168.92.100:7002
Could not connect to Redis at 192.168.92.101:7003: Connection refused
192.168.92.100:7002 (b8b90944...) -> 1 keys | 5462 slots | 0 slaves.
192.168.92.100:7001 (4cbdd0a0...) -> 0 keys | 5461 slots | 1 slaves.
192.168.92.100:7000 (5c55309b...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 1 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.92.100:7002)
M: b8b90944c7c65511da0d0b04004d502015f599dc 192.168.92.100:7002slots:[5461-10922] (5462 slots) master
S: 57b19e309ec580857968f113de4bd2b77aa05ac1 192.168.92.101:7005slots: (0 slots) slavereplicates 4cbdd0a0b1a8e9334ad97a3df577e8ab365e4f7a
S: 60818181c7a6bb007b3628ef4adf84678359f613 192.168.92.101:7004slots: (0 slots) slavereplicates 5c55309b5a1cd704a056cf80be308964e757f7a1
M: 4cbdd0a0b1a8e9334ad97a3df577e8ab365e4f7a 192.168.92.100:7001slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: 5c55309b5a1cd704a056cf80be308964e757f7a1 192.168.92.100:7000slots:[0-5460] (5461 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

可以看到集群连接不了7003节点,而7002由原来的S转换为M节点,代替了原来的7003节点。

所有会有最后一个说明All 16384 slots covered. 所有哈希槽都可覆盖了;

我们可以获取name值:

[root@localhost ~]# redis-cli -c -h 192.168.92.100 -p 7000
192.168.92.100:7000> get name
-> Redirected to slot [5798] located at 192.168.92.100:7002
"andy"
192.168.92.100:7002>

从7000节点连入,自动跳转到7002节点,并且获取name值。

现在我们将7003节点恢复,看是否会自动加入集群中以及充当的M还是S节点。

[root@localhost 7003]# redis-server redis.conf
13451:C 15 Feb 2019 19:43:36.259 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
13451:C 15 Feb 2019 19:43:36.260 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=13451, just started
13451:C 15 Feb 2019 19:43:36.260 # Configuration loaded

 再check一下7003节点

[root@localhost redis_cluster]# redis-cli --cluster check 192.168.92.101:7003
192.168.92.100:7000 (7980a27f...) -> 3 keys | 5461 slots | 1 slaves.
192.168.92.100:7001 (255fe370...) -> 0 keys | 5461 slots | 1 slaves.
192.168.92.100:7002 (5ad1bc99...) -> 2 keys | 5462 slots | 1 slaves.
[OK] 5 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.92.101:7003)
S: 391fb1127f7ccc30472d3761719272aa1dbe38f1 192.168.92.101:7003slots: (0 slots) slavereplicates 5ad1bc995f4af9c2d8aa862ec3d5902633a29b54
M: 7980a27ff9c1f37d8f185c1419b0445b9da1a32b 192.168.92.100:7000slots:[0-5460] (5461 slots) master1 additional replica(s)
S: 0b05268b52f540dddcfe17f56e17d97eb41b759f 192.168.92.101:7004slots: (0 slots) slavereplicates 7980a27ff9c1f37d8f185c1419b0445b9da1a32b
S: 9adfa4f073c0949861559de79cc19a4fba368307 192.168.92.101:7005slots: (0 slots) slavereplicates 255fe37083527c29fc352486880ecad297d5ff58
M: 255fe37083527c29fc352486880ecad297d5ff58 192.168.92.100:7001slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: 5ad1bc995f4af9c2d8aa862ec3d5902633a29b54 192.168.92.100:7002slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

可以看到7003节点变成了5ad1bc995f4af9c2d8aa862ec3d5902633a29b54  7002的从节点。

补充说明:

1.节点的fail

节点的fail是通过集群中超过半数的节点检测失效时才生效,这里会触发选举,将slave升级为master

2.集群的fail

  • 如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完整时进入fail状态(redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败);
  • 如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态。

三、节点添加


1.新增主节点

待更新...

2.新增从节点

待更新...

四、节点移除


1.移除主节点

待更新...

2.移除从节点

待更新...


推荐阅读
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
author-avatar
壹起等绿灯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有