hbase RegionServer节点启动失败

大数据 空心菜 回复了问题 2 人关注 2 个回复 7082 次浏览 2016-02-27 16:21 来自相关话题

高性能网络里,你不知道的TIME_WAIT解疑(下)

运维 being 发表了文章 0 个评论 3266 次浏览 2016-02-26 17:20 来自相关话题

继上一篇文章TIME_WAIT和CLOSE_WAIT解疑(上), 继续答疑! 先回答几个问题​: Q:请问我们所说连接池可以复用连接,是不是意味着,需要等到上个连接time wait结束后才能再次使用? A:所 ...查看全部
继上一篇文章TIME_WAIT和CLOSE_WAIT解疑(上), 继续答疑!
先回答几个问题​:
Q:请问我们所说连接池可以复用连接,是不是意味着,需要等到上个连接time wait结束后才能再次使用?


A:所谓连接池复用,复用的一定是活跃的连接,所谓活跃,第一表明连接池里的连接都是ESTABLISHED的,第二,连接池做为上层应用,会有定时的心跳去保持连接的活跃性。既然连接都是活跃的,那就不存在有TIME_WAIT的概念了,在上篇里也有提到,TIME_WAIT是在主动关闭连接的一方,在关闭连接后才进入的状态。既然已经关闭了,那么这条连接肯定已经不在连接池里面了,即被连接池释放了。


Q:想请问下,作为负载均衡的机器随机端口使用完的情况下大量time_wait,不调整你文字里说的那三个参数,有其他的更好的方案吗?​


第一,随机端口使用完,你可以通过调整/etc/sysctl.conf下的net.ipv4.ip_local_port_range配置,至少修改成 net.ipv4.ip_local_port_range=1024 65535,保证你的负载均衡服务器至少可以使用6万个随机端口,也即可以有6万的反向代理到后端的连接,可以支持每秒1000的并发(想一想,因为TIME_WAIT状态会持续1分钟后消失,所以一分钟最多有6万,每秒1000);如果这么多端口都使用完了,也证明你应该加服务器了,或者,你的负载均衡服务器需要配置多个IP地址,或者,你的后端服务器需要监听更多的端口和配置更多的IP(想一下socket的五元组)

第二,大量的TIME_WAIT,多大量?如果是几千个,其实不用担心,因为这个内存和CPU的消耗有一些,但是是可以忽略的。

第三,如果真的量很大,上万上万的那种,可以考虑,让后端的服务器主动关闭连接,如果后端服务器没有外网的连接只有负载均衡服务器的连接(主要是没有NAT网络的连接),可以在后端服务器上配置tw_recycle,然后同时,在负载均衡服务器上,配置tw_reuse。参见本文后面的解释。


Q:如果想深入的学习一下网络方面的知识,有什么推荐的?


学习网络比学一门编程语言“难”很多。所谓难,其实,是因为需要花很多的时间投入。我自己不算精通,只能说入门和理解。基本书可以推荐:《TCP/IP 协议详解》,必读;《TCP/IP高效编程:改善网络程序的44个技巧》,必读;《Unix环境高级编程》,必读;《Unix网络编程:卷一》,我只读过卷一;另外,还需要熟悉一下网络工具,tcpdump以及wireshark,我的notes里有一个一站式学习Wireshark:https://github.com/dafang/notebook/issues/114,也值得一读。有了这些积累,可能就是一些实践以及碎片化的学习和积累了。


TIME_WAIT很多,可怕吗?
如果你通过 ss -tan state time-wait | wc -l 发现,系统中有很多TIME_WAIT,很多人都会紧张。多少算多呢?几百几千?如果是这个量级,其实真的没必要紧张。第一,这个量级,因为TIME_WAIT所占用的内存很少很少;因为记录和寻找可用的local port所消耗的CPU也基本可以忽略。
会占用内存吗?当然!任何你可以看到的数据,内核里都需要有相关的数据结构来保存这个数据啊。一条Socket处于TIME_WAIT状态,它也是一条“存在”的socket,内核里也需要有保持它的数据:
    []内核里有保存所有连接的一个hash table,这个hash table里面既包含TIME_WAIT状态的连接,也包含其他状态的连接。主要用于有新的数据到来的时候,从这个hash table里快速找到这条连接。不同的内核对这个hash table的大小设置不同,你可以通过dmesg命令去找到你的内核设置的大小:[/]
tm1.png
    []还有一个hash table用来保存所有的bound ports,主要用于可以快速的找到一个可用的端口或者随机端口:[/]
tm2.png
由于内核需要保存这些数据,必然,会占用一定的内存。 会消耗CPU吗?当然!每次找到一个随机端口,还是需要遍历一遍bound ports的吧,这必然需要一些CPU时间。
TIME_WAIT很多,既占内存又消耗CPU,这也是为什么很多人,看到TIME_WAIT很多,就蠢蠢欲动的想去干掉他们。其实,如果你再进一步去研究,1万条TIME_WAIT的连接,也就多消耗1M左右的内存,对现代的很多服务器,已经不算什么了。至于CPU,能减少它当然更好,但是不至于因为1万多个hash item就担忧。
如果,你真的想去调优,还是需要搞清楚别人的调优建议,以及调优参数背后的意义! TIME_WAIT调优,你必须理解的几个调优参数在具体的图例之前,我们还是先解析一下相关的几个参数存在的意义。net.ipv4.tcp_timestamps

