分享

拉开大变革序幕(中):Docker场景化

eying 发表于 2015-11-7 14:33:49 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 0 8866
本帖最后由 eying 于 2015-11-7 16:07 编辑
问题导读:





1.HAProxy怎么安装?
2.Cluster with Swarm的安装?
3.Docker 集群管理?



一、runC
to make standard containers available everywhere

二、MSP
Managed Service Provider (MSP)

管理服务(managed service)是云计算最古老的形式之一。如IBM可以为很多IT公司的服务(如电子邮件公司和应用APP公司)提供管理安全服务。

我的一个朋友在经营一家互联网APP和Web公司,他的业务核心是为普通人提供优质的互联网服务,对于后台系统和信息系统的管理,如果交给MSP,会变得 cost-efficient,同时MSP可以根据他公司的业务情况提供架构和存储方面的建议。

个人感觉还是中小企业比较青睐MSP。

新的服务领域永远都是管理服务提供商(MSP)最关心的问题。

我们是否可以在MSP上引入Docker?

三、HAProxy

这个是HAProxy官方给出的架构图。

1.png

下面是使用HAProxy的探索。
2.png
安装配置HAProxy:
[mw_shl_code=java,true]#cd /usr/local/src

#wget http://www.haproxy.org/download/ ... oxy-1.7-dev0.tar.gz (截止到2015/11/5 这是最新版本)
#tar xf haproxy-1.7-dev0.tar.gz
#cd haproxy-1.7-dev0
#make TARGET=linux26 ARCH=x86_64
#TARGET是指定内核版本(我的内核是3.10,这里也选择linux26),ARCH指定CPU架构,我使用的是64bit系统
#make install[/mw_shl_code]

创建配置文件和启动文件:

[mw_shl_code=java,true]#mkdir /etc/haproxy

#cp examples/haproxy.init /etc/init.d/haproxy
#chmod +x /etc/init.d/haproxy
#ln -s /usr/local/sbin/haproxy /usr/sbin/ (创建启动文件)
#mkdir /usr/share/haproxy[/mw_shl_code]

编辑配置文件:

vim /etc/haproxy/haproxy.cfg
[mw_shl_code=java,true]global
    log
127.0.0.1   local0  #日志输出配置,所有日志都记录在本机,通过local0输出
    log 127.0.0.1   local1 notice
    #log loghost    local0 info
    maxconn 4096                #最大连接数
    chroot /usr/share/haproxy   #改变当前工作目录
    uid 99                  #所属用户的uid
    gid 99                  #所属运行的gid
    daemon                  #以后台形式运行haproxy
    #debug
    #quiet

defaults
    log global
    mode    http
  #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
    option  httplog
    option  dontlognull
    option   redispatch
  #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
    option  abortonclose
  #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
    retries 3               #两次连接失败就认为是服务器不可用
    maxconn 2000            #默认的最大连接数
  #timeout http-keep-alive 10s
  # timeout queue 1m
    contimeout  5000        #连接超时
    clitimeout  50000       #客户端超时
    srvtimeout  50000       #服务器超时
    timeout check 5s            #心跳检测超时
    stats refresh 30s           #统计页面自动刷新时间
    stats uri  /stats           #统计页面url
    stats realm baison-test-Haproxy         #统计页面密码框上提示文本
    stats auth admin:admin123           #统计页面用户名和密码设置
    stats hide-version                  #隐藏统计页面上HAProxy的版本信息
frontend www
    bind *:80
   #这里建议使用bind *:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了
    acl web hdr(host) -i x1.x2.x3.x4
   #acl后面是规则名称,-i是要访问的域名,如果访问x1.x2.x3.x4这个域名就分发到下面的webserver 的作用域。
    use_backend webserver if web

backend webserver                   #webserver作用域
    mode http
    balance   roundrobin
   #banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数
    #option  httpchk /index.html
    server     web01 x5.x6.x7.x8:22212  check inter 2000 fall 3 weight 30
    server     web01 x8.x9.xa.x8:22213  check inter 2000 fall 3 weight 20
    server     web01 xb.xc.xd.xe:22214  check inter 2000 fall 3 weight 10[/mw_shl_code]

最后启动服务并查看:
[mw_shl_code=java,true]/usr/sbin/haproxy  
-f /etc/haproxy/haproxy.cfg[/mw_shl_code]

浏览器访问: x1.x2.x3.x4/stats

3.png


四、Cluster with Swarm




