docker swarm 集群及可视化界面的安装及配置

本文是swarm docker集群的实施文档

环境: centos 7

192.168.1.23 swarm-manager rethinkdb controller swarm-agent consul-c1 registrator

192.168.1.45 registrator swarm-agent consul-s3

192.168.1.65 registrator swarm-agent consul-s2

192.168.1.66 registrator swarm-agent consul-s2

192.168.1.70 registrator  consul-c2 consul-template (nginx、haproxy)

192.168.1.71 registrator  consul-c2 consul-template (nginx、haproxy)

docker-engine 1.12.4

一、安装 docker-engine 1.12.4

1、先检查是否安装旧版本docker

rpm -qa|grep docker
如果有先卸载
yum remove docker*

2.编辑docker.repo文件,写入如下内容

cat >> /etc/yum.repos.d/docker-main.repo << EOF
name=Docker main Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=
EOF

3.安装docker

yum -y install docker-engine

4.关闭防火墙和selinux

systemctl stop firewalld.service
systemctl disable firewalld.service
关闭selinux
sed -i ‘s/SELINUX=.*/SELINUX=disabled/g‘ /etc/selinux/config 
重启

5.增加tcp监听端口

修改/lib/systemd/system/docker.service
sed -i ‘s/ExecStart=.*/ExecStart=\/usr\/bin\/dockerd -H unix\:\/\/\/var\/run\/docker.sock -D -H tcp\:\/\/0.0.0.0\:2375/g‘ /lib/systemd/system/docker.service

6.重启docker

systemctl enable docker.service
systemctl restart docker
ps -ef|grep docker
能看到docker启动及2375端口

7、安装pip及docker api

yum -y install epel-release
yum -y install python-pip
pip install docker-py docker-compose

二、配置consul cluster

1、创建 consul 用户及组

groupadd -g 1000 consul
useradd -u 100 -g 1000 -s /sbin/nologin consul

2、创建consul 数据存储文件夹

mkdir -p /opt/consul/{data,conf}
chown -R consul: /opt/consul

3、拉取consul镜像

docker pull progrium/consul
提示:目录没有官方出consul镜像,以上consul镜像是星数最高的,也是consul官方推荐的第三方docker image

4、启动consul server 192.168.1.66

docker run -d     -p 8300:8300     -p 8301:8301     -p 8301:8301/udp     -p 8302:8302     -p 8302:8302/udp     -p 8400:8400     -p 8500:8500     -p 8600:53     -p 8600:53/udp     -v /opt/consul/data:/data     -h consul-s1     --restart=always     --name=consul-s1     progrium/consul     -server -bootstrap-expect=1     -ui-dir=/ui     -client 0.0.0.0    -advertise 192.168.1.66

5、启动consul server 192.168.1.65

docker run -d     -p 8300:8300     -p 8301:8301     -p 8301:8301/udp     -p 8302:8302     -p 8302:8302/udp     -p 8400:8400     -p 8500:8500     -p 8600:53     -p 8600:53/udp     -v /opt/consul/data:/data     -h consul-s2     --restart=always     --name=consul-s2     progrium/consul     -server     -ui-dir=/ui     -client 0.0.0.0    -advertise 192.168.1.65 -join 192.168.1.66

6、启动consul server 192.168.1.45

docker run -d     -p 8300:8300     -p 8301:8301     -p 8301:8301/udp     -p 8302:8302     -p 8302:8302/udp     -p 8400:8400     -p 8500:8500     -p 8600:53     -p 8600:53/udp     -v /opt/consul/data:/data     -h consul-s3     --restart=always     --name=consul-s3     progrium/consul     -server     -ui-dir=/ui     -client 0.0.0.0    -advertise 192.168.1.45 -join 192.168.1.66

7、启动consul Client 192.168.1.23

docker run -d -h consul-c1 -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -p 8600:53 -p 8600:53/udp  -v /opt/consul/data:/data --restart=always --name=consul-c1 progrium/consul -advertise 192.168.1.23  -join 192.168.1.66