RFC 1323 在 TCP Reliability一节里,引入了timestamp的TCP option,两个4字节的时间戳字段,其中第一个4字节字段用来保存发送该数据包的时间,第二个4字节字段用来保存最近一次接收对方发送到数据的时间。有了这两个时间字段,也就有了后续优化的余地。tcp_tw_reuse 和 tcp_tw_recycle就依赖这些时间字段。

net.ipv4.tcp_tw_reuse

字面意思,reuse TIME_WAIT状态的连接。时刻记住一条socket连接,就是那个五元组,出现TIME_WAIT状态的连接,一定出现在主动关闭连接的一方。所以,当主动关闭连接的一方,再次向对方发起连接请求的时候(例如,客户端关闭连接,客户端再次连接服务端,此时可以复用了;负载均衡服务器,主动关闭后端的连接,当有新的HTTP请求,负载均衡服务器再次连接后端服务器,此时也可以复用),可以复用TIME_WAIT状态的连接。通过字面解释,以及例子说明,你看到了,tcp_tw_reuse应用的场景:某一方,需要不断的通过“短连接”连接其他服务器,总是自己先关闭连接(TIME_WAIT在自己这方),关闭后又不断的重新连接对方。那么,当连接被复用了之后,延迟或者重发的数据包到达,新的连接怎么判断,到达的数据是属于复用后的连接,还是复用前的连接呢?那就需要依赖前面提到的两个时间字段了。复用连接后,这条连接的时间被更新为当前的时间,当延迟的数据达到,延迟数据的时间是小于新连接的时间,所以,内核可以通过时间判断出,延迟的数据可以安全的丢弃掉了。这个配置,依赖于连接双方,同时对timestamps的支持。同时,这个配置,仅仅影响outbound连接,即做为客户端的角色,连接服务端[connect(dest_ip, dest_port)]时复用TIME_WAIT的socket。

net.ipv4.tcp_tw_recycle

字面意思,销毁掉 TIME_WAIT。当开启了这个配置后,内核会快速的回收处于TIME_WAIT状态的socket连接。多快?不再是2MSL,而是一个RTO(retransmission timeout,数据包重传的timeout时间)的时间,这个时间根据RTT动态计算出来,但是远小于2MSL。有了这个配置,还是需要保障 丢失重传或者延迟的数据包,不会被新的连接(注意,这里不再是复用了,而是之前处于TIME_WAIT状态的连接已经被destroy掉了,新的连接,刚好是和某一个被destroy掉的连接使用了相同的五元组而已)所错误的接收。在启用该配置,当一个socket连接进入TIME_WAIT状态后,内核里会记录包括该socket连接对应的五元组中的对方IP等在内的一些统计数据,当然也包括从该对方IP所接收到的最近的一次数据包时间。当有新的数据包到达,只要时间晚于内核记录的这个时间,数据包都会被统统的丢掉。这个配置,依赖于连接双方对timestamps的支持。同时,这个配置,主要影响到了inbound的连接(对outbound的连接也有影响,但是不是复用),即做为服务端角色,客户端连进来,服务端主动关闭了连接,TIME_WAIT状态的socket处于服务端,服务端快速的回收该状态的连接。由此,如果客户端处于NAT的网络(多个客户端,同一个IP出口的网络环境),如果配置了tw_recycle,就可能在一个RTO的时间内,只能有一个客户端和自己连接成功(不同的客户端发包的时间不一致,造成服务端直接把数据包丢弃掉)。

