精华内容
下载资源
问答
  • 主要介绍了使用Docker Swarm 搭建Wordpress的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Docker swarm 搭建docker高可用集群

    千次阅读 2021-08-24 11:14:34
    目录项目名称:Docker swarm 搭建docker高可用集群1、网络拓扑图2、项目环境:Docker 20.10.8,CentOS 7.6(6台 1核1G),Nginx 1.19.7,NFS3、项目描述4、项目描述 项目名称:Docker swarm 搭建docker高可用集群 1...

    项目名称:基于docker- swarm 搭建docker高可用集群

    1、网络拓扑图

    请添加图片描述

    网络数据流图

    请添加图片描述

    2、项目环境

    Docker 20.10.8,CentOS 7.6(7台 1核1G),Nginx 1.19.7,Prometheus2.29.1,Grafana8.1.2,Keepalived,NFS。

    3、项目描述

    实现一个高可用的负载均衡Web服务器集群,后端采用Swarm管理的Docker集群来提供Web服务,大量使用容器来完成Web服务的扩展性、高可用性,使用Prometheus对整个集群进行监控,保证业务正常进行。

    4、项目步骤

    1.规划设计整个集群的架构、网络拓扑,安装7台CentOS 7.6的系统,按照规划配置好每台linux的IP,准备好Docker环境,搭建swarm集群

    1、创建swarm集群

    [root@centos-7 ~]# docker swarm init --advertise-addr 192.168.0.101
    Swarm initialized: current node (wxfmm8k75qxwey2fufk204ivv) is now a manager.
    
    To add a worker to this swarm, run the following command:
        # 这就是添加节点的方式(要保存初始化后token,因为在节点加入时要使用token作为通讯的密钥
        docker swarm join --token SWMTKN-1-3sqv9hho99m8z686tspko5c5dn3pmk6h02p5zscduh3eq2nkm5-1h1g2xndxeit74aa2vy5304jo 192.168.0.101:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions
    

    2、添加节点主机到Swarm集群(如果想要将其他更多的节点添加到这个swarm集群中,添加方法与其一致)

    [root@work_3 ~]# docker swarm join --token SWMTKN-1-3sqv9hho99m8z686tspko5c5dn3pmk6h02p5zscduh3eq2nkm5-1h1g2xndxeit74aa2vy5304jo 192.168.0.101:2377
    This node joined a swarm as a worker.
    

    2、使用Volume(挂载目录到NFS服务器下)来提供Web服务,达到所有容器都使用相同的数据;

    1、共享文件,编辑/etc/exports文件,写好具体的共享的目录和权限

    [root@u-nfs ~]# vim /etc/exports
    /web  192.168.0.0/24(rw,all_squash,sync)
    

    2、根据编辑的文件建立web文件
    3、刷新输出文件的列表:

    exportfs -rv
    

    4、在manage机器上创建服务(注意swarm集群的机器也需要安装nfs服务):

    docker service create -d     --name nfs-web     --mount 'type=volume,source=nfsvolume,target=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/web,"volume-opt=o=addr=192.168.0.100,rw,nfsvers=4,async"'     --replicas 10     -p 8089:80     nginx:latest
    

    3、编译安装Nginx,编写安装脚本,使用Nginx做负载均衡

    负载均衡: 将用户的访问请求均衡的分散到后端的真正提供服务的机器上
    负载均衡器: 实现负载均衡功能的一个机器
    1、编写脚本

    #!/bin/bash
    
    #解决软件的依赖关系,需要安装的软件包
    yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make psmisc net-tools lsof vim wget
    
    #新建luogan用户和组
    id  sanchuang || useradd sanchuang -s /sbin/nologin
    
    #下载nginx软件
    mkdir  /sanchuang99 -p
    cd /sanchuang99
    wget  http://nginx.org/download/nginx-1.21.1.tar.gz
    
    #解压软件
    tar xf nginx-1.21.1.tar.gz
    #进入解压后的文件夹
    cd nginx-1.21.1
    
    #编译前的配置
    ./configure --prefix=/usr/local/scsanchuang99  --user=sanchuang --group=sanchuang  --with-http_ssl_module   --with-threads  --with-http_v2_module  --with-http_stub_status_module  --with-stream
    
    #如果上面的编译前的配置失败,直接退出脚本
    if (( $? != 0));then
      exit
    fi
    #编译
    make -j 2
    #编译安装
    make  install
    
    #修改PATH变量
    echo  "PATH=$PATH:/usr/local/scsanchuang99/sbin" >>/root/.bashrc
    #执行修改了环境变量的脚本
    source /root/.bashrc
    
    
    #firewalld and selinux
    
    #stop firewall和设置下次开机不启动firewalld
    service firewalld stop
    systemctl disable firewalld
    
    #临时停止selinux和永久停止selinux
    setenforce 0
    sed  -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
    
    #开机启动
    chmod +x /etc/rc.d/rc.local
    echo  "/usr/local/scsanchuang99/sbin/nginx" >>/etc/rc.local
    

    2、运行安装脚本

    [root@load-balancer ~]# bash onekey_install_shediao_nginx_v10.sh
    

    切换用户,加载修改了的PATH变量

    [root@load-balancer ~]# su - root 
    

    3、配置Nginx的负载均衡功能
    cd /usr/local/scsanchuang99/ 进入nginx编译安装指定的目录

    [root@load-balancer scsanchuang99]# ls
    client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp
    

    cd conf/ 进入配置文件的命令

    [root@load-balancer conf]# ls
    fastcgi.conf          fastcgi_params.default  mime.types          nginx.conf.default   uwsgi_params
    fastcgi.conf.default  koi-utf                 mime.types.default  scgi_params          uwsgi_params.default
    fastcgi_params        koi-win                 nginx.conf
    scgi_params.default  win-utf
    

    nginx.conf 是nginx的配置文件
    编辑配置文件:

     [root@load-balancer conf]# vim nginx.conf
    
    http{
      
       upstream  xuweb {     #定义一个负载均衡器名字叫xuweb
            server 192.168.0.101:8089;
            server 192.168.0.102:8089;
            server 192.168.0.97:8089;
    
       }
     server {
            listen       80;          #监听80端口
            server_name  www.sc.com;  #为www.sc.com 域名服务
            location / {
                    proxy_pass http://scweb ;     #调用负载均衡器
            }
    .....省略很多配置
    }
    

    nginx -s reload 重新加载配置文件–》相当于重启了nginx服务

    4、Keepalived的双vip实现高可用

    单点: 整个架构中,只有一台服务器的地方
    单点故障: 如果某台服务器down机会导致整个集群出现异常
    如何解决单点故障,防止单点故障–》高可用
    高可用: 一台出现问题,另外的机器可以顶替,继续保障整个集群的正常运转.
    keepalived 是实现高可用的软件

    1、安装和配置
    在两台安装Nginx的负载k均衡器的基础上安装Keepalived
    yum install keepalived -y

    2.配置keepalived.conf文件,添加vip和相关信息

    cd /etc/keepalived/
    vim keepalived.conf 
    

    配置文件详细解释:

    vrrp_instance VI_1 {       启动一个vrrp的实例 VI_1 实例名,可以自定义
        state MASTER        --》角色是master
        interface ens33      --》在哪个接口上监听vrrp协议,同时绑定vip到那个接口
        virtual_router_id 105 --》虚拟路由id(帮派) 0~255范围
        priority 120    ---》优先级  0~255
        advert_int 1  --》advert interval 宣告消息 时间间隔 1秒
        authentication {   认证
            auth_type PASS   认证的类型是密码认证  password
            auth_pass 11112222   具体的密码,可以自己修改
        }
        virtual_ipaddress {   --》vip的配置,vip可以是多个ip
            192.168.200.16 
            192.168.200.17
            192.168.200.18
        }
    }
    

    cent-nginx-bl的详细配置:

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
      #vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens33
        virtual_router_id 108
        priority 200
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.0.108
        }
    }
    
    vrrp_instance VI_2 {
        state   BACKUP
        interface ens33
        virtual_router_id 109
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.0.109
        }
    }
    

    cent-keepalived-bl的详细配置:

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
      #vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface ens33
        virtual_router_id 108
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.0.108
        }
    }
    
    vrrp_instance VI_2 {
        state   MASTER
        interface ens33
        virtual_router_id 109
        priority 200
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.0.109
        }
    }
    

    5、安装prometheus,在被监控的机器上安装exporter,实现监控功能

    1、安装Prometheus

    root@prometheus ~]# rz
    [root@prometheus ~]# ls
       prometheus-2.29.1.linux-amd64.tar.gz
    [root@prometheus ~]#
    [root@prometheus ~]# mkdir /prometheus
    [root@prometheus ~]# mv prometheus-2.29.1.linux-amd64.tar.gz /prometheus/
    #临时添加环境变量
    [root@prometheus prometheus]# PATH=$PATH:/prometheus/prometheus-2.29.1.linux-amd64
    [root@prometheus prometheus]# which prometheus
    /prometheus/prometheus-2.29.1.linux-amd64/prometheus
    [root@prometheus prometheus]#
    

    永久添加安装路径到PATH环境变量里

    [root@prometheus ~]# vim /root/.bashrc
    PATH=$PATH:/prometheus/prometheus-2.29.1.linux-amd64
    

    prometheus 启动程序
    prometheus.yml 配置文件
    启动prometheus

    [root@prometheus prometheus-2.29.1.linux-amd64]# ./prometheus --config.file=prometheus.yml
    level=info ts=2021-08-25T09:23:53.236Z caller=main.go:390 msg="No time or size retention was set so using the default time retention" duration=15d
    level=info ts=2021-08-25T09:23:53.237Z caller=main.go:428 msg="Starting Prometheus" version="(version=2.29.1, branch=HEAD, revision=dcb07e8eac34b5ea37cd229545000b857f1c1637)"
    level=info ts=2021-08-25T09:23:53.237Z caller=main.go:433 build_context="(go=go1.16.7, user=root@364730518a4e, date=20210811-14:48:27)"
    

    在后台启动prometheus

    [root@prometheus prometheus-2.29.1.linux-amd64]# nohup ./prometheus --config.file=/prometheus/prometheus-2.29.1.linux-amd64/prometheus.yml  &
    

    2、在被监控的服务器上安装exporter

    exporter : 是prometheus的客户端程序,需要安装到被监控的服务器上。exporter是一个程序,需要去定制,但是prometheus平台给我们开发了很多通用的或者定制的exporter
    exporter会到客户机(被监控的服务器上)收集指定的指标数据,例如:cpu的使用率,内存的使用率,磁盘的使用情况,网络的带宽使用情况等等数据

    上传下载的node_exporter-1.2.2.linux-amd64.tar.gz到被监控的服务器

    [root@cent7-manage~]# rz
    [root@cent7-manage ~]# ls
    anaconda-ks.cfg  getting-started-master                                 
    echo.sh          getting-started-master.zip  node_exporter-1.2.2.linux-amd64.tar.gz  sc-ubuntu2.tar  
    [root@cent7-manage~]# mkdir /exporter
    [root@cent7-manage~]# mv node_exporter-1.2.2.linux-amd64.tar.gz /exporter/
    [root@cent7-manage ~]# cd /exporter/
    [root@cent7-manage exporter]#
    

    解压软件

    [root@cent7-manage exporter]# tar xf node_exporter-1.2.2.linux-amd64.tar.gz
    [root@cent7-manage exporter]# ls
    node_exporter-1.2.2.linux-amd64  node_exporter-1.2.2.linux-amd64.tar.gz
    [root@cent7-manage exporter]# cd node_exporter-1.2.2.linux-amd64
    [root@cent7-manage node_exporter-1.2.2.linux-amd64]# ls
    LICENSE  node_exporter  NOTICE
    [root@cent7-manage node_exporter-1.2.2.linux-amd64]#
    

    执行软件

    [root@cent7-manage node_exporter-1.2.2.linux-amd64]# ./node_exporter --help
    
    [root@cent7-manage node_exporter-1.2.2.linux-amd64]# nohup  ./node_exporter --web.listen-address="0.0.0.0:9100"  &
    [1] 96546
    [root@cent7-manage node_exporter-1.2.2.linux-amd64]# nohup: 忽略输入并把输出追加到'nohup.out'
    

    查看进程

    [root@cent7-manage node_exporter-1.2.2.linux-amd64]# ps aux|grep node
    root       96546  0.1  0.2 716440 10996 pts/1    Sl   10:38   0:00 ./node_exporter --web.listen-address=0.0.0.0:9100
    root       96551  0.0  0.0  12348  1144 pts/1    S+   10:38   0:00 grep --color=auto node
    

    修改PATH环境变量
    #临时修改

    [root@cent7-manage node_exporter-1.2.2.linux-amd64]# PATH=/exporter/node_exporter-1.2.2.linux-amd64:$PATH
    [root@cent7-manage node_exporter-1.2.2.linux-amd64]# which node_exporter
    /exporter/node_exporter-1.2.2.linux-amd64/node_exporter
    [root@cent7-manage node_exporter-1.2.2.linux-amd64]#
    

    #永久修改

    [root@cent7-manage node_exporter-1.2.2.linux-amd64]# vim /root/.bashrc
    PATH=/exporter/node_exporter-1.2.2.linux-amd64:$PATH  在末尾添加
    

    server去访问这个网址获取node上的metrics

    http://192.168.0.101:9100/metrics

    3.添加被监控服务器到prometheus server里
    在server上操作

    [root@prometheus prometheus-2.29.1.linux-amd64]# cd /prometheus/prometheus-2.29.1.linux-amd64
    [root@prometheus prometheus-2.29.1.linux-amd64]#
    [root@prometheus prometheus-2.29.1.linux-amd64]# vim prometheus.yml
    scrape_configs:
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: "prometheus"
    
        # metrics_path defaults to '/metrics'
        # scheme defaults to 'http'.
    
        static_configs:
          - targets: ["localhost:9090"]
    
    #添加需要监控的服务器的信息
      - job_name: "swarm-manager"
        static_configs:
          - targets: ["192.168.0.101:9100"]
    

    重启prometheus服务,因为没有专门的重启脚本,需要手工完成
    先杀死原来的进程,然后再启动新的进程,启动新的进程会重启加载配置文件

    [root@prometheus prometheus-2.29.1.linux-amd64]# ps aux|grep prome
    root       2160  0.1  6.3 912304 63172 pts/2    Sl   10:06   0:07 ./prometheus --config.file=/prometheus/prometheus-2.29.1.linux-amd64/prometheus.yml
    root       2265  0.0  0.0 112824   980 pts/2    S+   11:14   0:00 grep --color=auto prome
    

    kill -9 2160 杀死进程

    重新启动程序

    [root@prometheus prometheus-2.29.1.linux-amd64]# nohup  prometheus --config.file=/prometheus/prometheus-2.29.1.linux-amd64/ometheus.yml &
    [1] 2276
    [root@prometheus prometheus-2.29.1.linux-amd64]# nohup: 忽略输入并把输出追加到"nohup.out"
    

    6、添加Grafana,美观、强大的可视化监控指标展示工具

    grafana 是一款采用 go
    语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。最好的参考资料就是官网(http://docs.grafana.org/)

    1、安装

    [root@u-nfs yum.repos.d]# vim grafana.repo
    [root@u-nfs yum.repos.d]# cat grafana.repo
    [grafana]
    name=grafana
    baseurl=https://packages.grafana.com/enterprise/rpm
    repo_gpgcheck=1
    enabled=1
    gpgcheck=1
    gpgkey=https://packages.grafana.com/gpg.key
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    
    [root@u-nfs yum.repos.d]# yum install grafana  -y
    

    启动:

    [root@u-nfs yum.repos.d]# systemctl  start grafana-server
    

    查看进程

    [root@u-nfs yum.repos.d]# ps aux|grep grafana
    root      42897  0.0  0.0 169308   756 ?        Ss   11:31   0:00 gpg-agent --homedir /var/cache/dnf/grafana-ee12c6ab2813e349/pubring --use-standard-socket --daemon
    grafana   43438  3.6  4.3 1229004 80164 ?       Ssl  11:34   0:01 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini--pidfile=/var/run/grafana/grafana-server.pid --packaging=rpm cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana cfg:default.paths.plugins=/var/lib/grafana/plugins cfg:default.paths.provisioning=/etc/grafana/provisioning
    root      43490  0.0  0.0  12324  1060 pts/1    S+   11:34   0:00 grep --color=auto grafana
    

    查看端口

    ss -anplut|grep grafana
    tcp    LISTEN   0        128                     *:3000                 *:*      users:(("grafana-server",pid=43438,fd=8))
    

    到web 浏览器里访问

    http://192.168.0.100:3000
    web登陆
    默认账号和密码都是admin

    添加监控项(PromQL里查询的指标)–》grafana帮助我们去出图展示 --》自己去添加监控项遇到:
    1.对很多监控项的指标具体对应那个PromQL 语句我们不熟悉
    2.如果监控的指标过多,操作笔记复杂

    grafana有模板,模板里包含很多的重要的监控项,我们直接导入就可以了 grafana的模板,本质上是一个json格式的文件

    5、 项目心得

    1.提前规划好整个集群的架构,可以提高项目开展时效率,可以让我们更加清晰;
    2.对本地hosts文件进行DNS集群域名解析记录,效果并不明显,考虑在前面加一个负载均衡器,实现论询效果;
    3.通过整个项目更加深刻的理解了Docker的相关技术,使用Docker的集群解决方案比传统的集群解决方案更加快捷方便,Docker内部的高可用和负载均衡也非常不错;
    4.通过实验锻炼了自己细心和trouble shooting的能力。

    展开全文
  • 主要介绍了使用Docker Swarm搭建分布式爬虫集群的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 介绍了使用docker swarm搭建一个zookeeper集群,存储采用NFS

    NFS的搭建

    为了统一管理配置、数据和日志,使用NFS作为集群共享存储,详细安装方法查看另外一篇文章《Docker Swarm集群 使用NFS共享存储》
    案例中将创建3个zookeeper组建集群,我的NFS配置如下

    [root@KD111111003041 ~]# nano /etc/exports
    
    /root/kafkadata 111.111.3.0/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)
    /root/kafkadata/zoo1/data 111.111.3.0/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)
    /root/kafkadata/zoo1/datalog 111.111.3.0/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)
    /root/kafkadata/zoo2/data  111.111.3.0/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)
    /root/kafkadata/zoo2/datalog 111.111.3.0/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)
    /root/kafkadata/zoo3/data  111.111.3.0/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)
    /root/kafkadata/zoo3/datalog 111.111.3.0/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)
    /root/kafkadata/zoo1/conf 111.111.3.0/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)
    /root/kafkadata/zoo2/conf 111.111.3.0/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)
    /root/kafkadata/zoo3/conf 111.111.3.0/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)
    
    

    让配置生效

    exportfs -rv
    

    zookeeper集群的组建

    系统环境:7台机子组建了Docker Swarm集群

    IPDocker角色
    111.111.3.41Manager
    111.111.3.42Manager
    111.111.3.43Manager
    111.111.3.44Worker
    111.111.3.45Manager
    111.111.3.46Manager
    111.111.3.47Worker

    docker-compose文件的创建

    创建3个Zookeeper服务
    注意:1、我使用的镜像是3.5以上的,与Zookeeper 3.4的ZOO_SERVERS格式略有不同,网上的其他教程大部分都是3.4的,我在这个坑爬了好久。2、映射的data和datalog必须是不同的文件夹,不然重启集群时会出错

    version: '3.8'
    
    services:
      zoo1:
        image: zookeeper
        networks:
          - zookeeper
        hostname: zoo1
        ports: # 端口
          - 2181:2181
        environment:
          ZOO_MY_ID: 1
          ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
        volumes:
          - "zoo1conf:/conf"
          - "zoo1data:/data"
          - "zoo1datalog:/datalog"
        deploy:
          mode: replicated
          replicas: 1
      zoo2:
        image: zookeeper
        networks:
          - zookeeper
        hostname: zoo2
        ports: # 端口
          - 2182:2181
        environment:
          ZOO_MY_ID: 2
          ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181
        volumes:
          - "zoo2conf:/conf"
          - "zoo2data:/data"
          - "zoo2datalog:/datalog"
        deploy:
          mode: replicated
          replicas: 1
      zoo3:
        image: zookeeper
        networks:
          - zookeeper
        hostname: zoo3
        ports: # 端口
          - 2183:2181
        environment:
          ZOO_MY_ID: 3
          ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
        volumes:
          - "zoo3conf:/conf"
          - "zoo3data:/data"
          - "zoo3datalog:/datalog"
        deploy:
          mode: replicated
          replicas: 1  
        
    volumes:
      zoo1data:
        driver: local
        driver_opts:
          type: "nfs"
          o: "addr=111.111.3.41,rw"
          device: ":/root/kafkadata/zoo1/data"
      zoo1datalog:
        driver: local
        driver_opts:
          type: "nfs"
          o: "addr=111.111.3.41,rw"
          device: ":/root/kafkadata/zoo1/datalog"
      zoo1conf:
        driver: local
        driver_opts:
          type: "nfs"
          o: "addr=111.111.3.41,rw"
          device: ":/root/kafkadata/zoo1/conf"
      zoo2data:
        driver: local
        driver_opts:
          type: "nfs"
          o: "addr=111.111.3.41,rw"
          device: ":/root/kafkadata/zoo2/data"
      zoo2datalog:
        driver: local
        driver_opts:
          type: "nfs"
          o: "addr=111.111.3.41,rw"
          device: ":/root/kafkadata/zoo2/datalog"
      zoo2conf:
        driver: local
        driver_opts:
          type: "nfs"
          o: "addr=111.111.3.41,rw"
          device: ":/root/kafkadata/zoo2/conf"
      zoo3data:
        driver: local
        driver_opts:
          type: "nfs"
          o: "addr=111.111.3.41,rw"
          device: ":/root/kafkadata/zoo3/data"
      zoo3datalog:
        driver: local
        driver_opts:
          type: "nfs"
          o: "addr=111.111.3.41,rw"
          device: ":/root/kafkadata/zoo3/datalog"
      zoo3conf:
        driver: local
        driver_opts:
          type: "nfs"
          o: "addr=111.111.3.41,rw"
          device: ":/root/kafkadata/zoo3/conf"
    networks:
      zookeeper:
        driver: overlay
    

    运行并验证zookeeper集群

    [root@KD111111003041 ~]# docker stack deploy -c zookeeperCompose.yml zookeeper
    Creating network zookeeper_zookeeper
    Creating service zookeeper_zoo3
    Creating service zookeeper_zoo1
    Creating service zookeeper_zoo2
    
    

    查看运行状态

    [root@KD111111003041 ~]# docker service ls
    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    pyxs8uix8wwo        zookeeper_zoo1      replicated          1/1                 zookeeper:latest    *:2181->2181/tcp
    v5h6gckw4hmb        zookeeper_zoo2      replicated          1/1                 zookeeper:latest    *:2182->2181/tcp
    plim4a7s42yg        zookeeper_zoo3      replicated          1/1                 zookeeper:latest    *:2183->2181/tcp
    
    

    查看集群是否组建成功
    经查询,三个服务分别运行在43、46、47三个节点上

    43节点为leader

    [root@KD111111003043 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                    NAMES
    71cc7f30e7a0        zookeeper:latest    "/docker-entrypoint.…"   29 minutes ago      Up 29 minutes       2181/tcp, 2888/tcp, 3888/tcp, 8080/tcp   zookeeper_zoo3.1.ilt743ba0u612n7t2zb55abk9
    [root@KD111111003043 ~]# docker exec -it zookeeper_zoo3.1.ilt743ba0u612n7t2zb55abk9 zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: leader
    
    

    46节点

    [root@KD111111003046 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                    NAMES
    473354d4875e        zookeeper:latest    "/docker-entrypoint.…"   31 minutes ago      Up 31 minutes       2181/tcp, 2888/tcp, 3888/tcp, 8080/tcp   zookeeper_zoo1.1.q555a2ddd3ukptakt7l1l7mm9
    [root@KD111111003046 ~]# docker exec -it zookeeper_zoo1.1.q555a2ddd3ukptakt7l1l7mm9 zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower
    
    

    47节点
    [root@KD111111003047 ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    a5a6bb6af2a1 zookeeper:latest “/docker-entrypoint.…” 32 minutes ago Up 32 minutes 2181/tcp, 2888/tcp, 3888/tcp, 8080/tcp zookeeper_zoo2.1.lvlh910o36mio851ep0nhp2q2
    620e7a9c9a31 nginx:latest “/docker-entrypoint.…” 4 days ago Up 4 days 80/tcp app_nginx-test5.2.oxsyphx6qnvhfzcxnkeqq3ece
    [root@KD111111003047 ~]# docker exec -it zookeeper_zoo2.1.lvlh910o36mio851ep0nhp2q2 zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower

    展开全文
  • docker swarm搭建clickhouse集群 1.编写docker-componse.yaml文件 version: '3' services: zookeeper: image: zookeeper ports: - "2181:2181" - "2182:2182" volumes: - "/data/clickhouse/zookeeper/data:...

    docker swarm搭建clickhouse集群

    1.编写docker-componse.yaml文件

    version: '3'
    
    services:
      zookeeper:
        image: zookeeper
        ports:
          - "2181:2181"
          - "2182:2182"
        volumes:
          - "/data/clickhouse/zookeeper/data:/data"
          - "/data/clickhouse/zookeeper/log:/datalog"
        deploy:
          placement:
            constraints:
              - node.hostname ==  ck-1
      tabix:
        image: spoonest/clickhouse-tabix-web-client
        ports:
          - "8080:80"
        deploy:
          placement:
            constraints:
              - node.hostname ==  ck-1
      clickhouse01:
        image: yandex/clickhouse-server
        user: root
        deploy:
          placement:
            constraints:
              - node.hostname == ck-2
        ports:
          - "8123:8123"
          - "9000:9000"
        volumes:
          - /data/clickhouse/clickhouse-server/etc:/etc/clickhouse-server
          - /data/clickhouse/clickhouse-server/data:/var/lib/clickhouse
          - /data/clickhouse/clickhouse-server/log:/var/log/clickhouse-server/
        ulimits:
          nofile:
            soft: 262144
            hard: 262144
        depends_on:
          - "zookeeper"
      clickhouse02:
        image: yandex/clickhouse-server
        user: root
        deploy:
          placement:
            constraints:
              - node.hostname == ck-3
        ports:
          - "9012:9000"
          - "8134:8123"
        volumes:
          - /data/clickhouse/clickhouse-server/etc:/etc/clickhouse-server
          - /data/clickhouse/clickhouse-server/data:/var/lib/clickhouse
          - /data/clickhouse/clickhouse-server/log:/var/log/clickhouse-server/
        ulimits:
          nofile:
            soft: 262144
            hard: 262144
        depends_on:
          - "zookeeper"
    

    2.创建数据存储目录

    # 创建目录
    mkdir /data
    # 挂盘
    mount /dev/vdb1 /data
    # 创建映射目录
    mkdir -p /data/clickhouse/zookeeper/data
    mkdir -p /data/clickhouse/zookeeper/log
    mkdir -p /data/clickhouse/clickhouse-server/etc
    mkdir -p /data/clickhouse/clickhouse-server/data
    mkdir -p /data/clickhouse/clickhouse-server/log
    

    3.上传config.xml及usesr.xml配置文件
    config.xml配置文件可以从单机部署的clickhouse获取,或者下载下面的
    链接:https://pan.baidu.com/s/1uERbusWSwM5fuBp1WL5Oaw
    提取码:x7a6
    注意:config.xml文件需要修改相关配置如下

    # 删除remote_servers内的配置,incl参数是为了识别外部文件添加的
    <remote_servers incl="clickhouse_remote_servers">
    	
    </remote_servers>
    # 添加外部配置文件
    <include_from>/etc/clickhouse-server/metrika.xml</include_from>
    

    users.xml

    <yandex>   
        <profiles>       
            <default>   
                <!-- 用于在单个服务器上运行查询的最大RAM -->
                <max_memory_usage>10000000000</max_memory_usage>     
                <!-- 使用未压缩数据块的缓存 -->
                <use_uncompressed_cache>0</use_uncompressed_cache>    
                <!-- 分布式查询处理过程中选择副本的方式 -->
                <!-- random   nearest_hostname:从错误最少的副本集合中选择    in_order:按照指定的顺序选择第一个活副本    first_or_random:如果第一个副本错误数较高,则从错误数最少的副本中随机选择一个副本  -->
                <load_balancing>random</load_balancing>
                <!-- 参数设置 -->
                <input_format_import_nested_json>1</input_format_import_nested_json>
                <allow_experimental_map_type>1</allow_experimental_map_type>
            </default>       
            <readonly>           
                <max_memory_usage>10000000000</max_memory_usage>           
                <use_uncompressed_cache>0</use_uncompressed_cache>           
                <load_balancing>random</load_balancing>            
                <readonly>1</readonly>       
            </readonly>   
        </profiles>
        <!-- 跟踪每个小时的资源消耗,而不限制使用量 -->
        <quotas>           
            <!-- Name of quota. -->       
            <default>           
                <interval>               
                    <duration>3600</duration>                
                    <queries>0</queries>               
                    <errors>0</errors>               
                    <result_rows>0</result_rows>               
                    <read_rows>0</read_rows>               
                    <execution_time>0</execution_time>           
                </interval>       
            </default>   
        </quotas>   
        <users>       
            <default>           
                <password_sha256_hex>9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08</password_sha256_hex>           
                <networks incl="networks" replace="replace">                
                    <ip>::/0</ip>           
                </networks>           
                <profile>default</profile>      
                <quota>default</quota>
            </default>
            <ck>   
                <password_sha256_hex>9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08</password_sha256_hex>  
                <networks incl="networks" replace="replace">      
                    <ip>::/0</ip>   
                </networks>   
                <profile>readonly</profile>     
                <quota>default</quota>  
            </ck>
        </users>
    </yandex>
    
    # 将以上俩个文件上传到/data/clickhouse/clickhouse-server/etc下
    mv config.xml /data/clickhouse/clickhouse-server/etc
    mv users.xml /data/clickhouse/clickhouse-server/etc
    # users.xml中的密码需要自定义,建议使用加密的方式填写
    # 生成密文的方法
    PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD";echo -n "$PASSWORD" | sha256sum | tr -d '-'
    

    4.创建集群配置文件

    cd /data/clickhouse/clickhouse-server/etc 
    vim metrika.xml
    

    metrika.xml

    <yandex>
        <!-- 集群配置 -->
        <clickhouse_remote_servers>
            <my_cluster>
                <!-- 数据分片1  -->
                <shard>
                    <internal_replication>false</internal_replication>
                    <replica>
                        <host>ck-2</host>
                        <port>9000</port>
                        <user>default</user>
                        <password>test</password>
                    </replica>
                    <replica>
                        <host>ck-3</host>
                        <port>9000</port>
                        <user>default</user>
                        <password>test</password>
                    </replica>
                </shard>
                <!-- 数据分片2  -->
                <shard>
                    <internal_replication>false</internal_replication>
                    <replica>
                        <host>ck-3</host>
                        <port>9000</port>
                        <user>default</user>
                        <password>test</password>
                    </replica>
                    <replica>
                        <host>ck-2</host>
                        <port>9000</port>
                        <user>default</user>
                        <password>test</password>
                    </replica>
                </shard>
            </my_cluster>
        </clickhouse_remote_servers>
        <!-- ZK  -->
        <zookeeper-servers>
            <node index="1">
                <host>ck-1</host>
                <port>2181</port>
            </node>
        </zookeeper-servers>
        <networks>
            <ip>::/0</ip>
        </networks>
        <!-- 数据压缩算法  -->
        <clickhouse_compression>
            <case>
                <min_part_size>10000000000</min_part_size>
                <min_part_size_ratio>0.01</min_part_size_ratio>
                <method>lz4</method>
            </case>
        </clickhouse_compression>
    </yandex>
    

    5.启动clickhouse集群

    # 启动clickhouse
    docker stack deploy -c docker-compose.yaml clickhouse
    

    6.查询集群信息

    select * from system.clusters;
    

    在这里插入图片描述
    PS:对于配置文件等有问题的朋友欢迎留言讨论,也可以加本人知识星球:https://t.zsxq.com/nUN7QRj
    ,一起讨论交流。

    展开全文
  • 一、Docker swarm搭建 Docker swarm是多节点容器编排技术,另外一个主流多节点容器编排技术就是k8s;所以前提是需要准备多台Linux机器(并且这些机器能够相互通信,机器名称要有区分,便于观察是哪台机器)以及每台...

    一、Docker swarm搭建

    Docker swarm是多节点容器编排技术,另外一个主流多节点容器编排技术就是k8s;所以前提是需要准备多台Linux机器(并且这些机器能够相互通信,机器名称要有区分,便于观察是哪台机器)以及每台机器都安装docker环境 centOS安装docker 这里以三台机器搭建Docker swarm集群,一台manager节点,两台worker节点;在新版本的docker中已经内置了Docker swarm环境,所以这里只需要将这三台机器按照,一台manager和两台worker的模式进行构建集群即可。

    1、manager节点创建
    在决定作为manager节点的机器中执行下面的命令

    docker swarm init
    

    在这里插入图片描述

    --advertise-addr 192.168.117.128 该参数的作用是指定manager节点的ip地址,该参数可不写
    

    上面执行成功之后有一句输出是:
    docker swarm join --token SWMTKN-1-2zji96p1mbmzmgq2tm6slb3r48zadhcpbcfkvqrm1umsfr03u0-7jf3i9s9uuy9zitvz957ii35w 192.168.117.128:2377
    这句命令就是想要将机器加入到manager节点的集群中需要执行的命令。
    2、将worker节点加入到集群中
    在两台worker节点的机器中分别执行下面的命令

    docker swarm join --token SWMTKN-1-2zji96p1mbmzmgq2tm6slb3r48zadhcpbcfkvqrm1umsfr03u0-7jf3i9s9uuy9zitvz957ii35w 192.168.117.128:2377
    

    即刚刚创建manager节点提示的命令。
    在这里插入图片描述
    有可能会遇到以下报错:
    Error response from daemon: rpc error: code = Unavailable desc = connection error: desc = “transport: Error while dialing dial tcp 192.168.117.128:2377: connect: no route to host”
    意思是不能和 192.168.117.128:2377 通信,但是我们在创建这三台Linux机器的时候使用ping命令保证了这三台机器可以通信,其实这里主要就是Docker swarm使用了2377端口进行通信,但是2377端口未在防火墙中打开,导致不能通信的,所以解决办法两种:一种是关闭manager节点防火墙,一种是manager节点防火墙放开2377端口,如果manager节点是阿里云服务器需要在安全组中放开2377端口。

    systemctl stop firewalld.service  #关闭防火墙
    firewall-cmd --zone=public --add-port=2377/tcp --permanent  #防火墙放开2377端口
    firewall-cmd --reload  #刷新防火墙,不论是关闭防火墙还是放开某个端口都需要刷新才会生效
    firewall-cmd --list-all --permanent  #查看防火墙放开了哪些端口
    systemctl status firewalld.service  #查看防火墙状态
    

    然后在worker节点中再次执行上面的join命令,就可以成功将worker节点加入到Docker swarm的集群中。
    3、查看集群中有哪些节点加入

    docker node ls  #该命令只能在manager节点中执行
    

    在这里插入图片描述
    这样我们需要的三台机器搭建的集群就成功了。

    二、Docker swarm常用命令

    docker swarm leave: 将本机离开集群-针对于worker节点,该worker节点离开集群后,Docker swarm会将这个worker节点标记为Down状态,并且本机上Docker swarm使用的network也会被删除
    在这里插入图片描述
    在这里插入图片描述
    docker swarm leave --force:将本机离开集群-针对于manager/worker节点,manager节点离开集群后,该集群就不存在了,并且本机上Docker swarm使用的network也会被删除
    在这里插入图片描述
    docker node promote 机器ID/HOSTNAME:将集群中的某台机器升级为manager(如果使用HOSTNAME需要保证集群中机器的HOSTNAME不重复,推荐使用HOSTNAME),这样这台机器在manager挂了的情况下就有权参与新的manager的选举
    docker node demote 机器ID/HOSTNAME:将集群中的某台机器降级为worker(如果使用HOSTNAME需要保证集群中机器的HOSTNAME不重复,推荐使用HOSTNAME)
    在这里插入图片描述
    docker node ls:查看当前集群中的机器信息
    docker service ls:查看当前集群中的服务信息,如果某个服务有多个容器的话也只有一条信息
    docker service rm 服务名称:删除当前集群中的某个服务,其所有的容器也会被删除
    docker service create --name 服务名称 image:在当前集群中创建某个服务,该命令创建的服务会分配运行在集群中的机器上(以容器的形式体现),通过docker ps命令可在对应的机器上查看到运行的容器
    可选参数:

    --env:和docker的 -e 命令同样的效果及用法(也就是同样的--env只能写一个可选参数键值,要想再写可选参数键值需要再写 --env )
    
    --mount type=volume,source=v1,destination=/var/lib/mysql:和docker的-v v1:/var/lib/mysql一样的效果
    
    --network:指定使用的网络和docker的 --network或--net作用一致,只是这里没有--net的简写,必须是--network;该参数一般指定的网络类型会是overlay类型的网络而非常见的bridge、host、null类型的网络,因为overlay类型的网络才能实现多机通信,而Docker swarm就是管理多机的容器编排的,如果在manager节点创建service的时候指定--network,Docker swarm又将容器运行在了worker节点,那么会将指定的网络同步到worker节点中,这样就实现了访问集群中任意一台机器的对应端口都能访问到这个容器。
    
    -p:指定端口映射,如:-p 8080:8080
    
    --replicas:指定该服务在集群中运行的容器的数量,如:--replicas=3就是为该服务在集群中创建3个容器,和后面的scale命令等效
    

    docker run的可选参数基本Docker service create都有,比如 -d。
    在这里插入图片描述

    docker service ps 服务名称:查看某个服务名称的容器信息,服务名称一定要写,如果某个服务有多个容器会有多条信息
    在这里插入图片描述
    docker service scale 服务名称=容器数量:扩缩容某个服务的容器数量,前提是Docker swarm集群中有这个名称的服务,水平扩容的容器会根据Docker swarm的调度分配在集群中的机器上,比如将某个服务扩容为容器数量3个,如果其中一个容器挂掉了,Docker swarm会再去自动创建一个该服务的容器。
    在这里插入图片描述
    docker service logs 服务名称:查看某个服务的日志信息
    在这里插入图片描述
    docker service inspect 服务名称:查看某个服务的详情
    在这里插入图片描述
    其他的命令和docker的命令类似,只是需要docker service开头。

    三、Docker swarm yml文件

    和docker-compose的yml文件编写一致,注意需要使用 deploy 指令,作用也是方便多容器的编排而不用每次写很多命令。
    docker-compose常用命令及yml文件编写

    使用docker stack命令运行yml文件:docker stack deploy -c yml文件 服务名称
    如:docker stack deploy -c service.yml test-service
    docker stack命令官方文档
    docker-compose.yml文件官方文档

    展开全文
  • 简介:Docker SwarmDocker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群...
  • 本篇文章介绍docker swarm搭建三主三从Redis哨兵(Sentinel)模式 环境 IP HOSTNAME label redis port sentinel port 172.16.0.106 cluster-0001 master 6379 26379 172.16.0.31 cluster-0002 slave1 6379...
  • Docker swarm搭建(1)

    2020-07-10 08:28:43
    Docker swarm docker swarm集群:三剑客之一 一. 实验环境 主机 IP地址 服务 docker01 192.168.1.11 swarm+overlay+webUI docker02 192.168.1.13 docker docker03 192.168.1.20 docker 三台主机都...
  • 一、Docker swarm 1. docker swarm简介 SwarmDocker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。SwarmDocker 社区提供的唯...
  • Docker swarm搭建(2)

    2020-07-10 08:29:48
    什么是docker swarm? SwarmDocker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。目前,SwarmDocker 社区提供的唯一一个原生支持 ...
  • docker swarm init 将选中的内容粘贴到另外一台虚拟机执行 管理节点的主机需要开放2377端口 firewall-cmd --zone=public --add-port=2377/tcp --permanent firewall-cmd --reload * 代表主节点 解散swarm...
  • 起因 我曾经把 wordpress 搭建在 Vultr 上,但是因为众所周知的原因,这个地方访问越来越慢。...初始化 docker 环境 虽然上面有一件安装wordpress的功能,但是我不推荐,因为配置都太老了 最终我选择的是
  • 使用Docker Swarm搭建分布式爬虫集群 在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况。此时你是怎么操作的呢?逐一SSH登录每个服务器,使用git拉下代码,然后运行?代码修改了...
  • 1.由于使用docker swarm搭建wordpress时,是在集群上搭建所以需要有跨节点通信。 这时需要使用到overlay网络模型 创建overlay网络 docker network create -d overlay demo  ...
  • 1.环境准备 准备三台安装docker的CentOS7的linux机器 ...安装完后通过xshell进入服务器,我们将搭建一台manager节点,两台work节点的swarm集群 如图: 2.搭建Swarm集群 1)进入master节点,执行...
  • 创建docker swarm 网络 docker network create -d overlay --attachable es docker warm 由3个节点组成 分别是 master slaver-01 slaver-02 注意: 编辑conpose文件时请 修改绑定的node 名字 - node.hostname==...
  • 基于docker swarm搭建ELK集群

    千次阅读 2018-12-16 13:19:53
    阿里云docker安装教程以及镜像下载加速 1 Swarm介绍 Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过...总而言之使用swarm搭建集群是非常方便的,先看一下doc...
  • Docker Swarm搭建生产环境的集群

    千次阅读 2016-06-05 10:33:51
    以AWS为例介绍Docker Swarm搭建过程,并简单测试Swarm manager的高可靠性。
  • docker swarm搭建wordpress

    2019-03-30 15:22:41
    docker network create -d overlay demo #创建network overlay 运行mysql并networkdemo 发现节点运行在了swarm-manager节点 重复上述步骤创建WordPress service WordPress service运行在了swarm-worker2...
  • Docker swarm SwarmDocker 公司在 2014 年 12 月初发布的一套较为简单的工具,用来管理 Docker 集群,它将一群 Docker 宿主机变成一个单一的,虚拟的主机。Swarm 使用标准的 Docker API接口作为其前端访问入口,换...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,252
精华内容 2,500
关键字:

dockerswarm搭建