8、启动consul Client 192.168.1.70

docker run -d -h consul-c2 -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -p 8600:53 -p 8600:53/udp  -v /opt/consul/data:/data --restart=always --name=consul-c2 progrium/consul -advertise 192.168.1.70  -join 192.168.1.66

9、启动consul Client 192.168.1.71

docker run -d -h consul-c3 -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -p 8600:53 -p 8600:53/udp  -v /opt/consul/data:/data --restart=always --name=consul-c3 progrium/consul -advertise 192.168.1.71  -join 192.168.1.66

10、关闭consul-s1并删除容器

docker rm -rf consul-s1
重新启动一个新容器
docker run -d     -p 8300:8300     -p 8301:8301     -p 8301:8301/udp     -p 8302:8302     -p 8302:8302/udp     -p 8400:8400     -p 8500:8500     -p 8600:53     -p 8600:53/udp     -v /opt/consul/data:/data     -h consul-s2     --restart=always     --name=consul-s2     progrium/consul     -server     -ui-dir=/ui     -client 0.0.0.0    -advertise 192.168.1.66 -join 192.168.1.65
 进入容器运行  consul  info 查询是否实现自动选举Leader

三、registrator状态获取

依次启动
docker run     -d     --restart=always     --name=registrator     --net=host     -v /var/run/docker.sock:/tmp/docker.sock     gliderlabs/registrator     -ip 192.168.1.66     consul://192.168.1.66:8500
    
    docker run     -d     --restart=always     --name=registrator     --net=host     -v /var/run/docker.sock:/tmp/docker.sock     gliderlabs/registrator     -ip 192.168.1.65     consul://192.168.1.65:8500
    
    docker run     -d     --restart=always     --name=registrator     --net=host     -v /var/run/docker.sock:/tmp/docker.sock     gliderlabs/registrator     -ip 192.168.1.45     consul://192.168.1.45:8500
    
    docker run     -d     --restart=always     --name=registrator     --net=host     -v /var/run/docker.sock:/tmp/docker.sock     gliderlabs/registrator     -ip 192.168.1.23     consul://192.168.1.23:8500
    docker run     -d     --restart=always     --name=registrator     --net=host     -v /var/run/docker.sock:/tmp/docker.sock     gliderlabs/registrator     -ip 192.168.1.70     consul://192.168.1.70:8500
    
    docker run     -d     --restart=always     --name=registrator     --net=host     -v /var/run/docker.sock:/tmp/docker.sock     gliderlabs/registrator     -ip 192.168.1.71     consul://192.168.1.71:8500

四、安装 Shipyard+Swarm

1、 192.168.1.23

docker run -tid     -p 3375:3375     --restart=always     --name shipyard-swarm-manager     swarm:latest     manage --host tcp://0.0.0.0:3375 consul://192.168.1.66:8500
 
docker run -tid      --restart=always      --name=shipyard-rethinkdb      -p 28015:28015      -p 29015:29015      -v /data/rethinkdb:/data      index.tenxcloud.com/docker_library/rethinkdb
     
docker run -tid     --restart=always     --name shipyard-controller     --link shipyard-rethinkdb:rethinkdb     --link shipyard-swarm-manager:swarm     -p 8080:8080     dockerclub/shipyard:latest     server     -d tcp://swarm:3375  # 中文镜像

docker run -tid     --restart=always     --name shipyard-swarm-agent     swarm:latest     join --addr 192.168.1.23:2375 consul://192.168.1.66:8500

2、安装swarm-agent (192.168.1.66,192.168.1.65,192.168.1.45)

docker run -tid     --restart=always     --name shipyard-swarm-agent     swarm:latest     join --addr 192.168.1.66:2375 consul://192.168.1.66:8500
docker run -tid     --restart=always     --name shipyard-swarm-agent     swarm:latest     join --addr 192.168.1.65:2375 consul://192.168.1.66:8500
docker run -tid     --restart=always     --name shipyard-swarm-agent     swarm:latest     join --addr 192.168.1.45:2375 consul://192.168.1.66:8500