我尽量尝试用文字解释清楚,但是,来点案例和图示,应该有助于我们彻底理解。我们来看这样一个网络情况:
arch.png
[list=1][]客户端IP地址为:180.172.35.150,我们可以认为是浏览器[/][]负载均衡有两个IP,外网IP地址为 115.29.253.156,内网地址为10.162.74.10;外网地址监听80端口[/][]负载均衡背后有两台Web服务器,一台IP地址为 10.162.74.43,监听80端口;另一台为 10.162.74.44,监听 80 端口[/][]Web服务器会连接数据服务器,IP地址为 10.162.74.45,监听 3306 端口[/]这种简单的架构下,我们来看看,在不同的情况下,我们今天谈论的tw_reuse/tw_recycle对网络连接的影响。 先做个假定:[list=1][]客户端通过HTTP/1.1连接负载均衡,也就是说,HTTP协议投Connection为keep-alive,所以我们假定,客户端 对 负载均衡服务器 的socket连接,客户端会断开连接,所以,TIME_WAIT出现在客户端[/][]Web服务器和MySQL服务器的连接,我们假定,Web服务器上的程序在连接结束的时候,调用close操作关闭socket资源连接,所以,TIME_WAIT出现在 Web 服务器端。[/] 那么,在这种假定下:[list=1][]Web服务器上,肯定可以配置开启的配置:tcp_tw_reuse;如果Web服务器有很多连向DB服务器的连接,可以保证socket连接的复用。[/][]那么,负载均衡服务器和Web服务器,谁先关闭连接,则决定了我们怎么配置tcp_tw_reuse/tcp_tw_recycle了[/方案一:负载均衡服务器 首先关闭连接 在这种情况下,因为负载均衡服务器对Web服务器的连接,TIME_WAIT大都出现在负载均衡服务器上,所以,在负载均衡服务器上的配置:
    []net.ipv4.tcp_tw_reuse = 1 //尽量复用连接[/][]net.ipv4.tcp_tw_recycle = 0 //不能保证客户端不在NAT的网络啊[/]
 在Web服务器上的配置为:
    []net.ipv4.tcp_tw_reuse = 1 //这个配置主要影响的是Web服务器到DB服务器的连接复用[/][]net.ipv4.tcp_tw_recycle: 设置成1和0都没有任何意义。想一想,在负载均衡和它的连接中,它是服务端,但是TIME_WAIT出现在负载均衡服务器上;它和DB的连接,它是客户端,recycle对它并没有什么影响,关键是reuse[/]
 方案二:Web服务器首先关闭来自负载均衡服务器的连接在这种情况下,Web服务器变成TIME_WAIT的重灾区。负载均衡对Web服务器的连接,由Web服务器首先关闭连接,TIME_WAIT出现在Web服务器上;Web服务器对DB服务器的连接,由Web服务器关闭连接,TIME_WAIT也出现在它身上,此时,负载均衡服务器上的配置:
    []net.ipv4.tcp_tw_reuse:0 或者 1 都行,都没有实际意义[/][]net.ipv4.tcp_tw_recycle=0 //一定是关闭recycle[/]
 在Web服务器上的配置:
    []net.ipv4.tcp_tw_reuse = 1 //这个配置主要影响的是Web服务器到DB服务器的连接复用[/][]net.ipv4.tcp_tw_recycle=1 //由于在负载均衡和Web服务器之间并没有NAT的网络,可以考虑开启recycle,加速由于负载均衡和Web服务器之间的连接造成的大量TIME_WAIT[/]

 


作者:大房说
分享阅读地址:http://dwz.cn/2NgmFY


浅谈软件架构设计

运维 Rock 发表了文章 0 个评论 7398 次浏览 2016-02-26 00:14 来自相关话题

软件架构介绍 架构定义:软件架构不仅仅注重软件本身的结构和行为, 还注重其他特性:使用, 功能性, 性能, 弹性, 重用, 可理解性, 经济和技术的限制及权衡。软件架构的目标: []可延伸性(Extensible)。在新技 ...查看全部


软件架构介绍


架构定义:
软件架构不仅仅注重软件本身的结构和行为, 还注重其他特性:使用, 功能性, 性能, 弹性, 重用, 可理解性, 经济和技术的限制及权衡。
软件架构的目标:
    []可延伸性(Extensible)。在新技术出现的时候,一个软件系统应当允许导入新技术,从而对现有系统进行功能和性能的扩展;[/][]可维护性(Maintainable)。软件系统的维护包括两方面:1、排除现有的错误;2、将新的软件需求反映到现有系统中去,一个易于维护的系统可以有效地降低技术支持的花费。[/][]客户体验(Customer Experience)。软件系统必须易于使用。[/][]市场时机(Time to Market)。软件用户[/]
 软件逻辑架构:
逻辑架构:软件系统中元件之间的关系,比如用户界面,数据库,外部系统接口,商业逻辑元件,等等
软件系统的逻辑架构图:
ceng.jpg
 软件物理架构:
物理架构:软件元件是怎样放到硬件上的?
软件系统的物理架构图
wl.png

物联网架构的演变

单机(One Box)简单web应用:
    []访问量小[/][]Apache/PHP/MySQL 在同一主机上[/][]瓶颈[/]
                 1、通常先出现在数据库,然后才是Apache/php                 2、硬盘 I/O (Innodb) 或MyISAM锁等待
one.png
 双机(Two Box)
    []访问量逐渐增大[/][]Apache/PHP在Server A;MySQL在Server B[/][]瓶颈[/]
                 1、硬盘 I/O (Innodb) 或MyISAM锁等待                 2、网络I/O
two.png
 多机 (Many Boxes with Replication)
    []访问量继续增大[/][]MySQL主从复制及读写分离 (master 负责IN/UP/DEL, slave负责 SELECT)[/][]SELECT, IN/UP/DEL可以在应用程序内指定访问不同服务器 (如使用不同的handle或Db Adapter)[/][]WEB Server可能需要使用负载均衡[/][]NoSQL/Cache/CDN[/]
many.png
 系统分层:
fc.png
Cache Tier
Memcached、Redis等广泛使用。
cache.png
架构新问题Mysql:[list=1][]Slave Lag 每台Slave数据完全一样。有的忙,有的闲[/][]数据量越来越大,单表过大,查询效率太低;[/]综合1.2 通常采用
    []memcached数据缓存 [/][]MySQL水平扩展(库表拆分)[/]
Web Server 负载过高 
    []提高PHP代码执行效率 Opcode Cache[/][]静态文件缓存  Squid/Varnish / CDN[/][]负载均衡[/]
fcache.png
 新架构目标:
    []高可用[/][]高性能 [/][]可扩展 [/][]监控[/][]成本控制[/]

分布式系统架构

分布式系统概念
What is a Distributed System?“一个分布式系统是若干个独立的计算机的集合,但是对该系统的用户来说,系统就像一台计算机一样。”
两方面的含义:[list=1][]硬件方面:各个计算机都是自治的 [/][]软件方面:用户将整个系统看作是一台计算机 [/]  分布式系统定义:
一个分布式系统组织成中间件形式,中间件层分布在多台机器上。
fbs.png
分布式系统优点:
yd.png
分布式操作系统特点:
td.png
 网络操作系统(NOS)网络操作系统的一般结构:
netos.png
分布式系统中设计的关键问题:透明性(对用户、程序)
tm.png
灵活性
lhx.png
单内核基本上是目前的集中式操作系统,增加了网络功能和远程服务集合。 微内核的四种基本服务:        (1)进程间通信机制        (2)少量内存管理功能        (3)必要的低层进程管理和调度        (4)低层输入/输出服务可靠性
kkx.png
性能
xn.png
可伸缩性(scalability)避免:
    []集中式硬件[/][]集中式算法[/][]集中式的数据结构[/]
 
kssx.png
可扩展性
    []没有一台机器上存放着关于系统状态的全部信息[/][]机器只是基于本地信息做出决定[/][]一个机器出故障不会破坏算法[/][]不一定存在全局时钟。[/]

可扩展性示例:
sl.png


总结


没有固定的架构,架构都是随着时间和业务的迁徙和变动而发生改变和重构的。所以架构不是一成不变的,也不是淘宝的架构就是万能的,适应你们业务的架构演变的架构就是最优架构。万变不离其宗,但是其底层技术实现和方法是可以借鉴采用大公司场景做法。

Zookeeper Failed to process transaction type: 1 error: KeeperErrorCode = NoNode

大数据 chris 回复了问题 2 人关注 1 个回复 9257 次浏览 2016-02-25 11:19 来自相关话题

mac上coderunner 2.1.1破解过程

运维 chris 发表了文章 0 个评论 6160 次浏览 2016-02-24 23:33 来自相关话题

1、从http://www.macapp.so/coderunner/​  下载软件安装包,访问截图如下 2、断网安装①和② (②是注册器) ...查看全部
1、从http://www.macapp.so/coderunner/​  下载软件安装包,访问截图如下
coderunner.png


2、断网安装①和② (②是注册器)
coer.png

双击可以复制。
确定以后 会出来英文。。。。。。。。。valid(说key是有效的)。说明成功了 然后关闭就行了
 
3、最重要的一步编辑hosts文件!(屏蔽coderunnerapp.com的联网验证! )
编辑/etc/hosts文件添加一个coderunnerapp.com的配置,如下所示:
# sudo vim /etc/hosts
hosts.png

 
4、成功!不会再出来 输入验证码的地方了
coderun.png

破解结束,可以愉快的使用了!

zookeeper启动失败案例分析

大数据 Ansible 发表了文章 0 个评论 8094 次浏览 2016-02-24 17:54 来自相关话题

启动zookeeper运行结果如下: [root@zk1 bin]# ./zkServer.sh start JMX enabled by default Using config: /usr/local/zookeeper ...查看全部
启动zookeeper运行结果如下:
[root@zk1 bin]# ./zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
查看状态如下:
[root@zk1 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

我netstat -anltup |grep 2018,并没有监听,端口没有占用啊?
 
那只好去看日志了,查看zookeeper的zookeeper.out日志内容如下:
2016-02-24 17:35:22,425 [myid:] - ERROR [main:ZooKeeperServerMain@63] - Unexpected exception, exiting abnormally
java.net.BindException: Address already in use
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:344)
at sun.nio.ch.Net.bind(Net.java:336)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:199)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67)
at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:95)
at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:110)
at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:86)
at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:52)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:116)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
从日志中"Address already in use"可以看出端口被占用了!
但我用netstat -lntup是没被使用的,再用 lsof -i:2181,发现了2181端口果然被占用了。其实最好的办法是nc -v -z locahost 2181 探测一些本地2181端口是否监听!
[root@zk1 ~]# nc -v -z localhost 2181
Connection to localhost 2181 port [tcp/eforward] succeeded!
[root@zk1 ~]#
好了,端口被占用了,只能修改zk的默认端口,从新启动ok!

