利用docker简化redis集群配置,构建超简单

  1. 本文包含docker基础使用、镜像分层、centos基础命令等相关内容。有经验的可以略过。
  2. 想看docker中redis集群配置的可以直接点目录。内容比较少,不过由于docker容器之间相互隔离的效果,根本不用管端口号和文件名之间的冲突。
  3. 另外spring应用如果要连接集群,建议部署到容器上,并为这个容器设置端口映射,访问主机相应的端口就是访问该容器,这样做的目的就是为了方便的通过容器内部网络172.17.0.1访问各个节点。
  4. 建议不要尝试在主机和容器之间折腾网络,你会发现172.17.0.2 这个ip ping通了,但是不能通过172.17.0.2 这个ip建立telnet连接。

Linux相关命令

基本命令

#find使用
find / -path "/mnt" -prune -o -name redis -print # 忽某个目录
find -mount # 忽视挂载等系统目录
#显示进程
ps aux
#结束进程
kill -9 [pid]
#结束所有进程
kill -9 -1

yum相关

#添加阿里yum镜像#如下图所示epel/x86_64/primary_db下载太慢,添加阿里epel
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
#更新缓存
yum clean all
yum makecache
#更新仓库
yum install epel-release

在这里插入图片描述

#安装redis
yum install redis
#连接centos
docker exec -it centos /bin/bash
#找到redis.conf,复制到/目录
find / -name "redis*"
#运行redis-server
bin/redis-server redis.conf
#查看redis进程
ps -ef|grep redis
#客户端连接redis服务
src/redis-cli #先搞清在哪个位置
#远程连接
docker run -itd --name redis -p 6389:6379 redis

docker相关

docker镜像分层概念

如果你要减小镜像的磁盘空间占用建议看这一节内容。

查看镜像分别占用的磁盘空间

PS C:\Users\CSU> docker system df -v
Images space usage:

REPOSITORY       SIZE                SHARED SIZE         UNIQUE SIZE         CONTAINERS
cluster          418.9MB             201.8MB             217.1MB             0
redis            418.8MB             201.8MB             217.1MB             1
centos           201.8MB             201.8MB             0B                  0

#redis创建容器,yum install vim并立马commit 为redis_copy 对比下大小
REPOSITORY          TAG                 SIZE                SHARED SIZE         UNIQUE SIZE         CONTAINERS
redis-copy          latest              560.2MB             418.8MB             141.4MB             0
cluster             root                418.9MB             201.8MB             217.1MB             0
redis               latest              418.8MB             418.8MB             0B                  2
centos              latest              201.8MB             201.8MB             0B                  0

镜像占用的总磁盘空间

PS C:\Users\CSU> docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              3                   1                   635.9MB             418.9MB (65%)
Containers          1                   0                   850B                850B (100%)
Local Volumes       66                  1                   0B                  0B
Build Cache         28                  0                   1.511GB             1.511GB

可以得出结论:共享的空间不管被多少个镜像使用都不会增加总占用,每个镜像的独立空间会增加总空间的大小。
磁 盘 占 用 总 大 小 = S U M ( S I Z E ( U N I Q U E S I Z E = = 0 ) ) + S U M ( U N I Q U E S I Z E ( U N I Q U E S I Z E ! = 0 ) ) 磁盘占用总大小=SUM(SIZE(UNIQUE SIZE == 0))+SUM(UNIQUE SIZE(UNIQUE SIZE != 0)) =SUM(SIZE(UNIQUESIZE==0))+SUM(UNIQUESIZE(UNIQUESIZE!=0))
docker image的存储结构类似于maven的仓库,而容器类似于一个maven工程。
下列过程展示了镜像空间占用的增长过程:

  • 基础镜像centos:大小201.8MB ;

  • 镜像centos生成容器并安装了redis,commit为镜像redis:大小418.8MB,共享了镜像centos的201.8MB、自己增加了217.1MB;

  • 镜像redis生成容器并立马提交为镜像cluster:大小418.8MB,共享了镜像redis的418.8MB;

  • 镜像redis生成容器安装vim并提交为镜像redis-copy:大小560.2MB,共享了镜像redis的418.8MB、自己增加了141.4MB。

    镜像生成容器,镜像作为容器的只读层,容器中的改动被持久化到读写层。commit为镜像时读写层也会被合并到只读层。

dockerfile

FROM centos/systemd #如果本地存在会从本地读取
copy ./ /usr/
#每行命令会在镜像中新建一个layer,为减小镜像大小用\将命令连成一行。
run cd /usr/redis-5.0.4 && \
yum clean all && \
yum makecache && \
yum install net-tools gcc make -y && \
make

win 10下安装docker-desktop

#System.InvalidOperationException:
netsh winsock reset
docker search centos
docker pull [centos从列表中选]
docker images
docker run --name redis-host -itd -p 6379:6379 redis-host
#在容器中使用systemd,server,具有更多功能
docker run -tid --name spring -p 8080:8080 --privileged=true spring /sbin/init

CentOs下yum安装docker-ce

#卸载旧版本(如果安装过旧版本的话)
yum remove docker  docker-common docker-selinux docker-engine
#配置好国内yum镜像和repo仓库
yum install docker-ce
#安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 通过yum-config-manager设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#wsl没法使用service、systemctl。利用python脚本替换。
mv /usr/bin/systemctl /usr/bin/systemctl.old
curl https://github.com/gdraheim/docker-systemctl-replacement/blob/master/files/docker/systemctl.py > /usr/bin/systemctl
chmod +x /usr/bin/systemctl

docker中的redis集群配置

docker容器中安装好redis,建立cluster.conf文件:

cp /usr/redis-5.0.4/redis.conf  /usr/redis-5.0.4/cluster.conf
vim /usr/redis-5.0.4/cluster.conf

修改下列配置:

daemonize yes
port 6379
cluster‐enabled yes(启动集群模式)
cluster‐config‐file nodes‐8001.conf(集群节点信息文件,这里800x最好和port对应上)
cluster‐node‐timeout 5000 12 (7)# bind 127.0.0.1(去掉bind绑定访问ip信息)
protected‐mode no (关闭保护模式)
appendonly yes

commit为cluster镜像,通过下面docker命令生成6个不同的容器。ip地址:172.17.0.2~7。

docker run -tid --name cluster{id}  --privileged=true cluster /sbin/init

进入每个容器,每个都执行一遍redis‐server,

cd /usr/redis-5.0.4/
src/redis‐server cluster.conf
/usr/local/redis/bin/redis‐cli -c

客户端中输入:

/usr/local/redis‐5.0.3/src/redis‐cli ‐a zhuge ‐‐cluster create ‐‐cluster‐replicas 1 172.17.0.2:6379 172.17.0.3:6379 172.17.0.4:6379 172.17.0.5:6379 172.17.0.6:6379 172.17.0.7:6379

自动将6个redis节点组合成3个master,每个master带有一个slave的集群,测试下可以正常运行。步骤确实少,不过首先得具有容器和centos的使用基础,相关内容前面都有提到。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值