五、安装haproxy or nginx (192.168.1.70,192.168.1.71)

1、安装haproxy

http://www.haproxy.org/download/1.7/src/haproxy-1.7.0.tar.gz

yum -y install git patch gcc gcc-c++  readline-devel zlib-devel libffi-devel  openssl openssl-devel make autoconf automake libtool bison libxml2  libxml2-devel libxslt-devel libyaml-devel  python  python-docutils  cmake imake expat-devel libaio libaio-devel bzr ncurses-devel wget  libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel   pcre-devel curl-devel libmcrypt libmcrypt-devel
cd /tmp
wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.0.tar.gz
tar -xvf /tmp/haproxy-1.7.0.tar.gz 
 make TARGET=linux31 PREFIX=/opt/haproxy
 make install PREFIX=/opt/haproxy

2、配置/opt/haproxy/conf/haproxy.conf

global
                log 127.0.0.1   local0
                #log 127.0.0.1  local1 notice
                #log loghost    local0 info
                maxconn 50000
                chroot /opt/haproxy
                uid 99
                gid 99

                daemon
                nbproc 2
                pidfile /opt/haproxy/run/haproxy.pid
                #debug
                #quiet

 defaults
                mode    tcp
                option  dontlognull
                option  forwardfor
                option  redispatch
                retries 2
                balance static-rr
                stats enable
                stats uri /ha?stats  #haproxy运行状态查看 自定义uri
                timeout connect     3000
                timeout client      50000
                timeout server 50000

listen admin_stat
        # 监听端口
        bind *:8888
        # http的7层模式
        mode http
        #log global
        # 统计页面自动刷新时间
        stats refresh 30s
        # 统计页面URL
        stats uri /admin?stats
        # 统计页面密码框上提示文本
        stats realm Haproxy\ Statistics
        # 统计页面用户名和密码设置
        stats auth admin:admin
        # 隐藏统计页面上HAProxy的版本信息
        #stats hide-version

listen login
        bind *:9999
        mode tcp
        balance roundrobin
        option httpchk
        #maxconn 50000
        #log 127.0.0.1 local0 debug

3、haproxy 启动脚本 /etc/init.d/haproxy

#! /bin/bash
# chkconfig: - 85 15
# description: haproxy is a World Wide Web server. It is used to serve
PROGDIR=/opt/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/conf/$PROGNAME.conf
PIDFILE=$PROGDIR/run/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/opt/haproxy/init.d/$PROGNAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
start()
 {
    echo -n "Starting $DESC: $PROGNAME"
   $DAEMON -f $CONFIG
   echo "."
        }
stop()
 {  echo -n "Stopping $DESC: $PROGNAME"
    cat $PIDFILE | xargs kill
    echo "."
}

reload()
 { echo -n "reloading $DESC: $PROGNAME"
   $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
}
case "$1" in
  start)
  start
  ;;
 stop)
  stop
   ;;
 reload)
 reload
   ;;
*)
 echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2
 exit 1
 ;;
esac
exit 0

4、启动 haproxy 并加入开机启动

chmod +x haproxy 
chkconfig haproxy on
service haproxy start

5、安装nginx 并支支持数字证书

https://www.openssl.org/source/openssl-1.1.0c.tar.gz

http://nginx.org/download/nginx-1.11.7.tar.gz

yum -y install git patch gcc gcc-c++  readline-devel zlib-devel libffi-devel  openssl openssl-devel make autoconf automake libtool bison libxml2  libxml2-devel libxslt-devel libyaml-devel  python  python-docutils  cmake imake expat-devel libaio libaio-devel bzr ncurses-devel wget  libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel   pcre-devel curl-devel libmcrypt libmcrypt-devel
下载安装openssl
 cd /tmp