zookeeper启动异常Invalid config, exiting abnormally

大数据 空心菜 回复了问题 2 人关注 1 个回复 14747 次浏览 2016-02-24 15:45 来自相关话题

不可变基础设施的实践(Docker实践)

大数据 空心菜 发表了文章 0 个评论 3870 次浏览 2016-02-23 23:49 来自相关话题

不可变基础设施(Immutable Infrastructure)是由Chad Fowler于2013年提出的一个很有的预见性的构想 ,其核心思想为任何基础设施的实例一旦创建之后变成为只读状态,如需要修改和升级,则使用新的实例进行替换。 这种模式可以为我们减少 ...查看全部
不可变基础设施(Immutable Infrastructure)是由Chad Fowler于2013年提出的一个很有的预见性的构想 ,其核心思想为任何基础设施的实例一旦创建之后变成为只读状态,如需要修改和升级,则使用新的实例进行替换。
 
这种模式可以为我们减少配置管理的负担,并使得 DevOps 更加容易实践,基于 Packer、Terraform及Docker, 我们正在实践和完善这种构想,现在给大家分享。
当前的不可变基础设施实践的主要内容有:
    []生产与开发环境的一致性系统[/][]利用 Terraform 构建基础设施[/]

生产与开发环境的一致性系统

我们平时的开发和测试乃至部署中,最常出现的问题之一就是由于系统环境的不一致导致bug或者运行失败, 这在长时间运行的服务器进行缓慢升级时最为常见,而老旧的系统和软件则带来更多的问题和维护成本。
因此我们使用 Packer 及 Vagrant 来统一生产环境和开发环境,Packer 构建操作系统镜像,供 Vagrant 运行虚拟开发环境,这样所有的开发人员都会有一个统一并且持续更新的开发环境,更利于减少问题和协作。
Packer 构建的镜像还可用于各大虚拟化平台,如 KVM、Xen和ESXi,以及导入到 AWS 等云计算平台,我们这里使用的就是 AWS。 
构建的基础镜像会预装好大部分需要的软件如 Docker、Consul,一些常见的 Docker 容器镜像也会拉取预装好。
这样我们在部署时就会有一个和开发环境几乎没有差别的统一基础设施可用。
我已经把我们镜像的构建脚本提取开源出来 zealic/packer-boxes,构建的镜像有 CentOS 及 Debian,大家可以参考以此构建自己的镜像。

