환경: Docker + (Redis:5.0.5 * 3)
1. 이미지 가져오기
docker pull redis:5.0.5
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
3. 클러스터를 시작하고 형성하세요
컨테이너를 시작하세요
먼저 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 获取一下,获取成功证明集群有效。
4、存在的问题
按照如上的步骤,虽然集群搭建成功了,但其实还是有点问题的,由于集群结点中的 ip地址
是docket内部分配的,如:172.17.0.2
等,如果使用 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
等。
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
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

실행 명령을 실행한 후 컨테이너의 시작을 확인하세요:

(1) 3초 전에 종료
되는 경우 docker 로그
를 통해 확인할 수 있습니다. >: 🎜🎜
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"🎜성공적인 시작 후 아래와 같이: 🎜🎜



redis-cli -c
명령을 사용하여 클러스터 노드에 연결한 후 값을 설정하면 자동으로 0.2 IP 주소로 리디렉션됩니다. 그런 다음 get을 통해 가져오면 클러스터가 작동하는지 증명할 수 있습니다. 🎜🎜
4. 기존 문제🎜🎜위 단계를 따르면 클러스터가 성공적으로 구축되었지만 클러스터 노드의 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

docker中rm和rmi的区别:rm命令用于删除一个或者多个容器,而rmi命令用于删除一个或者多个镜像;rm命令的语法为“docker rm [OPTIONS] CONTAINER [CONTAINER...]”,rmi命令的语法为“docker rmi [OPTIONS] IMAGE [IMAGE...]”。

docker官方镜像有:1、nginx,一个高性能的HTTP和反向代理服务;2、alpine,一个面向安全应用的轻量级Linux发行版;3、busybox,一个集成了三百多个常用Linux命令和工具的软件;4、ubuntu;5、PHP等等。

docker容器重启后数据会丢失的;但是可以利用volume或者“data container”来实现数据持久化,在容器关闭之后可以利用“-v”或者“–volumes-from”重新使用以前的数据,docker也可挂载宿主机磁盘目录,用来永久存储数据。

docker对于小型企业、个人、教育和非商业开源项目来说是免费的;2021年8月31日,docker宣布“Docker Desktop”将转变“Docker Personal”,将只免费提供给小型企业、个人、教育和非商业开源项目使用,对于其他用例则需要付费订阅。

docker能安装oracle。安装方法:1、拉取Oracle官方镜像,可以利用“docker images”查看镜像;2、启动容器后利用“docker exec -it oracle11g bash”进入容器,并且编辑环境变量;3、利用“sqlplus /nolog”进入oracle命令行即可。

解决方法:1、停止docker服务后,利用“rsync -avz /var/lib/docker 大磁盘目录/docker/lib/”将docker迁移到大容量磁盘中;2、编辑“/etc/docker/daemon.json”添加指定参数,将docker的目录迁移绑定;3、重载和重启docker服务即可。

AUFS是docker最早支持的存储引擎。AUFS是一种Union File System,是文件级的存储驱动,是Docker早期用的存储驱动,是Docker18.06版本之前,Ubuntu14.04版本前推荐的,支持xfs、ext4文件。

容器管理ui工具有:1、Portainer,是一个轻量级的基于Web的Docker管理GUI;2、Kitematic,是一个GUI工具,可以更快速、更简单的运行容器;3、LazyDocker,基于终端的一个可视化查询工具;4、DockStation,一款桌面应用程序;5、Docker Desktop,能为Docker设置资源限制,比如内存,CPU,磁盘镜像大小;6、Docui。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
