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

Docker를 기반으로 Redis 클러스터를 구축하는 방법

王林
王林앞으로
2023-05-30 12:46:071371검색

환경: Docker + (Redis:5.0.5 * 3)

1. 이미지 가져오기

docker  pull  redis:5.0.5

Docker를 기반으로 Redis 클러스터를 구축하는 방법

2 Redis 컨테이너 만들기

3개의 Redis 컨테이너 만들기:

  • redis-node1: 6379

  • redis-node2: 6380

  • redis-node3: 6381

docker create --name redis-node1 -v /data/redis-data/node1:/data -p 6379:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf

docker create --name redis-node2 -v /data/redis-data/node2:/data -p 6380:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf

docker create --name redis-node3 -v /data/redis-data/node3:/data -p 6381:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf

Docker를 기반으로 Redis 클러스터를 구축하는 방법

3. 클러스터를 시작하고 형성하세요

컨테이너를 시작하세요

먼저 docker start 명령을 전달하세요. code> 3개의 Redis 컨테이너 시작: <code>docker start来启动3个Redis容器:

Docker를 기반으로 Redis 클러스터를 구축하는 방법

执行完运行命令后检查一下容器的启动情况:

Docker를 기반으로 Redis 클러스터를 구축하는 방법

如果出现上图情况,Exited (1) 3 seconds ago,可以通过 docker logs 查看:

Docker를 기반으로 Redis 클러스터를 구축하는 방법

如上提示的是权限问题,我们尝试修改一下权限:

chmod -R  777 /data

启动成功后如下图所示:

Docker를 기반으로 Redis 클러스터를 구축하는 방법

组建集群

查看3个Redis在Docker中分配的ip结点信息:

执行「docker inspect redis-node1」得到 redis-node1 ip 信息为:172.17.0.4 
执行「docker inspect redis-node2」得到 redis-node2 ip 信息为:172.17.0.3 
执行「docker inspect redis-node3」得到 redis-node3 ip 信息为:172.17.0.2

Docker를 기반으로 Redis 클러스터를 구축하는 방법

拿到 ip 信息后(每个人的ip信息可能不一样),接下来进入某一个容器进行组建集群:

# 这里以进入 node1 为例
docker exec -it redis-node1 /bin/bash

# 接着执行组建集群命令(请根据自己的ip信息进行拼接)
redis-cli --cluster create 172.17.0.2:6379  172.17.0.3:6379  172.17.0.4:6379 --cluster-replicas 0

Docker를 기반으로 Redis 클러스터를 구축하는 방법

ok,此时集群搭建完了,我们接下来测试一下。

测试集群

使用 redis-cli -c 命令连接到集群结点,然后 set 值,set 值之后会自动重定向到 0.2 ip地址,然后通过 get 获取一下,获取成功证明集群有效。

Docker를 기반으로 Redis 클러스터를 구축하는 방법

4、存在的问题

按照如上的步骤,虽然集群搭建成功了,但其实还是有点问题的,由于集群结点中的 ip地址 是docket内部分配的,如:172.17.0.2 等,如果使用 redis集群 的项目跟集群不在一台服务器上,那么项目是没法使用集群的,因为是访问不通的。

Docker를 기반으로 Redis 클러스터를 구축하는 방법

一种解决方案是让Docker使用 host模式 的网络连接类型,Docker在使用host模式下创建的容器是没有自己独立的网络命名空间的,是跟物理机共享一个网络空间,进而可以共享物理机的所有端口与IP,这样就可以让公共网络直接访问容器了,尽管这种方式有安全隐患,但目前来说还没找到其他可行性模式。

就存在的问题我们重新采用 host模式,重新创建一下容器:

1、停止已运行的容器
docker stop redis-node1 redis-node2 redis-node3
2、删除之前创建的容器
docker rm redis-node1 redis-node2 redis-node3

# 清空上面创建的配置文件
rm -rf /data/redis-data/node*
3、重新基于host模式创建
docker create --name redis-node1 --net host -v /data/redis-data/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379

docker create --name redis-node2 --net host -v /data/redis-data/node2:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380

docker create --name redis-node3 --net host -v /data/redis-data/node3:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381

跟之前创建命令不同,一是指定了 --net 网络类型为 host,二是这种情况下就不需要端口映射了,比如 -p 6379:6379,因为此时需要对外共享容器端口服务,所以只需要指定对外暴露的端口 -p 6379-p 6380 等。

Docker를 기반으로 Redis 클러스터를 구축하는 방법

4、启动容器并组建集群
# 启动命令
docker start redis-node1 redis-node2 redis-node3

# 进入某一个容器
docker exec -it redis-node1 /bin/bash

# 组建集群,10.211.55.4为当前物理机的ip地址
redis-cli --cluster create 10.211.55.4:6379  10.211.55.4:6380  10.211.55.4:6381 --cluster-replicas 0

Docker를 기반으로 Redis 클러스터를 구축하는 방법