利用 Terraform 构建基础设施

上面说过我们使用 AWS 作为基础设施平台,基于不可变基础设施的理念,我们希望的是基础设施是可以快速销毁和重建的,
基于这个目的,我们使用了 Terraform 来完全托管 AWS 基础设施。
在此之前,我需要介绍一下部分架构。 
首先我们会为基础设施分组,每个基础设施组对应一整套 VPC 环境。
每组基础设施我们根据功能场景分为两种;ops-center组 及应用基础设施组,ops-center 主要承载运维基础设施,如 Mesos Master,Docker Registry,持续集成服务,VPN接入以及管理后台都运行在 ops-center。
应用基础设施组则运行主要业务的微服务、反向代理及 Marathon 节点。
而这些体现到 AWS 中,每组基础设施组都会应对一个 VPC,通过 VPC Peering Connection 连接相关的基础设施组。
基于这样的前提,我们可以对此分出多个基础设施组,比方我们有国内和新加坡的业务,则可分出如下基础设施组:
    []ops-cn[/][]prd-cn[/][]ops-sg[/][]prd-sg-master[/][]prd-sg-slave[/]
下面将介绍我们使用 Terraform 托管基础设施时的一些细节。
我们写了一套 Thor 脚本来管理多个基础设施组,每个组都是一个文件夹,文件夹中包含了对基础设施组的 Terraform 定义, 这些定义文件均被版本控制,可以进行对资源的快速回滚和改动。 
当我们需要对 AWS 基础设施做一些修改时,只需要修改定义并运行如下命令:
thor exec:terraform apply
通过管理配置文件传递变量来关联多个基础设施组的关系。 目前通过 Terraform 托管了以下内容:
    []VPC[/][]VPC Subnet[/][]Route table[/][]Security Groups[/][]Route53 records[/][]ELB[/][]S3[/][]Internet/NAT Gateways[/]
以及上面提到的 ops-center 的中提供的各种功能服务器,在定义 aws_instance 时,我们会为其分配 tag,我们的管理程序在接收到服务器准备好的事件时,通过 tag 判断该服务器的角色,为其执行对应的 Ansible Playbook,从而完成自动化部署。
有时我们可能会有未受 Terraform 的资源需要纳入其托管范围,这里我们用了terraforming ,可以将已经存在的 VPC、S3 或者 EC2 实例纳入 Terraform 的托管;当然Terraform 也承诺了将会在未来加入 import 功能以导入已有资源。
应用基础设施组则仅部署 Marathon 管理 Docker 容器集群,由其管理业务服务及其他相关内容,由于我们的业务服务均会构建为 Docker 容器进行发布,因此这里仅仅只需要管理应用服务的配置,这里我们使用了 consul 和 confd 来进行动态配置管理。
这样,我们的基础设施均以相同的模式运行和创建,均具有不可变性,系统更为简单和可靠,并具有快速回滚的能力。
通过实施这套方案,我们可以获得以下好处:
    []快速重建[/][]销毁基础设施组[/][]部署多个基础设施组来实现灾容[/][]灰度发布及快速升级。[/]