第一步,安装swarm


[mw_shl_code=java,true]# docker pull swarm[/mw_shl_code]

验证

[mw_shl_code=java,true]# docker run --rm swarm -v[/mw_shl_code]

出现
swarm version 0.4.0 (d647d82)

成功!

如果出现不成功,就一直重复执行命令,甚至可以reboot系统,暴力一些。如果还不行,我采取的方法是在已经有swarm镜像的机器上使用命令docker save 和 docker load对镜像进行tar打包然后传到要安装swarm的机器上进行load,反正一直折腾吧,直到ok为止,O(∩_∩)O哈哈~

ubuntu install docker 通过Docker源安装最新版本

[mw_shl_code=java,true]# apt-get install apt-transport-https

# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
# bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
# apt-get update
# apt-get install lxc-docker[/mw_shl_code]
On swarm master node (123 REHL docker 1.8.2)

[mw_shl_code=java,true]<REHL>

# vim /usr/lib/systemd/system/docker.service

<Enter vim>

#ExecStart=/usr/bin/docker daemon -H fd://
# for swarm using
ExecStart=/usr/bin/docker -d -H 0.0.0.0:2375 -H unix:///var/run/docker.sock

<Exit vim>

# systemctl daemon-reload
# service docker restart[/mw_shl_code]

On swarm other nodes (110 Ubuntu docker 1.7.1, 64 Ubuntu docker 1.8.1)
[mw_shl_code=java,true]<
Ubuntu>

DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock" (vim /etc/default/docker)

# service docker restart[/mw_shl_code]





Notes:
1) docker -d 启动一个后台daemon进程

2) 运行Docker守护进程时,可以用-H标志调整守护进程绑定监听接口的方式。

3) 关于/var/run/docker.sock

当Docker软件包安装完毕后,默认会立即启动Docker守护进程。守护进程监听/var/run/docker.sock“这个Unix套接字文件,来获取来自客户端的Docker请求

如果出现/var/run/docker.sock的报错,解决方法是尝试用root用户身份去操作
Docker 集群管理需要使用服务发现功能。

这里我们不选择DockerHub 提供的服务发现功能(因为经过实践检验,会出现问题,在join时会出现fatal的错误导致无法使用DockerHub提供的服务发现),而是使用本地文件。

第一步:

On 123(swarm manager),把集群中各个机器的ip写入到管理节点上的一个文件中,示例如下[mw_shl_code=actionscript3,true]# echo ip1:2375 >> cluster

# echo ip2:2375 >> cluster
# echo ip3:2375 >> cluster
# cat cluster
ip1:2375
ip2:2375
ip3:2375[/mw_shl_code]

第二步:
[mw_shl_code=actionscript3,true]# docker run -d -p
2376:2375 -v $(pwd)/cluster:/tmp/cluster swarm manage file:///tmp/cluster[/mw_shl_code]

出现
c36af6dd8b0279f4c5c2f49570563f2d61c1a5e23cd630e81d91b444039c9b00

docker ps后发现
CONTAINER ID IMAGE COMMAND
CREATED STATUS PORTS NAMES
c36af6dd8b02 swarm “/swarm manage file:/” 37
seconds ago Up 36 seconds 0.0.0.0:2376->2375/tcp
mad_yalow

可以看到,此时整个集群已经启动成功。
接下来的就可以在任何一台安装了docker的机器上面通过命令使用集群,如在64机器上运行

[mw_shl_code=actionscript3,true]# docker -H swarm_manager_ip:2376 info[/mw_shl_code]

就会显示集群中的机器信息。

五、Spark on Docker


只需执行

[mw_shl_code=java,true]# docker pull sequenceiq/spark:1.5.1[/mw_shl_code]

就会得到spark on docker的image,然后运行
[mw_shl_code=java,true]# docker run -it -p 8088:8088 -p 8042:8042 -h sandbox sequenceiq/spark:1.5.1 bash[/mw_shl_code]

就会启动容器,我们就在机器上用docker来运行spark了。
# docker run -it -p 8088:8088 -p 8042:8042 -h sandbox sequenceiq/spark:1.5.1 bash
/
Starting sshd: [ OK ]
Starting namenodes on [sandbox]
sandbox: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-sandbox.out
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-sandbox.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-sandbox.out
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn–resourcemanager-sandbox.out
localhost: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-sandbox.out

版权声明:本文为博主原创文章,未经博主允许不得转载。







没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条