wget https://www.openssl.org/source/openssl-1.1.0c.tar.gz
 tar -xvf openssl-1.1.0c.tar.gz
 cd /tmp/openssl-1.1.0c
./config   --openssldir=/usr/local/ssl
make && make install
./config shared  --openssldir=/usr/local/ssl
make clean
make && make install

下载安装 nginx
cd /tmp
wget http://nginx.org/download/nginx-1.11.7.tar.gz
groupadd -r nginx
useradd -g nginx -r nginx 
tar -xvf nginx-1.11.7.tar.gz
cd /tmp/nginx-1.11.7
./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-openssl=/tmp/openssl-1.1.0c \ # openssl 源码路径
--with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-ipv6 
mkdir -pv /var/cache/nginx/{client_temp,proxy_temp,fastcgi_temp,uwsgi_temp,scgi_temp}
make && make install

6、nginx 配置文件

修改/etc/nginx/nginx.conf
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;

    include user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;

    include /etc/nginx/conf.d/*.conf;
}/*.conf;
}
 
创建 /etc/nginx/conf.d 文件夹
mkdir -p /etc/nginx/conf.d
添加nginx默认web配置文件
/etc/nginx/conf.d/default.conf
server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /usr/local/nginx/html;
            index  index.php index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           /usr/local/nginx/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
        location ~* ^.+\.(jpg|jpeg|gif|png|bmp)$ {
            access_log  off;
            root        opencart;
            expires     30d;
                        break;
        }
}

7、创建nginx 启动脚本 /etc/init.d/nginx

# chkconfig: 2345 10 90
# description: Start and Stop redis

PATH=/usr/local/bin:/sbin:/usr/bin:/bin

EXEC=/usr/sbin/nginx
PIDFILE=/var/run/nginx.pid
CONF="/etc/nginx/nginx.conf"
AUTH="1234"

case "$1" in
        start)
                if [ -f $PIDFILE ]
                then
                        echo "$PIDFILE exists, process is already running or crashed."
                else
                        echo "Starting nginx server..."
                        $EXEC &
                fi
                if [ "$?"="0" ]
                then
                        echo "nginx is running..."
                fi
                ;;
        stop)
                if [ ! -f $PIDFILE ]
                then
                        echo "$PIDFILE exists, process is not running."
                else
                        PID=$(cat $PIDFILE)
                        echo "Stopping..."
                        kill -9 $PID
                        PID=$(pidof nginx)
                        kill -9 $PID
                        rm -rf /var/run/nginx.pid
                        sleep 2
                       while [ -x $PIDFILE ]
                       do
                                echo "Waiting for nginx to shutdown..."
                               sleep 1
                        done
                        echo "nginx stopped"
                fi
                ;;
        restart|force-reload)
                ${0} stop
                ${0} start
                ;;
        *)
               echo "Usage: /etc/init.d/nginx {start|stop|restart|force-reload}" >&2
                exit 1
esac

8、设置nginx开机启动并启动nginx

chmod +x nginx 
chkconfig nginx on
service nginx start

六、安装consul-template 实现服务器自动发现

1、下载consul-template

https://releases.hashicorp.com/consul-template/0.16.0/consul-template_0.16.0_linux_amd64.zip

cd /tmp
wget https://releases.hashicorp.com/consul-template/0.16.0/consul-template_0.16.0_linux_amd64.zip
yum -y install unzip
unzip /tmp/consul-template_0.16.0_linux_amd64.zip -d /usr/bin/

2、consul-template  haproxy配置

cat > /opt/consul/conf/haproxy_ctmpl.json << EOF
consul = "127.0.0.1:8500"
  
template {
  source = "/opt/haproxy/conf/haproxy.ctmpl"
  destination = "/opt/haproxy/conf/haproxy.conf"
  command = "/etc/init.d/haproxy reload"
}
EOF

3、 /opt/haproxy/conf/haproxy.ctmpl 配置

 global  
                log 127.0.0.1   local0  
                #log 127.0.0.1  local1 notice  
                #log loghost    local0 info  
                maxconn 50000  
                chroot /opt/haproxy
                uid 99  
                gid 99 

                daemon  
                nbproc 2
                pidfile /opt/haproxy/run/haproxy.pid  
                #debug  
                #quiet  
   
 defaults  
                mode    tcp  
                option  dontlognull  
                option  forwardfor  
                option  redispatch  
                retries 2  
                balance static-rr
                stats enable
                stats uri /ha?stats 
                timeout connect     3000  
                timeout client      50000  
                timeout server 50000  

listen admin_stat  
        bind *:8888    
        mode http  
        #log global   
        stats refresh 30s  
        stats uri /admin?stats  
        stats realm Haproxy\ Statistics 
        stats auth admin:admin 
        #stats hide-version  

frontend www
         bind *:80
         mode http
         acl apache  hdr(HOST) apache.zone.com
         acl nginx   hdr(HOST) nginx.zone.com
         use_backend apache.qkazone.com if apache
         use_backend nginx.qkazone.com if nginx
backend apache.zone.com
        balance         roundrobin
        mode            http
{{range service "apache-php-80"}}
        server  apache {{.Address}}:{{.Port}} check {{end}}

backend nginx.zone.com
        mode http
        balance         roundrobin
{{range service "nginx-80"}}
        server  nginx {{.Address}}:{{.Port}} check {{end}}

listen login
        bind *:9999
        mode tcp
        balance roundrobin
        #log 127.0.0.1 local0 debug
        {{range service "centos7"}}
        server  ssh {{.Address}}:{{.Port}} check {{end}}

4、配置consul-template  haproxy 启动脚本 /etc/init.d/haproxy_ctmpl

#!/bin/bash
# chkconfig: 2345 10 90
# description: Start and Stop redis

PATH=/usr/local/bin:/sbin:/usr/bin:/bin
EXEC=/usr/bin/consul-template
CONF="/opt/consul/conf/haproxy_ctmpl.json"
case "$1" in
        start)
                 PID=$(ps -ef | grep -v grep  | grep "$EXEC -config $CONF" | awk ‘{print $2}‘)
               if [ -n "$PID"   ]
                   then
                     echo "haproxy_ctmpl is running..."
              else
                echo "Starting haproxy_ctmpl server..."
                        $EXEC -config $CONF > /tmp/haproxy_ctmpl.out 2>&1 &
             fi
             ;;
       stop)
            PID=$(ps -ef | grep -v grep  | grep "$EXEC -config $CONF" | awk ‘{print $2}‘)
            if [  -n "$PID" ]
                 then
                        echo "Stopping..."
                        kill -9 $PID
                        sleep 2
               else
               echo "haproxy_ctmpl exists, process is not running."
             fi
             ;;
       restart|force-reload)
                ${0} stop
                ${0} start
                ;;
*)
               echo "Usage: /etc/init.d/tmpl {start|stop|restart|force-reload}" >&2
                exit 1
esac

5、设置开机启动,启动

chmod +x haproxy_ctmpl 
chkconfig haproxy_ctmpl on
service haproxy_ctmpl start

6、consul-template  nginx配置 /opt/consul/conf/nginx_ctmpl.json

cat > /opt/consul/conf/nginx_ctmpl.json << EOF
consul = "127.0.0.1:8500"
  
template {
  source = "/etc/nginx/conf.d/nginx_web.ctmpl"
  destination = "/etc/nginx/conf.d/nginx_web.conf"
  command = "/usr/sbin/nginx  -s reload"
}
EOF

7、/etc/nginx/conf.d/nginx_web.ctmpl 配置

upstream apache {
    ip_hash;
    # Refer: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
    # least_conn;
    # least_time;
{{range service "apache-php-80"}}
    server {{.Address}}:{{.Port}} fail_timeout=0;
{{end}}
    keepalive 64;
}
server {
    listen 80;
    server_name apache.zone.com;
    location / {
        client_max_body_size    0;
        proxy_connect_timeout 300s;
        proxy_send_timeout   900;
        proxy_read_timeout   900;
        proxy_buffer_size    32k;
        proxy_buffers      4 32k;
        proxy_busy_buffers_size 64k;
        proxy_redirect     off;
        proxy_hide_header  Vary;
        proxy_set_header   Accept-Encoding ‘‘;
        proxy_set_header   Host   $host;
        proxy_set_header   Referer $http_referer;
        proxy_set_header   Cookie $http_cookie;
        proxy_set_header   X-Real-IP  $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   Host $host;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_headers_hash_max_size 51200;
        proxy_headers_hash_bucket_size 6400;
        proxy_pass          http://apache/;
    }
}
upstream nginx {
    ip_hash;
    # Refer: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
    # least_conn;
    # least_time;
{{range service "nginx-80"}}
    server {{.Address}}:{{.Port}} fail_timeout=0;
{{end}}
    keepalive 64;
}
server {
    listen 80;
    server_name nginx.zone.com;
    location / {
        client_max_body_size    0;
        proxy_connect_timeout 300s;
        proxy_send_timeout   900;
        proxy_read_timeout   900;
        proxy_buffer_size    32k;
        proxy_buffers      4 32k;
        proxy_busy_buffers_size 64k;
        proxy_redirect     off;
        proxy_hide_header  Vary;
        proxy_set_header   Accept-Encoding ‘‘;
        proxy_set_header   Host   $host;
        proxy_set_header   Referer $http_referer;
        proxy_set_header   Cookie $http_cookie;
        proxy_set_header   X-Real-IP  $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   Host $host;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_headers_hash_max_size 51200;
        proxy_headers_hash_bucket_size 6400;
        proxy_pass          http://nginx/;
    }
}

8、配置consul-template  nginx启动脚本 /etc/init.d/nginx_ctmpl

#!/bin/bash
# chkconfig: 2345 10 90
# description: Start and Stop redis

PATH=/usr/local/bin:/sbin:/usr/bin:/bin
EXEC=/usr/bin/consul-template
CONF="/opt/consul/conf/nginx_ctmpl.json"
case "$1" in
        start)
                 PID=$(ps -ef | grep -v grep  | grep "$EXEC -config $CONF" | awk ‘{print $2}‘)
               if [ -n "$PID"   ]
                   then
                     echo "haproxy_ctmpl is running..."
              else
                echo "Starting haproxy_ctmpl server..."
                        $EXEC -config $CONF > /tmp/nginx_ctmpl.out 2>&1 &
             fi
             ;;
       stop)
            PID=$(ps -ef | grep -v grep  | grep "$EXEC -config $CONF" | awk ‘{print $2}‘)
            if [  -n "$PID" ]
                 then
                        echo "Stopping..."
                        kill -9 $PID
                        sleep 2
               else
               echo "haproxy_ctmpl exists, process is not running."
             fi
             ;;
       restart|force-reload)
                ${0} stop
                ${0} start
                ;;
*)
               echo "Usage: /etc/init.d/tmpl {start|stop|restart|force-reload}" >&2
                exit 1
esac

9、设置开机启动

chmod +x nginx_ctmpl 
chkconfig nginx_ctmpl on
service nginx_ctmpl start

七、测试是否自动发现

docker run -ti -d -p :80 eboraas/apache-php 
docker run -d -ti -p :80 nginx

1、打开 http://192.168.1.66:8500/ui/#/dc1/services

2、http://192.168.1.23:8080/#/containers

查看shipyard  管理平台

账号admin密码 shipyard

3、haproxy

http://192.168.1.70:8888/admin?stats

http://192.168.1.71:8888/admin?stats

账号:admin 密码admin










最后:注意事项:consul  registrator 是基于端口发现的不映射端口是发现不了的

consul 服务挂了整个宿主机运行应用将不可见。registrator 是基于镜像名加端口服务 

镜像名称为nginx 映射端口80 对外发现的服务名称nginx-80

像集群添加宿主机

consul  registrator  swarm-agent   registrator   链接consul  端口请使用宿主机的consul  端口

使用其它机器端口如果其它机器挂了这台宿主机的应用不可被发现

时间: 2024-10-13 20:56:46

docker swarm 集群及可视化界面的安装及配置的相关文章

docker swarm集群及其UI部署

一.规划 ①swarm01作为manager节点,swarm02和swarm03作为worker节点. # cat /etc/hosts 127.0.0.1   localhost 192.168.139.175  swarm01  192.168.139.176  swarm02  192.168.139.177  swarm03 ②配置SSH免密登陆 # ssh-keygen -t rsa -P '' # ssh-copy-id -i .ssh/id_rsa.pub [email prote

Docker系列(十四):Docker Swarm集群

一.Swarm简介 Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源.Swarm和Kubernetes比较类似,但是更加轻便,具有的功能也较kubernetes更少一些. Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm 是 Do

docker Swarm集群配置

前言: Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合. 从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们

Docker Swarm集群部署实战

基本概念: Swarm介绍:Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in Go, docker_py,docker等)均可以直接与Swarm通信.Swarm几乎全部用Go语言来完成开发,Swarm0.2版本增加了一个新的策略来调度集群中的容器,使得在可

云计算之路-阿里云上-容器难容:自建docker swarm集群遭遇无法解决的问题

我们从今年6月开始在生产环境进行 docker 容器化部署,将已经迁移至 ASP.NET Core 的站点部署到 docker swarm 集群上.开始我们选用的阿里云容器服务,但是在使用过程中我们遭遇了恐怖的路由服务(acsrouting)路由错乱问题 —— 请求被随机路由到集群中的任一容器,虽然后来阿里云修复了这个问题,但我们对容器服务失去了信心,走上了用阿里云服务器自建 docker swarm 集群的道路. 用上自建 docker swarm 集群之后,本以为可以在云上容器中过上安稳的日

非节点主机通过内网远程管理docker swarm集群

这是今天使用 docker swarm 遇到的一个问题,终于在睡觉前解决了,在这篇随笔中记录一下. 在 docker swarm 集群的 manager 节点上用 docker cli 命令可以正常管理集群.但是在另外一台不是集群节点的主机上,虽然设置了DOCKER_HOST环境变量 export DOCKER_HOST="tcp://manger节点内网IP:2377" 但连接不上 # docker ps Cannot connect to the Docker daemon at

Docker Swarm集群部署应用

在Docker Swarm集群部署应用 我们过去使用docker run的命令创建容器, 把前面替换成docker service create就行了. 建议搭建一个registry,为所的docker主机提供镜像下载,否则你需要在每个docker主机本地存在容器镜像. 所以搭建一个私有仓库,由私有仓库提供所需要的镜像, 本实验环境中用node1同时作为registry. 拉取本地私有仓库registry,查看registry镜像 基础环境 全部为CentOS7系统,Docker 版本为1.12

docker swarm集群部署

docker swarm 集群构建: swarm 在docker 1.12 版本后内置 #h官方文档tps://docs.docker.com/engine/swarm/#feature-highlights 系统环境: centos7.3 docker17.06 1.初始化manager节点: docker swarm init 为实现高可用,manager节点需要有奇数个,类似zookerper选举制度. 2.复制生成的命令,在node节点运行. #docker swarm join-tok

故障公告:docker swarm集群“群龙无首”造成部分站点无法访问

今天傍晚 17:38-18:18 左右,由于 docker swarm 集群出现 "The swarm does not have a leader" 问题,造成博问.闪存.园子.小组.openapi 无法正常访问,由此给您带来麻烦,请您谅解. 目前我们已经迁移至 asp.net core 的站点都部署在 docker swarm 集群上,节点用的是阿里云服务器,操作系统是 ubtunu 16.04 ,docker engine 版本是 17.06.0-ce, build 02c1d8