Q&A
Q:你们这套方案中遇到过哪些坑让你印象深刻,请举一两个具体实例说明?


A:使用 Packer 在国内进行构建时,因为众所周知的网络原因,经常会有失败的问题,这一点可以通过其他方式避免。此外由于 Terraform 并非完全支持所有的 AWS 资源管理,如 Cloudfront、Route53 Geo DNS,仍然需要手工管理这些,不过未来 Terraform 会加入这些的支持。


Q:每个vpc组是完全独立的提供服务?能说下这套技术应对的业务层是哪个方面的么?


A:每个 VPC 组提供的是一个完整的应用功能实现,上面也提高了我们会有 prd-sg-master,prd-sg-slave,可用于灾容。业务层提供的主要是 HTTP 服务及内部依赖的微服务。


Q:请问为什么选用Consul?很多类似方案用的etcd。


A:Consul 对于 agent 的节点的失效更友好,此外 Vagrant、Consul、Terraform 都是由 HashiCorp 公司开发的,其文档和技术栈都很全面,值得应用实践。


Q:如果我用了Kubernetes,对大数据Hadoop、Spark都没啥需求,是否还有用Mesos的必要呢?换句话说Mesos和Kubernetes结合针对纯容器平台有什么好处,使用场景是什么?


A:Kubernetes 和 Mesos 都是容器管理调度的框架,Mesos 的优势是更具可开发扩展性。


Q:请问对于PHP这种可以动态加载代码的服务,在这套系统里应该怎么应用呢?​


A:动态加载代码的代码源建议使用微服务的方式提供。


Q:Vagrant在宿主机使用的是NAT模式还是bridge ?Packer相对于vagrant package 命令,优势是哪些?Vagrant 在宿主机使用 NAT 模式,这样可以减少 DNS 出问题的几率。


A:Packer 可以从ISO镜像开始构建你的系统,相对于Vagrant更纯粹;实际上Vagrant的大多数 box 都是从Packer打包过来的。


Q:我在上期分享时,介绍过类似的Packer+Terraform工具。在使用Terraform管理AWS资源时,你提到另外的脚本管理(thor exec:terraform apply)。请问,你为何不直接运行Terraform 的命令,用thor的目的是什么,你的哪个repo了有用到thor,我可以参考一下?


A:我们在运行Terraform时需要传递很多变量以及硬编码参数,同时我们使用了AWS国内区域和 AWS 国际区域,他们是分开的,对应的 AWS Access Key 及 SecretKey 不同,Thor 脚本的目的是讲这些内容通过配置文件和环境变量的的方式传递给 Terraform,使其能获取正确的参数和定位正确的执行环境。


Q:请问持续集成采用的是Jenkins加插件的方式吗?持续集成的代码采用了什么样的分支管理策略?


A:是的,持续集成采用Jenkins及插件,我们采用的分支是 Git Flow 的变种,基于pull的模型。


Q:单纯的用于AWS的话,亚马逊自家的CloudFormation支持的基础设施应该更全面,如果不考虑跨平台的能力,还有什么理由选择Terraform吗?


A:CloudFormation 的设计并不友好,基于 JSON 的语法非常晦涩且难于维护,不像 Terraform 一样一目了然。


Q:跨主机网络是咋解决的啊?是结合了Kubernetes和Mesos、Docker功能吗?


A:我们采用的方案是 Weave,没有使用Kubernetes。


=================================================


分享阅读原文:http://dockone.io/article/1044
分享作者:曾超,Hyku架构师,负责公司的基础架构和运维架构,精通AWS技术体系,热爱Docker及开源。
Dockone.io微信群分享
DockOne每周都会组织定向的技术分享,欢迎感兴趣的同学加微信:liyingjiesz


Python单行函数lambda(小米)加reduce、map、filter(步枪)应用

编程 空心菜 发表了文章 0 个评论 4703 次浏览 2016-02-23 20:37 来自相关话题

