>  기사  >  데이터 베이스  >  Redis 클러스터를 구축하는 방법

Redis 클러스터를 구축하는 방법

步履不停
步履不停원래의
2019-06-24 10:57:482195검색

Redis 클러스터를 구축하는 방법

설치 환경 및 버전 소개

두 개의 가상 머신을 사용하여 6개의 노드를 시뮬레이션하고, 한 머신에는 3개의 노드가 있으며, 3개의 마스터와 3개의 슬레이브 환경을 만듭니다.

redis는 redis-3.2.4 버전을 사용합니다.

두 개의 가상 머신은 모두 CentOS입니다. 하나는 CentOS6.5(IP: 192.168.31.245)이고 하나는 CentOS7(IP: 192.168.31.210)입니다.

설치 과정

1. 다운로드하고 압축을 푼다

<br>
cd /root/software
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz <br>

2. 编译安装

cd redis-3.2.4make && make install

3. 将 redis-trib.rb 复制到 /usr/local/bin 目录下

cd src
cp redis-trib.rb /usr/local/bin/  

4. 创建 Redis 节点

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

mkdir redis_cluster  

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

mkdir 7000 7001 7002<br>cp redis.conf redis_cluster/7000cp redis.conf redis_cluster/7001cp redis.conf redis_cluster/7002  

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

port  7000                                        //端口7000,7002,7003        
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.31.210),的操作重复以上三步,只是把目录改为7003、7004、7005,对应的配置文件也按照这个规则修改即可

5. 启动各个节点

第一台机器上执行
redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
 
另外一台机器上执行
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf

6. 检查 redis 启动情况

##一台机器<br>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]    
 
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-server12345678910111213
    ##另外一台机器
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
netstat -tlnp | grep redis
tcp        0      0 127.0.0.1:17003         0.0.0.0:*               LISTEN      9957/redis-server 1tcp        0      0 127.0.0.1:17004         0.0.0.0:*               LISTEN      9964/redis-server 1tcp        0      0 127.0.0.1:17005         0.0.0.0:*               LISTEN      9971/redis-server 1tcp        0      0 127.0.0.1:7003          0.0.0.0:*               LISTEN      9957/redis-server 1tcp        0      0 127.0.0.1:7004          0.0.0.0:*               LISTEN      9964/redis-server 1tcp        0      0 127.0.0.1:7005          0.0.0.0:*               LISTEN      9971/redis-server 1

7.创建集群

Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中,第三步中已将它复制到 /usr/local/bin 目录中,可以直接在命令行中使用了。使用下面这个命令即可完成安装。

redis-trib.rb  create  --replicas  1  192.168.31.245:7000 192.168.31.245:7001  192.168.31.245:7002 192.168.31.210:7003  192.168.31.210:7004  192.168.31.210:7005

其中,前三个 ip:port 为第一台机器的节点,剩下三个为第二台机器。

等等,出错了。这个工具是用 ruby 实现的,所以需要安装 ruby。安装命令如下:

yum -y install ruby ruby-devel rubygems rpm-build

gem install redis

redis-trib.rb 명령을 실행한 후 다음 프롬프트가 나타납니다:

Redis 클러스터를 구축하는 방법

#🎜 🎜 #yes를 입력하면 다음과 같은 내용이 나타나며 설치가 성공했음을 알 수 있습니다.

 Redis 클러스터를 구축하는 방법

8. 클러스터 확인

첫 번째 머신과 다른 머신에서 클러스터의 포트 7002 노드를 연결합니다. 7005 노드에 연결합니다. 연결 방법은

redis-cli -h 192.168.31.245 -c -p 7002 입니다. 매개변수 -C를 추가하여 클러스터에 연결합니다. , 위의 redis.conf는 바인딩을 IP 주소로 변경하므로 -h 매개 변수를 생략할 수 없습니다.

노드 7005에서

set hello world 명령을 실행합니다. 실행 결과는 다음과 같습니다. # 🎜🎜## 🎜🎜#

그런 다음 다른 포트 7002에서 hello 키로 콘텐츠를 확인하고 get hello 실행 결과는 다음과 같습니다.

# 🎜🎜## 🎜🎜#

은 클러스터가 정상적으로 작동하고 있음을 나타냅니다.

원리를 간단히 설명Redis 클러스터를 구축하는 방법

redis 클러스터를 설계할 때 분산화와 미들웨어가 고려되었습니다. 즉, 클러스터의 모든 노드는 동등한 관계를 가지며 각 노드는 자체 데이터와 전체 클러스터의 상태를 저장합니다. 각 노드는 다른 모든 노드에 연결되어 있으며 이러한 연결은 활성 상태로 유지되므로 다른 노드에서 데이터를 얻으려면 클러스터의 노드에만 연결하면 됩니다.

Redis 클러스터는 기존의 일관된 해싱을 사용하여 데이터를 할당하지 않고 해시 슬롯이라는 또 다른 방법을 사용하여 데이터를 할당합니다. Redis 클러스터에는 기본적으로 16384개의 슬롯이 할당됩니다. 키를 설정할 때 CRC16 알고리즘을 사용하여 모듈로를 사용하여 해당 슬롯을 얻은 다음 키를 나눕니다. 해시로 슬롯 간격의 노드에서 특정 알고리즘은 CRC16(key) % 16384입니다. 그래서 테스트 중에 set과 get을 보고 포트 7000이 있는 노드로 직접 점프했습니다. 哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的时候看到set 和 get 的时候,直接跳转到了7000端口的节点。

Redis 集群会把数据存在一个 master 节点,然后在这个 master 和其对应的salve 之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的 master 节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的 salve 节点,充当 master 。

需要注意的是:必须要3个或以上

Redis 클러스터는 데이터를 마스터 노드에 저장한 다음 마스터와 해당 슬레이브 간에 데이터를 동기화합니다. 데이터를 읽을 때에도 일관된 해싱 알고리즘에 따라 해당 마스터 노드로부터 데이터를 얻습니다. 마스터가 종료된 경우에만 해당 슬레이브 노드가 마스터 역할을 하기 시작합니다.

마스터 노드가 3개 이상 있어야 한다는 점에 유의해야 합니다. 그렇지 않으면 클러스터 생성 시 실패하고, 살아남은 마스터 노드 수가 전체 노드 수의 절반 미만일 때 실패합니다. , 전체 클러스터가 더 이상 실패합니다. 더 많은 Redis 관련 기술 기사를 보려면 Redis Tutorial

🎜 칼럼을 방문하여 알아보세요! 🎜🎜

위 내용은 Redis 클러스터를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.