설치 환경 및 버전 소개
두 개의 가상 머신을 사용하여 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 명령을 실행한 후 다음 프롬프트가 나타납니다:
#🎜 🎜 #yes를 입력하면 다음과 같은 내용이 나타나며 설치가 성공했음을 알 수 있습니다.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 클러스터에는 기본적으로 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个或以上
마스터 노드가 3개 이상
있어야 한다는 점에 유의해야 합니다. 그렇지 않으면 클러스터 생성 시 실패하고, 살아남은 마스터 노드 수가 전체 노드 수의 절반 미만일 때 실패합니다. , 전체 클러스터가 더 이상 실패합니다. 더 많은 Redis 관련 기술 기사를 보려면 Redis Tutorial
위 내용은 Redis 클러스터를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!