什么是lambda?lambda定义匿名函数,并不会带来程序运行效率的提高,只会使代码更简洁。为了减少单行函数的定义而存在的。lambda的使用大量简化了代码,使代码简练清晰。但是值得注意的是,这会在一定程度上降低代码的可读性。如果不是非常熟悉Python的人 ...查看全部
什么是lambda?
lambda定义匿名函数,并不会带来程序运行效率的提高,只会使代码更简洁。为了减少单行函数的定义而存在的。
lambda的使用大量简化了代码,使代码简练清晰。但是值得注意的是,这会在一定程度上降低代码的可读性。如果不是非常熟悉Python的人也许会对此很难理解。
如果可以使用for...in...if来完成的,坚决不用lambda。
如果使用lambda,lambda内不要包含循环,如果有,宁愿定义函数来完成,使代码获得可重用性和更好的可读性。如果你对你就喜欢用lambda来做,那也无可厚非,但是有内置函数减弱了代码的可读性!
好了介绍完成了lambda,那就让我们来实际用一下,实例如下:
lambda.png

 
下面我们再来看看小米加上步枪的结合使用。
1、reduce + lambda
What is reduce?
Python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(列表,元组等)中的所有数据进行如下操作:传给reduce中的函数func() (必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
关于python reduce的详细解析,后续详细介绍,下面我们介绍一下reduce + lambda的应用案例:
reduce.png

 
2、map + lambda
What is map?
map函数应用于每一个可迭代的项,返回的是一个结果list。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
格式:map(func, seq1[, seq2...] )
Python函数式编程中的map()函数是将func作用于seq中的每一个元素,并用一个列表给出返回值。如果func为None,作用同zip()。

详细应用code如下:
imap.png


这里需要注意的是:升级到python3的时候,map函数有一个变化那就是,如果不在map前加上list,lambda函数根本就不会执行。


在python2中,map会直接返回结果:
py2.png

而再python3下面,返回的就是一个map对象:
如果要得到结果,必须用list作用于这个map对象。
 
3、filter + map
What is filter?
filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最终一次性返回过滤后的结果。
和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

简单应用如下:
filter.png

这里简单介绍一下python内置函数小米加步枪,更详细的介绍再会,打完收工!

网络管理系统详解

运维 Rock 发表了文章 0 个评论 4773 次浏览 2016-02-21 19:18 来自相关话题

网络拓扑结构类型 类型图如下: 1、星型拓扑结构 特点:通信协议简单,站点故障容易检测和隔离. ...查看全部


网络拓扑结构类型


类型图如下:
nettop.png

1、星型拓扑结构
xintop.png

特点:
通信协议简单,站点故障容易检测和隔离.连线费用大,中央结点要求高。
2、总线形拓扑结构
ztop.png

特点:
连线总长度小于星型结构,站点容易扩充和删除.总线任务重,易产生瓶颈问题。
3、环形拓扑结构
htop.png

特点:
传输速率高,传输距离远.一个站点的故障会形起整个网络的崩溃。
4、数型拓扑结构
stop.png

特点:
通信线路连接简单,网络管理软件也不复杂,维护方便;
资源共享能力差,可靠性低。


网络的基本组成


网络软件:网络软件包括网络操作系统、通信软件和网络协议等 。
 
nettalk.png

OSI模式图
OSI.png

OSI模型介绍:
    []应用层:该层是开放系统的最高层,直接为最终用户服务。主机上的用户都在应用层上。用户只需关心正在交换的信息,不必知道信息传输的技术,因此,应用层的功能只是处理双方交换来往的信息。 [/][]表示层:表示层如同应用程序和网络之间的翻译,在表示层,数据将按照网络能理解的方案进行格式转化,这种格式转化的结果也因所使用网络的类型不同而不同。表示层管理数据的解密与加密,如系统口令的处理。 [/][]会话层:会话层的功能包括:建立通信链接,保持会话过程通信链接的畅通,同步两个节点之间的对话,决定通信是否被中断以及通信中断时决定从何处重新发送。 [/][] [/][]传输层:传输层主要负责确保数据可靠、顺序、无错地传输。如果没有传输层,数据将不能被接收方验证或解释,所以,传输层常被认为是OSI模型中最重要的一层。 [/][]网络层:即OSI模型的第三层,其主要功能是将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方。[/][]数据链路层:数据链路层是OSI模型的第二层,其控制网络层与物理层之间的通信。它的主要功能是将网络层接收到的数据分割成特定的可被物理层传输的帧。[/][]物理层:物理层负责线路的连接,并把需要传送的信息转变为可以在实际线路上运送的物理信号,如电脉冲。信号电平的高低、插头插座的规格、调制解调器都属于这一层。 [/]
 网络协议:
    []协议是通信双方所共同遵循的规则。协议实际上是一组指挥行为的规则或准则。就像打电话过程必须要服从一个通话的规则,如果不懂这个规则,双方就无法通话。[/][]网络中的两台计算机之间交换信息也有一些规则和约定,这就是网络协议,为保证能够正确传送数据,发送和接收数据的计算机都必须遵守协议,以确保发送和接收的数据有序准确。每个网络至少有一种协议。网络中的计算机将遵循网络设计者所选择的协议进行通信。[/]
网络协议是为网络数据交换而制定的的规则、约定与标准。   下面我们通过实例,介绍对等层通信示例:邮递过程
yd.png
问题:[list=1][]收信人与发信人之间、邮政局之间,他们是在直接通信吗?[/][]邮政局、运输系统各向谁提供什么样的服务?[/][]邮政局、收发信人各使用谁提供的什么服务?[/]分析前面通信的例子,我们会发现:
    []模型具有三个层次 [/][]相同层次的交流都是独立进行的,不受其他层次影响[/][]上下相邻两个层次之间的联系可以用“提供服务”和“使用服务”来进行说明 [/]
 网络协议的选择
    []网络规模较小,只是为了文件传输和设备共享,这时最好选择占用内存较小和带宽利用率高的协议——NETBEUI协议。[/][]若使用Netware网络操作系统,在局域网中联机游戏,那么IPX/SPX协议是不错的选择。[/][]若要规划一个高效率、可互连性和扩展性强的网络,并与Internet实现连接,那么TCP/IP是理想之选。[/]
  分层体系结构
为了解决不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作的问题,采用分层的方法,将网络互联的庞大而复杂的问题,划分为若干个较小而容易解决的问题。对等层之间执行相同的操作,较低层向上一层提供服务。
fctx.png
 OSI层次模型
为了解决不同的网络之间进行通信的问题,国际标准化组织(ISO)提出了一种网络模型,即开放系统互连参考模型,简称OSI层次模型。
OSI: Open System Interconnection
csjz.png
fc.png
 TCP/IP协议
    []TCP(Transmission Control Protocol)传输控制协议用于保证被传送信息的完整性。[/][]IP(Internet Protocol)网际互连协议负责将消息从一个地方传送到另一个地方。[/]
tcpip.png
TCP/IP资料: http://www.internic.net
    []TCP/IP起源于美国国防部高级研究规划署(DARPA)的一项研究计划——实现若干台主机之间的相互通信。[/][]现在TCP/IP已成为Internet上通信的标准。[/][]TCP/IP模型包括4个概念层次:[/]
                              应用层(application)                              传输层(transport)                              网际层(internet)                              网络接口(network interface)
    []TCP/IP协议叫做传输控制协议/网际协议,是互联网信息交换、规则、规范的集合体。 [/][]虽然从名字上看 TCP/IP包括两个协议:传输控制协议(TCP)和网际协议(IP),实际上它是一组协议,它包括上百个各种功能的协议,如远程登录、文件传输和电子邮件等等,而 TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。[/][]TCP/IP是通用标准,OSI是国际标准。[/]
 TCP/IP 模型与 OSI 参考模型对比
db.png
    []TCP是面向连接的协议,它负责保证数据按次序、安全、无重复地传递。提供高可靠性服务,用于一次传输要交换大量报文的情形。[/][]UDP提供了是高效率服务。用于一次传输交换少量报文,如即时通信中的QQ、ICQ,传输的可靠性由应用程序提供保障。[/][]端口是TCP和UDP与应用程序打交道的访问点。如80端口是万维网常用的,21与20是FTP常用的,23是Telnet服务的端口。[/][]IP协议是一个不可靠的无连接协议,它提供将一个数据报从一台计算机或设备传送于另一台计算机或设备的方法以及网络寻址的方法。[/]
 网络地址
IP地址是IP协议提供的一种地址格式,它为Internet上的每一个网络和每一台主机分配一个网络地址,以此来屏蔽物理地址的差异。是运行TCP/IP协议的唯一标识。
ip.png
 IP地址类型
ip_type.png
 DNS域名系统DNS采用分层次结构,入网的每台主机都可以有一个类似下面的域名:
dns.png
从左到右,域的范围变大。具有实际含义,比IP地址好记。Internet上几乎在每一子域都设有域名服务器,服务器中包含有该子域的全体域名和地址信息。Internet每台主机上都有地址转换请求程序,负责域名与IP地址转换。 VLAN概诉
vlan.png
 VLAN特点
vlana.png
    []VLAN之间互相隔离,就好象用户连接到不同的交换机一样。[/]
vlanab.png
    []VLAN之间互相隔离,就好象用户连接到不同的交换机一样;[/][]VLAN可以跨越多个交换机。[/]
vlanba.png
    []VLAN之间互相隔离,就好象用户连接到不同的交换机一样;[/][]VLAN可以跨越多个交换机;[/][]TRUNK(干道)传送多个VLAN的数据,它们使用“封装”标记不同VLAN的数据[/]
  VLAN指定:动态与静态
vlandj.png
 VPN (Virtual Private Network)
vpn.png
 VPN类型PPTP (Point-to-point Tunneling Protocol)         用户到NAS之间的连接保密         口令机制CHAPL2TP (Layer2 Tunneling Protocol)         第二层安全,IPSEC (Internet Protocol Security)        最完善的安全机智 VPN与专用网相比的优势
    []租线路便宜[/][]无须专用接入设备[/][]移动时节约长途电话开销[/][]大规模造成的复杂问题不存在[/][]管理更容易[/][]扩展方便[/]
 VPN与专用网相比的优势的缺点
    []设备成本,如果需要高性能的话[/][]技术门槛,维护和管理开销[/][]法律问题[/][]性能问题,服务质量[/]

 
 
 
CDN理解
         CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
cdncache.png


CDN工作原理(以DNS重定向为例)
dnswork.png


CDN关键技术
cdnskill.png

 
CDN热门应用-视频分发
cdnviedio.png

 
CDN整体网络架构
cdnarch.png


总结


网络管理知识点就给大家介绍这么多了,希望大家有收获。更多知识需要大家去深入了解、发掘。新时代、互联网创客时代/技术变革的时代,我们IT技术圈也有很多新芽的技术等待你去探索和发掘!