5、查看集群信息
root@CentOS7:/data# redis-cli
127.0.0.1:6379> cluster nodes
72c291c32815194b64d1f6d0fdf771f5cc04e14a 10.211.55.4:6380@16380 master - 0 1590905997358 2 connected 5461-10922
6a595b67bbff15c94e5874c2d2cd556d6a6a6c17 10.211.55.4:6381@16381 master - 0 1590905998362 3 connected 10923-16383
4e3dbdc8f835dcbc38291c88f08165ee51d53d3d 10.211.55.4:6379@16379 myself,master - 0 1590905997000 1 connected 0-5460
127.0.0.1:6379>
6、测试集群

使用 redis-cli -c 连接到集群上,set

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

Docker를 기반으로 Redis 클러스터를 구축하는 방법실행 명령을 실행한 후 컨테이너의 시작을 확인하세요:

🎜Docker 기반 Redis 클러스터 구축 방법🎜🎜위의 상황이 발생하면 (1) 3초 전에 종료되는 경우 docker 로그를 통해 확인할 수 있습니다. >: 🎜🎜Docker 기반 Redis 클러스터 구축 방법🎜🎜 위 프롬프트는 권한 문제이므로 수정하려고 합니다. 다음 권한: 🎜
root@CentOS7:/data# redis-cli -c
127.0.0.1:6379> set wxiaowei 123
-> Redirected to slot [7515] located at 10.211.55.4:6380
OK
10.211.55.4:6380> get wxiaowei
"123"
🎜성공적인 시작 후 아래와 같이: 🎜🎜Docker 기반 Redis 클러스터 구축 방법🎜🎜Build a Cluster🎜🎜Docker에 할당된 3개의 Redis의 IP 노드 정보 보기: 🎜rrreee🎜Docker 기반 Redis 클러스터 구축 방법🎜🎜IP 정보(모두의 IP 정보)를 얻은 후 다를 수 있음) 그런 다음 특정 컨테이너를 입력하여 클러스터를 형성합니다. :🎜rrreee🎜 Docker를 기반으로 Redis 클러스터를 구축하는 방법🎜🎜ok, 이제 클러스터가 설정되었으므로 다음으로 테스트해 보겠습니다. 🎜🎜클러스터 테스트🎜🎜 redis-cli -c 명령을 사용하여 클러스터 노드에 연결한 후 값을 설정하면 자동으로 0.2 IP 주소로 리디렉션됩니다. 그런 다음 get을 통해 가져오면 클러스터가 작동하는지 증명할 수 있습니다. 🎜🎜Docker 기반 Redis 클러스터 구축 방법🎜

4. 기존 문제🎜🎜위 단계를 따르면 클러스터가 성공적으로 구축되었지만 클러스터 노드의 ip 주소가 내부적으로 할당되었기 때문에 여전히 몇 가지 문제가 있습니다. 172.17.0.2 등과 같은 도크. redis 클러스터를 사용하는 프로젝트가 클러스터와 동일한 서버에 없으면 프로젝트는 클러스터를 사용할 수 없습니다. 접근할 수 없습니다. 🎜🎜Docker 기반 Redis 클러스터 구축 방법🎜🎜솔루션 이는 Docker호스트 모드를 사용하도록 허용하는 네트워크 연결 유형입니다. 호스트 모드를 사용하여 Docker에서 생성한 컨테이너입니다. 자체 독립적인 네트워크 네임스페이스를 사용하여 물리적 시스템과 네트워크 공간을 공유한 다음 물리적 시스템의 모든 포트와 IP를 공유할 수 있으므로 공용 네트워크에서 직접 액세스할 수 있습니다. 컨테이너.이 방법에는 보안 위험이 있지만 지금까지 다른 실행 가능한 모드는 발견되지 않았습니다. 🎜🎜 기존 문제에 대해 호스트 모드를 다시 채택하고 컨테이너를 다시 만들었습니다. 🎜🎜1. 실행 중인 컨테이너를 중지합니다. 🎜rrreee🎜2. 이전에 만든 컨테이너를 삭제합니다. 🎜rrreee🎜3. Re-based 호스트 모드에서 🎜rrreee🎜 생성은 이전 생성 명령과 다릅니다. 먼저 --net의 네트워크 유형이 host로 지정됩니다. 이 경우 컨테이너 포트 서비스를 외부에 공유해야 하므로 -p 6379:6379와 같은 포트 매핑이 필요하지 않으므로 외부에 노출되는 포트 만 지정하면 됩니다. >-p 6379, -p 6380 등. 🎜🎜Docker 기반 Redis 클러스터 구축 방법🎜🎜4. 컨테이너 시작 및 클러스터 구축🎜rrreee🎜다음을 기반으로 Redis 클러스터를 구축하는 방법 Docker🎜🎜 5. 클러스터 정보를 확인합니다🎜rrreee🎜6. 클러스터를 테스트합니다🎜🎜 redis-cli -c를 사용하여 클러스터에 연결하고, set 값을 입력한 다음 다른 노드에서 값을 가져옵니다. 성공했는지 확인하세요. 🎜rrreee🎜🎜🎜

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

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제