환경: Docker + (Redis:5.0.5 * 3)
docker pull redis:5.0.5
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 start</ 명령을 전달하세요. code> 3개의 Redis 컨테이너 시작: <code >docker start
来启动3个Redis容器:
执行完运行命令后检查一下容器的启动情况:
如果出现上图情况,Exited (1) 3 seconds ago
,可以通过 docker logs
查看:
如上提示的是权限问题,我们尝试修改一下权限:
chmod -R 777 /data
启动成功后如下图所示:
查看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
拿到 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
ok,此时集群搭建完了,我们接下来测试一下。
使用 redis-cli -c
命令连接到集群结点,然后 set 值,set 值之后会自动重定向到 0.2 ip地址,然后通过 get 获取一下,获取成功证明集群有效。
按照如上的步骤,虽然集群搭建成功了,但其实还是有点问题的,由于集群结点中的 ip地址
是docket内部分配的,如:172.17.0.2
等,如果使用 redis集群
的项目跟集群不在一台服务器上,那么项目是没法使用集群的,因为是访问不通的。
一种解决方案是让Docker使用 host模式
的网络连接类型,Docker在使用host模式
下创建的容器是没有自己独立的网络命名空间的,是跟物理机共享一个网络空间,进而可以共享物理机的所有端口与IP,这样就可以让公共网络直接访问容器了,尽管这种方式有安全隐患,但目前来说还没找到其他可行性模式。
就存在的问题我们重新采用 host模式
,重新创建一下容器:
docker stop redis-node1 redis-node2 redis-node3
docker rm redis-node1 redis-node2 redis-node3 # 清空上面创建的配置文件 rm -rf /data/redis-data/node*
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 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
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>
使用 redis-cli -c
连接到集群上,set
실행 명령을 실행한 후 컨테이너의 시작을 확인하세요:
🎜🎜🎜위의 상황이 발생하면(1) 3초 전에 종료
되는 경우 docker 로그</code를 통해 확인할 수 있습니다. >: 🎜🎜<img src= "https://img.php.cn/upload/article/000/465/014/168542197091625.png" alt="Docker 기반 Redis 클러스터 구축 방법" />🎜🎜 위 프롬프트는 권한 문제이므로 수정하려고 합니다. 다음 권한: 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush: html; toolbar: false">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"</pre><div class="contentsignin">로그인 후 복사</div></div>🎜성공적인 시작 후 아래와 같이: 🎜🎜<img src="https://img.php.cn/upload/article/000/%20465/014/168542197028579.png" alt="Docker 기반 Redis 클러스터 구축 방법">🎜🎜Build a Cluster🎜🎜Docker에 할당된 3개의 Redis의 IP 노드 정보 보기: 🎜rrreee🎜<img src="https://img.php.cn/upload/article/%20000/465/014/168542197174292.png" alt="Docker 기반 Redis 클러스터 구축 방법">🎜🎜IP 정보(모두의 IP 정보)를 얻은 후 다를 수 있음) 그런 다음 특정 컨테이너를 입력하여 클러스터를 형성합니다. :🎜rrreee🎜<img src="https://img.php.cn/upload/article/000/465/014/168542197125049.png" alt=" Docker를 기반으로 Redis 클러스터를 구축하는 방법">🎜🎜ok, 이제 클러스터가 설정되었으므로 다음으로 테스트해 보겠습니다. 🎜🎜클러스터 테스트🎜🎜 <code>redis-cli -c
명령을 사용하여 클러스터 노드에 연결한 후 값을 설정하면 자동으로 0.2 IP 주소로 리디렉션됩니다. 그런 다음 get을 통해 가져오면 클러스터가 작동하는지 증명할 수 있습니다. 🎜🎜🎜ip 주소
가 내부적으로 할당되었기 때문에 여전히 몇 가지 문제가 있습니다. 172.17.0.2
등과 같은 도크. redis 클러스터
를 사용하는 프로젝트가 클러스터와 동일한 서버에 없으면 프로젝트는 클러스터를 사용할 수 없습니다. 접근할 수 없습니다. 🎜🎜🎜🎜솔루션 이는 Docker가 호스트 모드
를 사용하도록 허용하는 네트워크 연결 유형입니다. 호스트 모드
를 사용하여 Docker에서 생성한 컨테이너입니다. 자체 독립적인 네트워크 네임스페이스를 사용하여 물리적 시스템과 네트워크 공간을 공유한 다음 물리적 시스템의 모든 포트와 IP를 공유할 수 있으므로 공용 네트워크에서 직접 액세스할 수 있습니다. 컨테이너.이 방법에는 보안 위험이 있지만 지금까지 다른 실행 가능한 모드는 발견되지 않았습니다. 🎜🎜 기존 문제에 대해 호스트 모드
를 다시 채택하고 컨테이너를 다시 만들었습니다. 🎜🎜1. 실행 중인 컨테이너를 중지합니다. 🎜rrreee🎜2. 이전에 만든 컨테이너를 삭제합니다. 🎜rrreee🎜3. Re-based 호스트 모드에서 🎜rrreee🎜 생성은 이전 생성 명령과 다릅니다. 먼저 --net
의 네트워크 유형이 host
로 지정됩니다. 이 경우 컨테이너 포트 서비스를 외부에 공유해야 하므로 -p 6379:6379
와 같은 포트 매핑이 필요하지 않으므로 외부에 노출되는 포트 만 지정하면 됩니다. >-p 6379
, -p 6380
등. 🎜🎜🎜🎜4. 컨테이너 시작 및 클러스터 구축🎜rrreee🎜🎜🎜 5. 클러스터 정보를 확인합니다🎜rrreee🎜6. 클러스터를 테스트합니다🎜🎜 redis-cli -c
를 사용하여 클러스터에 연결하고, set
값을 입력한 다음 다른 노드에서 값을 가져옵니다. 성공했는지 확인하세요. 🎜rrreee🎜🎜🎜위 내용은 Docker를 기반으로 Redis 클러스터를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!