HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    docker高可用(docker高可用实现)

    发布时间:2023-04-19 03:16:53     稿源: 创意岭    阅读: 122        

    大家好!今天让创意岭的小编来大家介绍下关于docker高可用的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008

    本文目录:

    docker高可用(docker高可用实现)

    一、k8s高可用部署:keepalived + haproxy

    最近依照网上不少文章部署K8s高可用集群,遇到了一些麻烦,在这里记录下来。

    根据K8s官方文档将HA拓扑分为两种,Stacked etcd topology(堆叠ETCD)和External etcd topology(外部ETCD)。 https://kubernetes.cn/docs/setup/production-environment/tools/kubeadm/ha-topology/#external-etcd-topology

    堆叠ETCD : 每个master节点上运行一个apiserver和etcd, etcd只与本节点apiserver通信。

    外部ETCD : etcd集群运行在单独的主机上,每个etcd都与apiserver节点通信。

    官方文档主要是解决了高可用场景下apiserver与etcd集群的关系, 三master节点防止单点故障。但是集群对外访问接口不可能将三个apiserver都暴露出去,一个挂掉时还是不能自动切换到其他节点。官方文档只提到了一句“使用负载均衡器将apiserver暴露给工作程序节点”,而这恰恰是生产环境中需要解决的重点问题。

    Notes: 此处的负载均衡器并不是kube-proxy,此处的Load Balancer是针对apiserver的。

    下面以一个实验验证高可用性。准备三台机器以及一个vip(阿里云,openstack等都有提供)。

    haproxy提供高可用性,负载均衡,基于TCP和HTTP的代理,支持数以万记的并发连接。 https://github.com/haproxy/haproxy

    haproxy可安装在主机上,也可使用docker容器实现。文本采用第二种。

    创建配置文件/etc/haproxy/haproxy.cfg,重要部分以中文注释标出:

    在三个节点启动haproxy

    keepalived是以VRRP(虚拟路由冗余协议)协议为基础, 包括一个master和多个backup。 master劫持vip对外提供服务。master发送组播,backup节点收不到vrrp包时认为master宕机,此时选出剩余优先级最高的节点作为新的master, 劫持vip。keepalived是保证高可用的重要组件。

    keepalived可安装在主机上,也可使用docker容器实现。文本采用第二种。( https://github.com/osixia/docker-keepalived )

    配置keepalived.conf, 重要部分以中文注释标出:

    启动keepalived:

    查看keepalived master容器日志:

    查看master vip:

    可以看到vip已绑定到keepalived master

    下面进行破坏性测试:

    暂停keepalived master节点haproxy

    查看keepalived master日志

    可以看到haproxy检测失败,priority降低,同时另一节点10.53.61.195 priority 比master节点高,master置为backup

    查看10.53.61.195 keepalived日志:

    可以看到10.53.61.195被选举为新的master。

    至此高可用实验完成,接下来就是使用kubeadm安装k8s组件,这里就不展开了。

    二、Nacos Server Docker部署集群踩坑

    我们的应用是AWS云原生环境,之前在美国区域使用的是nacos-server.jar进行安装(ec2),后面开展新的区域部署时准备将所有的ec2应用全部转换为ecs部署,包括Nacos。我们参考Naocs官网Docker镜像集群默认方式部署,控制台能够正常方式并创建Namespace和congfig。但是到了应用注册时就报错了:

    最后还因为Nacos之间也无法互相注册成功,导致大量日志输出,频繁GC,最后Nacos服务宕机。

    查询网络以及官网issu也没统一的处理意见,大多是说版本问题,我们从1.4.0降级到1.3.0也都没法解决问题。

    通过仔细的排查日志、Nacos Server日志,经过小一个小时,最终找到问题,原来是因为:

    改成Docker-standalone模式。数据持久化用mysql,使用aws负载均衡器能保证高可用,从而达到Nacos 集群的效果。

    三、kubeadm搭建高可用K8s集群

    准备3台机器,分别设置hostname如下所示(此处主要是为了便于标识不同的机器,其实不设置hostname也可以正常搭建):

    参考《 使用Kubeadm搭建Kubernetes(1.13.1)集群 》在 master1 搭建一个单master节点的k8s集群。

    参考《 使用Kubeadm搭建Kubernetes(1.13.1)集群 》在 master2 和 master3 安装 docker、kubeadm 、 kubectl、flannel ,但不要执行 kubeadm init 。(如果执行了 kubeadm init 也没关系,再执行 kubeadm reset 就行了)。

    然后在 master1 节点 /etc/kubernetes/ 目录下执行 tar -czvf pki.tar.gz pki 对 pki 目录进行压缩生成 pki.tar.gz 文件。

    将pki.tar.gz文件上传到第二和第三个master节点{$HOME}/~目录下(可以用scp、rsync、sz/rz等命令都可以)。

    然后在第二和第三个master节点{$HOME}/~目录下执行如下命令将证书拷贝到 /etc/kubernetes/pki/ 目录下:

    注意:一定要删除etcd相关的证书,否则会把整个k8s集群搞挂。

    在第一步master1搭建完成后,会得到如下的 kubeadm join 命令。这一步在master2和master3分别执行该 kubeadm join 命令即可。

    注意:一定要加上参数 --experimental-control-plane

    登录master1,修改 /etc/kubernetes/manifests/etcd.yaml 。这一步的目的是启动只有一个etcd节点的集群,然后往这个集群中添加新节点等待数据同步。

    然后重启kubelet

    通过 sudo docker ps 查看启动的etcd容器ID

    通过 sudo docker exec -it b69913e36ce1 sh 进入容器内。

    通过下面的命令可以查看当前etcd集群的节点列表:

    可以看到当前集群中只有一个节点:

    此时,apiserver已经可以正常访问etcd,可以通过 kubectl get nodes 验证一下:

    如果不小心在master节点上执行了 sudo kubeadm reset -f ,导致节点重置,etcd容器被kill,数据清空。直接通过 kubeadm join xxx 并不能直接将该节点添加回去,而会报出下面的错误:

    解决方案参考文档: Kubernetes master无法加入etcd 集群解决方法

    解决方法:

    1.在kubeadm-config删除的状态不存在的etcd节点:

    把上边的删掉:

    我尝试了方案一,然后重新执行下面的命令,问题就成功解决了。

    效果如下:

    在执行kubectl join xxx命令时,出现这种情况是和docker残留信息有关系,可以考虑重启docker:

    这样反复多试几次就成功了(个人经验)。

    出现这种情况的原因是:该master节点安装flannel失败了。

    此时,如果查看kubelet的状态,一般是启动失败的状态。通过 sudo journalctl xe - no-pager 可以看到如下报错误信息:

    这种情况可以尝试手动安装flannel,然后重启机器就可以解决,flannel安装过程参考《 安装Kubernetes报错:STATUS NotReady 》

    如果上述方式不管用,可以尝试下面的方式:

    四、使用docker搭建flink集群

    【参考】: https://blog.csdn.net/lizhe_dashuju/article/details/100541121

    1.拉取centos镜像

    $ docker pull centos:latest

    2.创建两个节点

    $ docker run --name flinkmaster -d -p 8081:8081 centos -it /bin/bash

    $ docker run --name flinkworker -d centos -it /bin/bash

    3.安装jdk 1.8

    $ yum search java|grep jdk

    $ yum install -y java-1.8.0-openjdk.x86_64

    4.将flink安装包cp到容器,解压缩

    docker cp flink-1.8.1-bin-scala_2.12.tgz flinkmaster:/usr

    docker cp flink-1.8.1-bin-scala_2.12.tgz flinkworker:/usr

    tar xvf flink-1.8.1-bin-scala_2.12.tgz

    5.修改两个机器的/etc/hosts,都增加如下内容。

    172.17.0.3 f3a573de76af

    172.17.0.4 0379a31fd702

    172.17.0.3 flinkmaster

    172.17.0.4 flinkworker

    注意,两个节点的hostname是随机生成的,注意自己修改。

    【Flink 集群搭建,Standalone,集群部署,HA高可用部署参考】: https://developer.aliyun.com/article/765741

    【Linux 集群免密登录配置,双向免密参考】:

    https://ipooli.com/2020/04/linux_host/?spm=a2c6h.12873639.0.0.7ee664deehTPTo

    1.centos安装sshd:

    $ yum -y install openssh-server

    $ yum -y install openssh-clients

    2.启动sshd服务

    $ /usr/sbin/sshd -D

    3.修改root密码

    yum -y install passwd

    passwd root

    4.flinkmaster和flinkworker生成密钥对

    $ ssh-keygen -t rsa

    之后根据提示,回车 进入.ssh目录会看见 id_rsa (私钥) 和 id_rsa.pub (公钥)两个文件。

    6.将公钥文件拷贝到另外两台主机 使用 ssh-copy-id 命令

    $ ssh-copy-id -i ~/.ssh/id_ rsa.pub root@flinkworker

    7.验证登录

    ssh root@flinkworker

    如果不提示输入密码则成功。

    1.修改配置文件

    $ vim ./conf/flink-conf.yaml

    修改如下几个参数:

    jobmanager.rpc.address: flinkmaster

    jobmanager.rpc.port: 6123

    jobmanager.heap.size: 1024m

    taskmanager.memory.process.size: 1568m

    taskmanager.numberOfTaskSlots: 2

    parallelism.default: 2</pre>

    $ vim ./conf/masters

    修改为:

    flinkmaster:8081

    $ vim ./conf/worker

    修改为:

    flinkmaster

    flinkmaster

    2.拷贝到其他机器

    scp -r /usr/flink-1.12.2/ root@flinkworker:/usr/

    3.启动集群

    在flinkmaster上执行

    ./bin/start-cluster.sh

    4.访问 http://localhost:8081/

    2个Task Managers,1个Job Managers为flinkmaster

    以上就是关于docker高可用相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    windows7无权访问文件夹(windows7无权限访问文件夹)

    Dou订单为何删除不了(抖音订单为什么删除不了)

    shadow读音(shadow读音发音)

    门头设计网站(门头设计网站推荐)

    华与华经典广告(华与华经典广告文案)