几个手机号码归属地查询api接口
淘宝网
API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443参数:
- []tel:手机号码[/][]返回:JSON[/]
拍拍
API地址: http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=15850781443&amount=10000&callname=getPhoneNumInfoExtCallback参数:
- []mobile:手机号码[/][]callname:回调函数[/][]amount:未知(必须)[/][]返回:JSON[/]
财付通
API地址: http://life.tenpay.com/cgi-bin/mobile/MobileQueryAttribution.cgi?chgmobile=15850781443参数:
- []chgmobile:手机号码[/][]返回:xml[/]
百付宝
API地址: https://www.baifubao.com/callback?cmd=1059&callback=phone&phone=15850781443参数:
- []phone:手机号码[/][]callback:回调函数[/][]cmd:未知(必须)[/][]返回:JSON[/]
115
API地址: http://cz.115.com/?ct=index&ac=get_mobile_local&callback=jsonp1333962541001&mobile=15850781443参数:
- []mobile:手机号码[/][]callback:回调函数[/][]返回:JSON[/]
有道
API地址:http://www.youdao.com/smartresult-xml/search.s?type=mobile&q=13892101112参数:
- []type : 参数手机归属地固定为mobile[/][]q : 手机号码[/]
返回XML格式:
或者
13892101112
陕西 延安
http://www.youdao.com/smartresult-xml/search.s?jsFlag=true&type=mobile&q=手机号码返回JSON格式:
fYodaoCallBack(1, {‘product’:'mobile’,'phonenum’:’13892101112′,’location’:'陕西 延安’} , ”);
096.me
API接口:http://www.096.me/api.php?phone=手机号&mode={txt,xml}
举例:http://www.096.me/api.php?phone=13892101111&mode=txt返回
13892101111||陕西延安移动全球通卡 ||吉凶参半,惟赖勇气,贯彻力行,始可成功 吉带凶||
举例:http://www.096.me/api.php?phone=13892101111&mode=xml返回
13892101111 陕西延安移动全球通卡 吉凶参半,惟赖勇气,贯彻力行,始可成功 吉带凶收起阅读 »
浅谈开源工具自动化运维阶段
前言
随着各种业务对IT的依赖性渐重以及云计算技术的普及,企业平均的IT基础架构规模正不断扩张。
有些Web 2.0企业可能会需要在两个星期内增加上千台服务器,因此对运维而言,通过手动来一个一个搭建的方法不仅麻烦、效率低下,而且非常不利于维护和扩展。
即使是在传统的企业当中,日常的备份、服务器状态监控和日志,通过手动的方式来进行的效率也很低,是一种人力的浪费。因此,自动化早已是每个运维都必须掌握的看家本领。
在不同的企业中,自动化的规模、需求与实现方式都各不相同,因此在技术细节层面,运维之间很难将别的企业的方法整个套用过来。然而在很多情况下,自动化的思路是有共通之处的。
运维自动化前三阶段
- []纯手工阶段:手工操作重复地进行软件部署和运维;[/][]脚本阶段:通过编写脚本、方便地进行软件部署和运维;[/][]工具阶段:借助第三方工具高效、方便地进行软件部署和运维。[/]
这几个阶段是随着运维知识、经验、教训不断积累而不断演进的。而且,第2个阶段和第3个阶段可以说是齐头并进,Linux下的第三方工具虽说已经不少了,但是Linux下的脚本编写对运维工作的促进作用是绝对不可以忽视的。在DevOps出现之前,运维工作者在工作中还是以这两种方式为主。
1、预备类工具:KickstartLinux下好用的开源工具
kickstart安装是redhat开创的按照你设计好的方式全自动安装系统的方式。安装方式可以分为光盘、硬盘、和网络。Cobbler
Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows。该工具使用python开发,小巧轻便(才15k行代码),使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP,DNS,以及yum包镜像。OpenQRM
openQRM提供开放的插件管理架构,你可用很轻松的将现有的数据中心应用程序集成到其中,比如Nagios和VMware。openQRM的自动化数据中心操作不但可用帮助你提高可用性,同时还可以降低您企业级数据中心的管理费用。针对数据中心管理的开源平台,针对设备的部署、监控等多个方面通过可插拔式架构实现自动化的目的,尤其面向云计算/基于虚拟化的业务。Spacewalk
Spacewalk可管理Fedora、红帽、CentOS、SUSE与Debian Linux服务器。当你的数据中心拥有多台Linux服务器时,手动管理将不再是一个好的选择。Spacewalk就可以管理补丁、登录、更新。
[b]在自动化运维和大数据云计算时代实现预设自动化安装服务器环境、应用环境等不仅可以提高运维效率,而且还能大大减少运维的工作任务及出错概率。尤其是对于在服务器数量按几百台、几千台增加的公司而言,单单是装系统,如果不通过自动化来完成,其工作量和周期不可想象。[/b]2、配置管理类工具:前浪:Chef
Chef是一个系统集成框架,可以用Ruby等代码完成服务器的管理配置并编写自己的库。ControlTier
ControlTier是一个完全开放源码系统的自动化服务管理活动的多个服务器和多个应用层(代码,数据,配置和内容) 。共同使用的ControlTier包括部署应用程序,控制它们的状态,并运行按需行政工作在多个服务器上。ControlTier是跨平台和工程同样的物理服务器,虚拟机,或云计算基础设施。Func
Func是由红帽子公司以Fedora统一网络控制器Func,目的是为了解决这一系列统一管理监控问题而设计开发的系统管理基础框架,它是一个能有效的简化我们众多服务器系统管理工作的工具,其具备容易学习,容易使用,更容易扩展;功能强大而且配置简单等优点。Puppet
puppet是一个开源的软件自动化配置和部署工具,它使用简单且功能强大,正得到了越来越多地关注,现在很多大型IT公司均在使用puppet对集群中的软件进行管理和部署。后浪SaltStack
Salt一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。Ansible
Ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。
[b]在进行大规模部署时,手工配置服务器环境是不现实的,这时必须借助于自动化部署工具。[/b]3、监控类工具Nagios
Nagios是一款免费的开源IT基础设施监控系统,其功能强大,灵活性强,能有效监控 Windows 、Linux、VMware 和 Unix 主机状态,交换机、路由器等网络设置等。一旦主机或服务状态出现异常时,会发出邮件或短信报警第一时间通知 IT 运营人员,在状态恢复后发出正常的邮件或短信通知。OpenNMS
OpenNMS是一个网络管理应用平台,可以自动识别网络服务,事件管理与警报,性能测量等任务。Cacti
Cacti是一套基于PHP、MySQL、SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来获取数据,使用 RRDtool绘画图形,它的界面非常漂亮,能让你根本无需明白rrdtool的参数能轻易的绘出漂亮的图形。而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结 构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,让你添加自己的snmp_query和script!功能非常强大完善,界面友好。Zenoss Core
一个基于Zope应用服务器的应用/服务器/网络管理平台,提供了Web管理界面,可监控可用性、配置、性能和各种事件。Zabbix
zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。用于监控网络上的服务器/服务以及其他网络设备状态的网络管理系统,后台基于C,前台由PHP编写,可与多种数据库搭配使用。提供各种实时报警机制。Ganglia
Ganglia是一个针对高性能分布式系统(例如,集群、网格、云计算等)所设计的可扩展监控系统。该系统基于一个分层的体系结构,并能够支持2000个节点的集群。它允许用户能够远程监控系统的实时或历史统计数据,包括:CPU负载均衡、网络利用率等。Ganglia依赖于一个基于组播的监听/发布协议来监控集群的状态。Ganglia系统的实现综合了多种技术,包括:XML(数据描述)、XDR(紧凑便携式数据传输)、RRDtool(数据存储和可视化)等。
[b]数据监控和业务监控非常关键,及时发现问题,及时解决问题,监控系统主要包括:服务应用监控、主机监控、网络设备监控、网络连通性监控、网络访问质量监控、分布式系统监控、报警预设、监控图形化与历史数据等。[/b]
自动化对运维的意义
自动化就是运维为了减少重复枯燥的工作而建立的流程方法,而除此之外,自动化还能够带来减少人为错误、及时报警与故障恢复、提高业务可用性等好处。
运维工作自动化确实包含上述2个方面,归纳总结来其实就是:把零碎的工作集中化,把复杂的工作简单有序化,把流程规范化,最大化地解放生产力,也就是解放运维人员。自动化的技能/意识对于运维工作至关重要。运维工作不是简单的使用工具,这里面还有很多技巧和意识。具体的技巧/意识包括:[list=1][]如何驾驭这些琳琅满目的工具为己所用;[/][]如何根据不同的应用环境来选用不同的工具;[/][]如何根据应用来组合使用工具等等等等。[/]
一定要记住一点:工具只是利用帮助人进行运维的,这中间还需要人的干预和决策,工具不能完全代替全部运维工作。还需要结合实际业务逻辑和业务场景,就像架构一样,并不是淘宝、百度等大公司的架构,一定适合任何公司和业务。
自动化运维范畴
- []安装自动化[/][]部署自动化[/][]监控自动化[/][]发布自动化[/][]升级自动化[/][]安全管控自动化[/][]优化自动化[/][]数据备份自动化[/]
前阶段在自动化管理和安全方面的技术实现,比如说HP和IBM出品的一些ITIL和ITSM产品等,比如HP Openview,IBM Tivoli等等。这些工具都有Linux的版本,与其他同类工具相比的优势应该在于他们的商业应用成熟度,都是老品牌。现阶段有自动化的一些工具git、svn、Jenkins等等,一些开源的软件!
工具选择
针对不同规模的架构,一个小规模的网站,到百万量级、千万量级的网站,我们选择的工具就有不同。
在选择上对于百万量级、千万量级的网站,我们应该考虑选择成熟的工具、性能高的工具、熟悉的工具。而对于小规模的网站,我们应该考虑选择一些开源的、免费的工具。
这个原则就是以应用为导向,百万量级、千万量级的网站牵涉的面广、要求高,不成熟的工具往往很难说服领导和公司使用,所以主要是在成熟度方面。
自动化运维规划
自动化的实现不是单纯学习几个工具就能够做好的,甚至于规划不好的情况,自动化不仅没有节省人力,反而带来了更多的问题。所以运维人员在考虑自动化流程的过程中应该考虑如下几点原则:[list=1][]根据应用选择工具;[/][]对于关键应用,选择成熟度高的工具;[/][]不能过分依赖一种工具,需要进行对比和分析;[/][]对工具的特性做到精通;[/][]是人驾驭工具,人要监督工具,而不是工具来驾驭人;[/][]善于利用脚本实现定制化场景。[/]
[list=1][]经常逛逛一些不错的IT媒体网站和看看这方面的文章,可以多多涉猎和学习;[/][]针对公司业务场景,选择一些自动化工具,登陆到官网学习和熟悉工作原理;[/][]经常参加一些线下自动化运维的活动和媒体活动,多和一些自动化方面的大拿和资深人士交流。[/]自动化经验积累
收起阅读 »
新晋系统分析利器Sysdig
定位服务器问题时, 我们需要各式各样的武器, 诸如 iftop, ifstat, netstat, tcpdump, iostat。dstat 等, 因此工具箱需要装满很多工具, 在面对问题的时候才能显得不费吹灰之力, 迅速定位问题并解决, 保障服务稳定运行。Sysdig 的横空出世, 对我们而言, 就是一把瑞士军刀, 灵活小巧, 武艺多端.
sysdig 有很多 chisel, chisel 意为 铲子, 可以理解为定位某类问题的工具, sysdig 采用 Lua 编写的。
安装
curl -s https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public | apt-key add -
curl -s -o /etc/apt/sources.list.d/draios.list http://download.draios.com/stable/deb/draios.list
apt-get update
apt-get -y install sysdig
常用操作
sysdig 有很多 chisel, chisel 意为 铲子, 可以理解为定位某类问题的工具, sysdig 采用 Lua 编写的。
- []查看 chisel 列表[/]
sysdig -cl
- []查看具体某个 chisel 的提示[/]
sysdig -i spy_logs
- []使用某个 chisel[/]
sysdig -c spy_logs
- []过滤器可以帮助我们从各种输出信息中, 筛选出我们需要的, 比如 [i]proc.name=foo , 如果你记住不了太多过滤器也无妨, 我们可以借助如下命令查看过滤器[/[/i]]
sysdig -l
- []记录定位信息到文本, 以及从文本读取信息[/]
sysdig -w tracefile.capsysdig -r tracefile.dump proc.name=sshd
实战
- []服务器上经常需要查看哪个服务带宽占用使用较高, 特别是被 DDOS 的时候。[/]
sudo sysdig -c topprocs_net
- []查看某个IP的通讯数据,并以ASCII 码输出[/]
sudo sysdig -s2000 -A -c echo_fds fd.cip=127.0.0.1
- []查看非请求 redis-server 的其他请求进程和句柄[/]
sudo sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=redis-server"
- []查看访问该服务器的所有 GET 请求数据[/]
sudo sysdig -s 2000 -A -c echo_fds fd.port=80 and evt.buffer contains GET
- []查看访问该服务器的 SQL 语句[/]
sudo sysdig -s 2000 -A -c echo_fds evt.buffer contains SELECT
- []查看磁盘读写最高的进程[/]
sysdig -c topprocs_file
- []查看延迟最大的系统调用[/]
sysdig -c topscalls_time
- []查看具体文件的操作细节[/]
sysdig -A -c echo_fds "fd.filename=syslog"
- []查看 IO 延迟大于 1ms 的文件[/]
sudo sysdig -c fileslower 1
- []监视某个文件是否被操作, 从安全出发想象空间很大哦[/]
sudo sysdig evt.type=open and fd.name contains /etc更多方法,详情查阅sysdig官网 收起阅读 »
负载均衡LVS原理和应用详解
一、LB常用解决方案
1. 硬件负载均衡解决方案:
- []F5公司: BIG-IP[/][]Citrix公司: Netscaler[/][]A10公司: A10[/][]Array [/][]Redware[/]
1) CIP: Client ip
2) VIP: virtual ip
3) DIP: Director IP
4) RIP: Real server Ip
客户端请求,被VIP端口接收后,从DIP接口被转发出去,并转发至RIP
二、LVS类型
1. NAT(dNAT)
访问过程如下:
1) CIP访问VIP
2) VIP接收报文后,做dNAT,指向某一个RIP
3) RIP拿到接收到报文后进行回应
4) 此时需要,RIP网关指向DIP,也就是Director server. 否则若在互联网上,即便报文是可以回应给CIP客户端,但是由于CIP并没有请求RIP服务器,因此报文会被丢弃。
NAT特性:
1) RS应该使用私有地址
2) RS的网关必须指向DIP
3) RIP 和 DIP 必须在一同意网段内
4) 进出的报文,无论请求还是响应,都必须经过Director Server, 请求报文由DS完成目标地址转换,响应报文由DS完成源地址转换
5) 在高负载应用场景中,DS很可能成为系统性能瓶颈。
6) 支持端口映射。
7) 内部RS可以使用任意支持集群服务的任意操作系统。
2. DR
1)让前端路由将请求发往VIP时,只能是Dirctor上的VIP
禁止RS响应对VIP的ARP广播请求:
(1) 在前端路由上实现静态MAC地址VIP的绑定;
前提:得有路由器的配置权限;
缺点:Directory故障转时,无法更新此绑定;
(2) arptables
前提:在各RS在安装arptables程序,并编写arptables规则
缺点:依赖于独特功能的应用程序
(3) 修改Linux内核参数
前提:RS必须是Linux;
缺点:适用性差;
Linux的工作特性:IP地址是属于主机,而非某特定网卡;也就是说,主机上所有的网卡都会向外通告,需要先配置参数,然后配置IP,因为只要IP地址配置完成则开始想外通告mac地址为了使响应报文由配置有VIP的lo包装,使源地址为VIP,需要配置路由经过lo网卡的别名,最终由eth0发出
两个参数的取值含义:
arp_announce:定义通告模式
0: default, 只要主机接入网络,则自动通告所有为网卡mac地址
1: 尽力不通告非直接连入网络的网卡mac地址
2: 只通告直接进入网络的网卡mac地址
arp_ignore:定义收到arp请求的时响应模式
0: 只有arp 广播请求,马上响应,并且响应所有本机网卡的mac地址
1: 只响应,接受arp广播请求的网卡接口mac地址
2: 只响应,接受arp广播请求的网卡接口mac地址,并且需要请求广播与接口地址属于同一网段
3: 主机范围(Scope host)内生效的接口,不予响应,只响应全局生效与外网能通信的网卡接口
4-7: 保留位
8: 不响应一切arp广播请求
配置方法:
全部网卡
arp_ignore 1
arp_announce 2
同时再分别配置每个网卡,eth0和lo
arp_ignore 1
arp_annource 2
2) 特性
(1)RS是可以使用公网地址,此时可以直接通过互联网连入,配置,监控RS服务器
(2)RS的网不能指向DIP
(3)RS跟DS要在同一物理网络内,最好在一同一网段内
(4)请求报文经过Director但是相应报文不经过Director
(5)不支持端口映射
(6)RS可以使用,大多数的操作系统,至少要可以隐藏VIP
3. LVS TUN: IP隧道,IP报文中套IP报文
1)RIP,DIP,VIP都必须是公网地址
2)RS网关不会指向DIP
3)请求报文经过Director,但相应报文一定不经过Director
4)不支持端口映射
5)RS的OS必须得支持隧道功能
4. FULLNAT: 必须内核打补丁才能使用,使得各RS主机可以跨vlan. 源IP和目标IP都修改。
三、LVS调度算法
1. 静态方法:仅根据算法本身进行调度
rr: Round Robin
wrr: Weighted RR
sh: source hashing,源地址进行hash,然后分配到特定的服务器
dh: destination hashing
用于多前端防火墙的场景中,使得访问从一个防火墙进同时还从这个防火墙出来。
2. 动态方法:根据算法及RS当前的负载状况
lc: Least Connection
Overhead=Active*256+Inactive
结果中,最小者胜出;
wlc: Weighted LC
Overhead=(Active*256+Inactive)/weight
sed: Shortest Expect Delay
Overhead=(Active+1)*256/weight
nq: Nerver Queue,在Sed基础上,开局时候先轮寻一圈。
lblc: Locality-based Least Connection (基于本地的最小连接) dh+lc
lblcr: Replicated and Locality-based Least Connection 后端服务器是缓存服务器时, 可以绑定连接到某一缓存服务器中。
3. LVS缺陷:
不能检测后端服务器的健康状况,总是发送连接到后端。
Session持久机制:
1、session绑定:始终将同一个请求者的连接定向至同一个RS(第一次请求时仍由调度方法选择);没有容错能力,有损均衡效果;
2、session复制:在RS之间同步session,因此,每个RS持集群中所有的session;对于大规模集群环境不适用;
3、session服务器:利用单独部署的服务器来统一管理session;
四、ipvsadm使用方法
1.相关命令
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]2. 集群服务相关
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
-A: 添加一个集群服务3. RS相关
-t: tcp
-u: udp
-f: firewall mark,
通常用于将两个或以上的服务绑定为一个服务进行处理时使用
例如httpd和https
iptables mongo表一起使用
service-address:
-t IP:port
-u ip:port
-f firewall_mark
-s 调度方法,默认为wlc
-p timeout: persistent connection, 持久连接
-E 修改定义过的集群服务
-D -t|u|f service-address:删除指定的集群服务
-a:向指定的Cluster services中添加RS4. 清空所有的集群服务:
-t|-u|-f service-address:指明将RS添加至哪个Cluster Service中
-r: 指定RS,可包含{IP[:port]},只有支持端口映射的LVS类型才允许此处使用跟集群服务中不同的端口
LVS类型:
-g: Gateway模式,就是DR模型(默认)
-i: ipip模式,TUN模型
-m: masquerade地址伪装自动完成后半段的原地址转换,NAT
指定RS权重:
-w # 省略权重为1
-e: 修改指定的RS属性
-d -t|u|f service-address -r server-address:从指定的集群服务中删除某RS
-C5. 保存规则:(使用输出重定向)
ipvsadm-save6. 载入指定的规则:(使用输入重定向)
ipvsadm -S
ipvsadm-restore7. 查看ipvs规则等
ipvsadm -R
-L [options]
-n: 数字格式显示IP地址
-c: 显示连接数相关信息
--stats: 显示统计数据
--rate: 速率
--exact:显示统计数据的精确值
--timeout: 超时时间
-Z: 计数器清零
五、LVS NAT模型的实现
[list=1]
[*]集群环境: 一台Director, 两台后端Real Server RS1,RS2
Director: 两网卡 [/*]
[/list] eth0: 192.168.98.133/24
eth1: 172.25.136.10/24
eth0:1: 192.168.98.128/24 作为VIP地址
RS1:
eth0: 172.25.136.11
RS2:
eth0: 172.25.136.12;
Director的eth1和RS1,RS2的eth0在模拟在同一物理网络内,使用VMnet22. 为RS添加网关指向Director
物理机windows 7 作为客户端,在192.168.98.0网络内
RS1:3. 修改内核参数,开启转发功能
# ifconfig eth0 172.25.136.11/24
# route add default gw 172.25.136.10
RS2:
# ifconfig eth0 172.25.136.12/24
# route add default gw 172.25.136.10
添加完路由条目后,应该可以ping通Director 192.168.98.0网段的两个地址。
# echo 1 > /proc/sys/net/ipv4/ip_forward4. 在RS1和RS2上面创建测试页,并在Director验证服务
RS1上5. 在Director添加集群服务
# echo 'web from RS1' > /var/www/html/index.html
# service httpd start
RS2上
# echo 'web from RS2' > /var/www/html/index.html
# service httpd start
Director上验证
# curl 172.25.136.11
web from RS1
# curl 172.25.136.12
web from RS2
# ipvsadm -A -t 192.168.98.128:80 -s wlc6. 通过物理机浏览器访问192.168.98.128, 正常情况,就可以看到轮寻的两个RS的主页了。
# ipvsadm -a -t 192.168.98.128:80 -r 172.25.136.11:80 -m -w 1
# ipvsadm -a -t 192.168.98.128:80 -r 172.25.136.12:80 -m -w 3
访问几次后,查看统计数据如下,大概接入报文比例3:1, 说明wlc生效了
# ipvsadm -L --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.98.128:http 45 227 227 32215 19245
-> 136-11.priv25.nus.edu.sg:htt 12 62 62 8571 6055
-> 136-12.priv25.nus.edu.sg:htt 33 165 165 23644 13190
六、LVS DR模型,当DIP,VIP,RIP都为公网地址时(实验环境中,把这三个地址全部放在同一物理网络中)
[list=1]
[*]地址规划:
Director: [/*]2. 配置地址
[/list] eth0: 192.168.98.133 作为ssh通信地址
eth0:1: 192.168.98.128 作为VIP, 可以进行浮动
RS1:
eth0: 192.168.98.129/24 作为RIP1
lo:1 : 192.168.98.128 作为隐藏的VIP
RS1:
eth0: 192.168.98.130 作为RIP2
lo:2: 192.168.98.128 作为隐藏VIP
Director:3. 修改RS1,RS3的内核参数,关闭lo的arp通告和lo的arp响应,并配置隐藏地址
# ifconfig eth0 192.168.98.133/24 up
# ifconfig eth0:1 192.168.98.128/24 up
RS1
# ifconfig eth0 192.168.98.129/24 up
RS2
# ifconfig eth0 192.168.98.130/25 up
RS1:4. 为RS1和RS2添加路由条目,保证其发出报文经过eth0之前,还要先经过lo:1 VIP, 使得源地址成为VIP
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
设置RS1的隐藏VIP地址, 并禁止其向外发广播
# ifconfig lo:1 192.168.98.128 netmask 255.255.255.255 broadcast 192.168.98.128
RS2:
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
设置RS2的隐藏VIP地址,并禁止其向外发广播
# ifconfig lo:1 192.168.98.128 netmask 255.255.255.255 broadcast 192.168.98.128
RS1:5. 此时在Director上面添加,集群服务
# route add 192.168.98.128 dev lo:1
RS2:
# route add 192.168.98.128 dev lo:1
# ipvsadm -A -t 192.168.98.128:80 -s wlc
# ipvsadm -a -t 192.168.98.128:80 -r 192.168.98.129:80 -g -w 1
# ipvsadm -a -t 192.168.98.128:80 -r 192.168.98.130:80 -g -w 3
七、LVS持久连接
[list=1]
[*]PCC:将来自于同一个客户端发往VIP的所有请求统统定向至同一个RS
可以通过修改轮寻算法为sh算法实现[/*]2. PPC:将来自于一个客户端发往某VIP的某端口的所有请求统统定向至同一个RS;
[/list] # ipvsadm -E -t 192.168.98.128:80 -s sh
[root@www ~]# curl 192.168.98.128
eb from RS2
[root@www ~]# curl 192.168.98.128
web from RS2
[root@www ~]# curl 192.168.98.128
web from RS2
[root@www ~]# curl 192.168.98.128
web from RS2
[root@www ~]# curl 192.168.98.128
web from RS2
[root@www ~]# curl 192.168.98.128
web from RS2
[list=1]
[*]PFMC: 端口绑定,port affinity, 基于防火墙标记,将两个或以上的端口绑定为同一个服务
防火墙打标记[/*]转载阅读,原文地址:负载均衡LVS原理及其应用 收起阅读 »
[/list] # iptables -t mangle -A PREROUTING -d VIP -p tcp --dport CS_Port -j MARK --set-mark # (0-99)
定义集群服务:
# ipvsadm -A -f #(防火墙打的标记)
利用Python进行Elasticsearch数据索引
Elasticsearch是一个分布式、Restful的搜索及分析服务器,和Apache Solr一样,它也是基于Lucence的索引服务器,而Elasticsearch对比Solr的优点在于:
- []轻量级:安装启动方便,下载文件之后一条命令就可以启动;[/][]Schema free:可以向服务器提交任意结构的JSON对象,Solr中使用schema.xml指定了索引结构;[/][]多索引文件支持:使用不同的index参数就能创建另一个索引文件,Solr中需要另行配置;[/][]分布式:Solr Cloud的配置比较复杂。[/]
启动Elasticsearch,访问端口在9200,通过浏览器可以查看到返回的JSON数据,Elasticsearch提交和返回的数据格式都是JSON.环境配置
>> bin/elasticsearch -f安装官方提供的Python API
>> pip install elasticsearch
对于单条索引,可以调用create或index方法。索引操作
from datetime import datetimefrom elasticsearch import Elasticsearches = Elasticsearch() #create a localhost server connection, or Elasticsearch("ip")es.create(index="test-index", doc_type="test-type", id=1, body={"any":"data", "timestamp": datetime.now()})Elasticsearch批量索引的命令是bulk,利用Python API提交
from datetime import datetimefrom elasticsearch import Elasticsearchfrom elasticsearch import helperses = Elasticsearch("10.18.13.3")j = 0count = int(df[0].count())actions = while (j < count): action = { "_index": "tickets-index", "_type": "tickets", "_id": j + 1, "_source": { "crawaldate":df[0][j], "flight":df[1][j], "price":float(df[2][j]), "discount":float(df[3][j]), "date":df[4][j], "takeoff":df[5][j], "land":df[6][j], "source":df[7][j], "timestamp": datetime.now()} } actions.append(action) j += 1 if (len(actions) == 500000): helpers.bulk(es, actions) del actions[0:len(actions)]if (len(actions) > 0): helpers.bulk(es, actions) del actions[0:len(actions)]实践过程中发现Python API序列化JSON时对数据类型支撑比较有限,原始数据使用的NumPy.Int32必须转换为int才能索引。此外,现在的bulk操作默认是每次提交500条数据,我修改为5000甚至50000进行测试,会有索引不成功的情况。
#helpers.py source codedef streaming_bulk(client, actions, chunk_size=500, raise_on_error=False, expand_action_callback=expand_action, **kwargs): actions = map(expand_action_callback, actions) # if raise on error is set, we need to collect errors per chunk before raising them errors = while True: chunk = islice(actions, chunk_size) bulk_actions = for action, data in chunk: bulk_actions.append(action) if data is not None: bulk_actions.append(data) if not bulk_actions: returndef bulk(client, actions, stats_only=False, **kwargs): success, failed = 0, 0 # list of errors to be collected is not stats_only errors = for ok, item in streaming_bulk(client, actions, **kwargs): # go through request-reponse pairs and detect failures if not ok: if not stats_only: errors.append(item) failed += 1 else: success += 1 return success, failed if stats_only else errors对于索引的批量删除和更新操作,对应的文档格式如下,更新文档中的doc节点是必须的。
{ '_op_type': 'delete', '_index': 'index-name', '_type': 'document', '_id': 42,}{ '_op_type': 'update', '_index': 'index-name', '_type': 'document', '_id': 42, 'doc': {'question': 'The life, universe and everything.'}}
常见错误
- []SerializationError:JSON数据序列化出错,通常是因为不支持某个节点值的数据类型[/][]RequestError:提交数据格式不正确[/][]ConflictError:索引ID冲突[/][]TransportError:连接无法建立[/]
性能
上面是使用MongoDB和Elasticsearch存储相同数据的对比,虽然服务器和操作方式都不完全相同,但还是可以看出批量写入数据,单纯的数据库还是比索引服务器更具备优势。
Elasticsearch的索引文件是自动分块,达到千万级数据对写入速度也没有影响。但在达到磁盘空间上限时,Elasticsearch出现了文件合并错误,并且大量丢失数据(共丢了100多万条),停止客户端写入后,服务器也无法自动恢复,必须手动停止。在生产环境中这点比较致命,尤其是使用非Java客户端,似乎无法在客户端获取到服务端的Java异常,这使得程序员必须很小心地处理服务端的返回信息。收起阅读 »
连竞争对手的新闻稿都照抄的公司你听说过吗?
闲来无事,看看创业抄袭体
在中国做产品,有的人抄源码,有的人抄UI,有的人抄功能,现在竟然还有人连竞争对手的新闻稿都要抄袭!而这么没品的事情,竟然是一家号称要做中国的Oracle的公司干出来的,待我细说端详。
事情的起因是酱紫的,我在一家电子商务公司负责移动端,因为产品接了很多第三方API,如友盟的统计,微信的登陆,百度的定位,还有支付宝和银联的支付,所以一直在用监控宝API监控功能。前段时间监控宝对这个功能进行产品升级,所以特别关注了一下这块内容。云智慧官方微信文章
恰好AWS宣布要正式进军国内,在看新闻的时候发现搜狐上有一篇关于API的文章《透过 AWS 峰会看未来 API 监控市场》(http://mt.sohu.com/20151218/n431798253.shtml ),顺手点进去,天啦撸,竟然跟前几天监控宝的微信文章一模一样,顺藤摸瓜,在这家叫OneAPM的公司官网上也找到了这篇文章(http://news.oneapm.com/aws-api/ )。OneAPM搜狐自媒体平台文章列表
OneAPM官网文章列表
下面就让我们看看这两篇几乎一样的文章
云智慧官方微信文章截图如下:
OneAPM官网文章截图如下:
监控宝文章开篇在讲API生态的发展历程和典型API方案架构,而OneAPM开篇先抱AWS大腿,随后开抄,因为监控宝的两张配图有明显水印,所以图片不见了,但文字就显得莫名其妙。
第二段讨论国内API监控发展的内容,继续全文照抄,只是把最后的云智慧监控宝替换成OneAPM。
后面两段关于监控宝“API监控原理”和“API监控新版介绍”的内容 ,因为涉及监控宝API可用性和响应时间策略,所以OneAPM进行了大篇幅的删减,只保留了一张还带着云智慧微信残缺水印的API通信原理图和少量文字,最后一段监控宝产品使用估计抄袭难度太大,所以也得以幸免。
既然连新闻稿都要抄袭,产品是不是也是抄的呢,本着生命不息,八卦不止的精神,上百度搜索“OneAPM 抄袭”,果然看到一个扒皮贴和一篇扒皮文章。先来看看V2EX上的扒皮帖子(链接:http://www.v2ex.com/t/125736):
有人(目测是OneAPM的托)在V2EX发帖说OneAPM家的Python Agent好用,然后网友留言“其实就是 NewRelic 的汉化版嘛”,于是@dreampuf 、@vvvboy认真比较了OneAPM和NewRelic的Agent代码,竟然又是一模一样。
OneAPM的人先是拒不承认抄袭,被扒皮后又说产品开源的目的就是为了让人抄,实在是“见仁见智”。对了,他们还在媒体上说《Blueware何晓阳,不做中国的New Relic》(CSDN专访:http://www.csdn.net/article/2014-07-10/2820605-APM-Software-Service )。
接着看到另一篇《OneAPM何晓阳的美丽人生》(http://news.3news.cn/html/news/cj/2015/0813/23053.html ),原来抄袭只是OneAPM的一项技能,他们还Get了好多Duang~Duang~Duang~的特技:吹牛逼、客户造假、数据造假、融资夸大。
看到这里,至少我是不敢把纯粹抄来的玩意往我家产品里接的,万一出了啥问题,你又搞不定,算谁的?!
结语
我是流氓我怕谁,创客时代,不少创业者,创业公司不择方法。抄袭已经很常见了,很值得思考。收起阅读 »
风口上的猪,希望是一只正直、实在、努力的猪。不希望是懒惰、抄袭、拿来主义者。
Elasticsearch结合Nginx使用
Elasticsearch是一种先进的,高性能的,可扩展的开源搜索引擎,提供全文搜索和实时分析的结构化和非结构化数据。 它的特点是可以使用RESTful API over HTTP,因此很容易融入现代网络架构。
由于NGINX具有出色的性能非常高并发率,再加上负载平衡的HTTP流量功能,这是非常适合用作为您扩展到多个Elasticsearch服务器的反向代理负载均衡。
Elasticsearch有专为可扩展性的一些功能,但卸载请求开源NGINX产品或商业的负载均衡Nginx Plus产品,这更加具有企业级的功能,节省了资源Elasticsearch服务器上。
把NGINX或NGINX Plus加在一个Elasticsearch服务器的前端提供福利,如请求 日志记录,但真正的价值是当你扩展到多个Elasticsearch服务器。
这种架构除了记录每个API请求,NGINX加NGINX Plus还有如下优势:
下表比较Elasticsearch 、Elasticsearch + nginx F/OSS、Elasticsearch + NGINX Plus 的功能:
当使用NGINX Plus高可用性主动或被动配置负载均衡的Elasticsearch 服务器集群时,Elasticsearch 客户端通过nginx plus请求,而不是直接连接到Elasticsearch服务器,这意味着,根据需要,而无需更新客户端,你可以任意的扩展Elasticsearch服务器。
部署NGINX Plus与Elasticsearch是非常简单的。在下面的示例NGINX Plus配置的指令定义负载均衡两台Elasticsearch服务器设置:
Playing HTTP Tricks with Nginx
Securing Elasticsearch with Nginx
分享英文原文:https://www.nginx.com/blog/nginx-elasticsearch-better-together/ 收起阅读 »
由于NGINX具有出色的性能非常高并发率,再加上负载平衡的HTTP流量功能,这是非常适合用作为您扩展到多个Elasticsearch服务器的反向代理负载均衡。
部署NGINX加上与Elasticsearch的优势
Elasticsearch有专为可扩展性的一些功能,但卸载请求开源NGINX产品或商业的负载均衡Nginx Plus产品,这更加具有企业级的功能,节省了资源Elasticsearch服务器上。
把NGINX或NGINX Plus加在一个Elasticsearch服务器的前端提供福利,如请求 日志记录,但真正的价值是当你扩展到多个Elasticsearch服务器。
这种架构除了记录每个API请求,NGINX加NGINX Plus还有如下优势:
- []支持大量的客户端连接,不管有没有启用keepalives,比长连接(使用keepalives)到elasticsearch服务器小的多[/][]负载均衡的请求Elasticsearch服务器[/][]缓存数据,减少同一内容再次请求Elasticsearch服务器。NGINX Plus 还提供HTTP API 对缓存数据的清除接口[/][]提供主动健康检测(仅nginx plus),不断检测后端Elasticsearch服务器是否正常,并主动的进行切换。[/][]报告丰富的监控指标(仅nginx plus),提供监控和管理。[/][]支持通过HTTP API动态的配置上游服务器组(仅nginx plus),可以从上游服务器组中添加和删除,上线或下线,改变权重。[/]
下表比较Elasticsearch 、Elasticsearch + nginx F/OSS、Elasticsearch + NGINX Plus 的功能:
当使用NGINX Plus高可用性主动或被动配置负载均衡的Elasticsearch 服务器集群时,Elasticsearch 客户端通过nginx plus请求,而不是直接连接到Elasticsearch服务器,这意味着,根据需要,而无需更新客户端,你可以任意的扩展Elasticsearch服务器。
部署NGINX Plus + Elasticsearch
部署NGINX Plus与Elasticsearch是非常简单的。在下面的示例NGINX Plus配置的指令定义负载均衡两台Elasticsearch服务器设置:
- []upstream - 负载均衡请求的是两台Elasticsearch服务器,地址分别是192.168.187.132和192.168.187.133的9200端口。[/][]proxy_cache_valid – 有效缓存有效时间10分钟[/][]health_check - 主动的健康监测、状态收集,把他们从负载平衡轮训的时候,把它们放下来,然后再将它们重新加入到轮训中中,再恢复健康。健康检查资料的匹配块,这不仅可以确保服务器返回200状态码,但检查的响应是JSON,它返回字符串预期Elasticsearch格式化,”状态“:200”。[/][]Final server block - 收集统计并监听8080端口的请求为status.html页面显示统计,或状态,它告诉nginx plus返回JSON格式的原始数据。[/]
proxy_cache_path /var/cache/nginx/cache keys_zone=elasticsearch:10m inactive=60m;
upstream elasticsearch_servers {
zone elasticsearch_servers 64K;
server 192.168.187.132:9200;
server 192.168.187.133:9200;
}
match statusok {
status 200;
header Content-Type ~ "application/json";
body ~ '"status" : 200';
}
server {
listen 9200;
status_zone elasticsearch;
location / {
proxy_pass http://elasticsearch_servers;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_cache elasticsearch;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_connect_timeout 5s;
proxy_read_timeout 10s;
health_check interval=5s fails=1 passes=1 uri=/ match=statusok;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
access_log logs/es_access.log combined;
}
server {
listen 8080;
root /usr/share/nginx/html;
location / {
index status.html;
}
location =/status {
status;
}
}
总结
Elasticsearch是一个强大而灵活的搜索引擎,和NGINX Plus一个企业级的应用交付平台自然契合在一起,作为一个现代化的可扩展的网络架构的组件。 作为软件产品,他们提供的只要你安装这些相同的特性和功能:在裸机服务器,在虚拟机中,在云中,或在容器中。
进一步阅读
Playing HTTP Tricks with Nginx
Securing Elasticsearch with Nginx
分享英文原文:https://www.nginx.com/blog/nginx-elasticsearch-better-together/ 收起阅读 »
Nginx访问日志格式设置
自定义一下nginx的访问日志格式,可以方便工作中的对日志的分析。主要要使用到几个指令,分别是log_format和access_log、error_log
Example:
access_log指令:
Example:
#WebLoglog_format指令:
log_format weblog '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /data/logs/domain_access.log access;
error_log /data/logs/domain_error.log error;
-------------------------------------参数说明:
语法 log_format name string ...
-------------------------------------
默认值 combined "..."
-------------------------------------
使用字段 http
-------------------------------------
- []$remote_addr 和 $http_x_forwarded_for:记录客户端的ip地址。[/][]$remote_user:记录客户端用户名称。[/][]$time_local:记录访问时间与时区。[/][]$request:记录请求的URL与HTTP协议。[/][]$status:记录请求状态;成功是200。[/][]$body_bytes_sent:记录发送给客户端文件主体内容大小。[/][]$http_referer:记录从那个页面链接访问过来的。[/][]$http_user_agent:记录客户端浏览器的相关信息。[/]
access_log指令:
--------------------------------------------------------记录的日志格式如下:
语法 access_log path [ format [ buffer = size ]]
access_log off
--------------------------------------------------------
默认值 logs/access.log combined
--------------------------------------------------------
使用字段 http
server
location
if in location
limit_except
---------------------------------------------------------
66.249.73.68 - - [17/Dec/2015:17:03:52 +0800] "GET /2011/11/1659.html HTTP/1.1" 200 9028 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"收起阅读 »
115.28.133.87 - - [17/Dec/2012:17:03:53 +0800] "GET /2012/03/8907.html HTTP/1.1" 200 8044 "http://www.baidu.com/s?wd=web%20equation&ie=utf-8" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)"
115.28.133.87 - - [17/Dec/2012:17:03:54 +0800] "GET /favicon.ico HTTP/1.1" 200 1150 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; 360SE)"
编程语言之争—PHP VS RUBY VS PYTHON
正如世界上的语言有多种多样,编程语言同样如此,有些更受欢迎,有些简单易用。随着编 程语言的种类越来越多,它们之间的竞争也日益激烈。而且往往简单的、运行速度快的编程语言并非就是最好的选择,因为不同的程序员对编程语言的选择很有讲究,而且能讲出一大堆道理来解释为什么喜欢某种编程语言 ,不过他们的给出的理由一般都带有太多个人的经历和情感因素。
下面的图表站在客观的立 场,从各个角度对PHP、Ruby、Python三种当前比较流行的语言的优势和劣势进行了对比:Ruby编写的代码精确、强大、表达性好,可用性最高;Python语法简单,最适合初学者学习,也是讨论最为热门的语言;PHP在三者中的流行程度最高;代码效率方面,代码行数PHP表现最好,运行时间上Python最短......,就如下图所示:
更过精彩分析,可以到Youtube观看视频:https://www.youtube.com/watch?v=VBm5m1-Eonw 收起阅读 »
智能自动化时代已来
自动化不单单在IT互联网上已经开始普及,我们的生活,家居,衣食住行都会慢慢智能、自动化起来,这只是一个开始。
在智能自动化的趋势下,值得我们思考,我们应该提升自己的能力,要不你就会面临下岗的可能,如果你的水平达不到,我没有理由要你了。当今互联网,工资就是一个大泡沫。刚没有工作几年的人,培训学了点本事,张口就要1w+,当然这也不是求职者的错,是互联网的市场造成的。现在一大批一大批的创业公司,天天都有公司死,有公司起。这么多公司,都需要招人来干活,为了做出个产品,要不连吹牛拿投资的资本都没有。这是很明显的自动化和非智能不达标很的很好的体现。如果当今互联网智能化水平达到了,也就不会导致IT从业人才的工资泡沫。
好好享受当下吧,以后可能失业的就是你,智能、自动化社会,值得你思考!
收起阅读 »
在智能自动化的趋势下,值得我们思考,我们应该提升自己的能力,要不你就会面临下岗的可能,如果你的水平达不到,我没有理由要你了。当今互联网,工资就是一个大泡沫。刚没有工作几年的人,培训学了点本事,张口就要1w+,当然这也不是求职者的错,是互联网的市场造成的。现在一大批一大批的创业公司,天天都有公司死,有公司起。这么多公司,都需要招人来干活,为了做出个产品,要不连吹牛拿投资的资本都没有。这是很明显的自动化和非智能不达标很的很好的体现。如果当今互联网智能化水平达到了,也就不会导致IT从业人才的工资泡沫。
好好享受当下吧,以后可能失业的就是你,智能、自动化社会,值得你思考!
收起阅读 »