云个球,其实就是远程桌面而已

运维杂谈、扯淡!微信群的一次技术杂谈分享 菜鸟A 群里有对云办公感兴趣的吗? 菜鸟B 云办公 什么概念?什么形态? 菜鸟C 云办公 什么概念? 对啊! 菜鸟A 不知道就算了! 菜鸟D 云个球,其实就是远程桌面而已! 菜鸟B 不知道 你普...
继续阅读 »
运维杂谈、扯淡!微信群的一次技术杂谈分享


菜鸟A


群里有对云办公感兴趣的吗?


菜鸟B


云办公 什么概念?什么形态?


菜鸟C


云办公 什么概念? 对啊!


菜鸟A


不知道就算了!


菜鸟D


云个球,其实就是远程桌面而已!


菜鸟B


不知道 你普及一下吗?真是的!


菜鸟C


真是的!


菜鸟B


@菜鸟D 别这么打击人家


菜鸟C


你不普及、介绍一下怎么让别人了解、感兴趣呢?


菜鸟D


今天某云给我发邮件让我续费,我在想这个时候我要是有自己的笔记本不就完啦[呲牙][呲牙]


菜鸟C


@菜鸟D 把人家姑娘吓到了, 云个球,其实就是远程桌面而已!


菜鸟B


这话太堵人了!


菜鸟C


这话多堵人啊! @菜鸟D 赶紧发红包!


菜鸟D


所谓的云其实就是一种高可用的计算方式罢了,云桌面对性能的消耗是巨大的,这种搞法不如用固态硬盘的本地系统,我个人的观点还是首先需要建立起强大的本地化系统。


菜鸟B


那就是说底层很主要呗?


菜鸟D


云桌面给你配个386的主机你用不?


菜鸟B


386是what?


菜鸟C


@菜鸟D 说的云里雾里 3850?


菜鸟D


386就是i7的爷爷的的爷爷的那一代cpu


菜鸟B


我去  那用毛线啊!估计给我爷爷 他打个斗地主 也嫌弃!


菜鸟D


所以吗,没有整体系统性能的提升那云个球呀,我就反感商业公司这种扯淡的大忽悠!


菜鸟B


嘿嘿 没事 在这个群 使劲吐槽!


菜鸟D


本地化系统本身的功能进化才是最重要的!


菜鸟C


@菜鸟D  有道理!


菜鸟B


本身性能解决,确实是用户体验最佳的表现!


菜鸟D


当年的很多所谓的购买云计算资源是因为小鸡已经无法满足自己的生产需要,现在技术进化这么快,自建数据中心已经基本没有什么技术壁垒啦,还要云就是傻x [偷笑][偷笑][偷笑]


菜鸟C


产品不谈性能和用户体验就是耍流氓!


菜鸟B


@菜鸟D 这个可能会成为以后的趋势,自经营基础设施,有能力的公司可能都会自建机房数据中心! 因为钱放自己身上是最好的!


菜鸟D


很早就有篇译文分析了自建数据中心和购买云的性价比,结论就是购买和自建基本少不了多少银子,从长远来看自建带来的投资回报率更高些,现在自建数据中心的资源企业回收之后就可以部署其他新应用,基础资源投入后也就剩下掏电费啦,所以云是一种新的计算模式,是建立在数据中心架构上的高可用工程化计算资源部署。


菜鸟B


@菜鸟D 这个我赞同,长远来看自建比较好。但是国内企业现在局面基本以创业公司和小型企业居多和活跃!所以云现在有存在的市场和价值!


菜鸟D


我个人觉得传统大it公司一旦觉悟,钱还是他们稳賺,现在云计算还处在成长期,但自建数据中心模式肯定是未来企业的产品市场!


菜鸟C


@菜鸟D 有远见!


菜鸟B


自建数据中心模式肯定是未来企业的产品市场  @菜鸟D 那你可以考虑向这个方向创业啊!那以后你就挣大发了,王健林卖房子,以后你就做数据中心服务一体化构建!


菜鸟D


人家cisco,h3c,华为,VMware,redhat都没闲着!


菜鸟B


都自建吗?


菜鸟D


自建需要硬件吧,需要方案吧,需要规划吧[偷笑][偷笑]


菜鸟B


这是肯定的需要,然后呢?


菜鸟D


那不就完了吗,需要你总的投资吧,建起来啦就该自己管理运维啦!


菜鸟B


那你赶紧建一个去!


菜鸟D


人家卖的是整体解决方案!


菜鸟B


以后互联网格局相对比较稳定了,那是不是自建大的数据中心?那这些大公司又又得挣了?


菜鸟D


小规模也可以呀,人家2000多人的单位搞7台服务器做个小数据中心,服务器都在上边跑,这才是真正的省资源!


菜鸟B


那这么说,以后卖机房自建数据中心创建方案、实施、硬件一条龙服务的厂商比较吃香?


菜鸟D


其实力哥讲的那个kvm现在就可以干这些事,只不过没有VMware 那种自动漂移和健康状态监控


菜鸟B


自动漂移和健康状态监控 可以二次开发 支持吗?


菜鸟D


我们已经进行中啦,单位的事我不馋和[呲牙][呲牙]


菜鸟B


那你做什么?


菜鸟D


其实给小微企业做那种5台基础然后可以横向扩展的数据中心挺有前途的,个人觉得!


菜鸟B


有点意思!


菜鸟D


@菜鸟B  我参与方案制订和技术讨论


菜鸟B


@菜鸟D  原来你属于智慧阶级  非民工阶级


菜鸟D


现在很多企业,事业单位都还是单服务器呐,真要让数据中心模式成为一种方式,那很多都需要升级的!


菜鸟B


你所说的升级 指的是 硬件方面的配置吗?


菜鸟D


从传统的机房升级到数据中心计算模式
我对数据中心计算模式的理解:数据中心就是工程化的计算资源池,传统硬件在这里就是细胞资源[呲牙][呲牙]


菜鸟B


颗粒化?


菜鸟C


@菜鸟D 你可以写书了!


菜鸟D


思想碎片而已,写书又不挣钱,能和大家闲扯淡就很好啦!


菜鸟B


好一个思想碎片化 写书确实不挣钱,就是挣个名声!


菜鸟D


未来这些细胞资源肯定需要用linux来首先变成具有强大本地化功能的系统
其实我一直觉得蚁穴结构很有意思,数据中心就是蚁穴,然后是各种蚁巢(硬件设施),再然后就是蚂蚁(容器化的微服务)[呲牙][呲牙][呲牙]


菜鸟B


好形象的比喻,高!
好了菜鸟扯淡杂谈就这样结束了。
此次杂谈菜鸟主角------>菜鸟D(解宝琦)  配角------>菜鸟B(采菊篱下)   友情出演菜鸟C(邓荣兴),群众演员菜鸟A! 收起阅读 »

解决RedHat5.8无法利用yum安装软件问题

好久都没有用红帽系统了,今天一位测试的同事,在RedHat5.8的环境需要测试,安装apache,但是报没有gcc,但是用yum安装gcc结果如下: [root@localhost ~]# yum -y install gcc Loaded plugins...
继续阅读 »


好久都没有用红帽系统了,今天一位测试的同事,在RedHat5.8的环境需要测试,安装apache,但是报没有gcc,但是用yum安装gcc结果如下:


[root@localhost ~]# yum -y install gcc
Loaded plugins: katello, product-id, security, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
Setting up Install Process
No package gcc available.
Nothing to do
报没有gcc软件包存在,她没有办法,只好叫我帮忙弄好了!
 
系统版本如下:
[root@localhost ~]# cat /etc/issue
Red Hat Enterprise Linux Server release 5.8 (Tikanga)
Kernel \r on an \m
解决过程:


下载163安装源


[root@localhost~]# wget http://mirrors.163.com/.help/CentOS5-Base-163.repo
--2015-10-09 14:33:10-- http://mirrors.163.com/.help/CentOS5-Base-163.repo
Resolving mirrors.163.com... 123.58.173.186,123.58.173.185
Connecting to mirrors.163.com|123.58.173.186|:80...connected.
HTTP request sent, awaiting response... 200 OK
Length: 2341 (2.3K) [application/octet-stream]
Saving to: `CentOS5-Base-163.repo'

100%2,341 --.-K/s in 0s

2015-10-09 14:33:22 (108 MB/s) -`CentOS5-Base-163.repo' saved [2341/2341]
[root@localhost~]# mv CentOS5-Base-163.repo /etc/yum.repos.d/


修改repo文件


*** 把$releasever替换成5
[root@localhost yum.repos.d]# sed -i 's#$releasever#5#g' ./CentOS5-Base-163.repo


清除原有缓存


[root@localhost yum.repos.d]# yum clean all
Loaded plugins: katello, product-id, security, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
Cleaning up Everything


获取yum列表


[root@localhost yum.repos.d]# yum makecache
Loaded plugins: katello, product-id, security, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
addons | 1.9 kB 00:00
addons/filelists_db | 570 B 00:00
addons/other_db | 554 B 00:00
addons/primary_db | 1.1 kB 00:00
base | 1.1 kB 00:00
base/filelists | 3.7 MB 00:11
base/other | 14 MB 01:04
base/group | 1.1 MB 00:03
base/primary | 1.3 MB 00:06
epel | 3.6 kB 00:00
epel/filelists_db | 4.1 MB 00:16
epel/updateinfo | 510 kB 00:02
epel/other_db | 1.6 MB 00:05
epel/primary_db | 2.9 MB 00:14
extras | 2.1 kB 00:00
extras/filelists_db | 224 kB 00:00
extras/other_db | 442 kB 00:01
extras/group | 9.7 kB 00:00
extras/primary_db | 173 kB 00:00
updates | 1.9 kB 00:00
updates/filelists_db | 2.1 MB 00:09
updates/other_db | 11 MB 00:29
updates/primary_db | 531 kB 00:00
base 3667/3667
base 3667/3667
base 3667/3667
Metadata Cache Created


搜索安装


gcc.png
[root@localhost yum.repos.d]# yum -y install gcc

收起阅读 »

苦逼运维

今天在群里,一哥们发出了一个好湿,大家共爽! 横批 苦逼运维 上联 一个项目两部电脑三餐盒饭只为四千工资搞得五脏俱损六神无主仍然七点起床八点开会处理九个报警十分辛苦 下联 十年运维九年加班八面无光忙的七窍生烟到头六亲不认五体投地依旧四肢酸软三更加班...
继续阅读 »
今天在群里,一哥们发出了一个好湿,大家共爽!


横批


苦逼运维


上联


一个项目两部电脑三餐盒饭只为四千工资搞得五脏俱损六神无主仍然七点起床八点开会处理九个报警十分辛苦


下联


十年运维九年加班八面无光忙的七窍生烟到头六亲不认五体投地依旧四肢酸软三更加班只为二个臭钱一生孤独

总结:运维虽苦逼,领导需善待;如若无感悟,携程你榜样!
 
 运维杂谈、扯淡群 里面什么都可以说,畅所欲言,越激烈越好,各抒己见!思维发散 自由言论!自由表达!侃大山 生活需要扯淡 让生活解压!
有意加入者,扫码加入,加入不了,可以加微信号:crh_Love_ghl  注明拉取进杂谈群!
openskill.jpg
收起阅读 »

Msyql备份之mysqldump介绍

一、​备份MYSQL 把一个库导出到一个SQL文件 mysqldump -uroot -ppassword db_name > /data/rh/db_name.sql 备份多个库(使用-B参数) -B, --databases Dump se...
继续阅读 »
一、​备份MYSQL


把一个库导出到一个SQL文件


mysqldump -uroot -ppassword db_name > /data/rh/db_name.sql 

备份多个库(使用-B参数)
-B, --databases Dump several databases. Note the difference in usage; in
this case no tables are given. All name arguments are
regarded as database names. 'USE db_name;' will be
included in the output.
如果需要指定字符集的话,可以使用--default-character-set参数。


备份全部库


mysqldump -uroot -ppassword --all-databases > /data/rh/db_all.sql


备份某个表


mysqldump -uroot -ppassword dbname table_name > /data/rh/table_name.sql


备份某库多个表


mysqldump -uroot -ppassword dbname tb1_name tb2_name > /data/rh/tb1_tab2.sql


备份数据库的表结构


mysqldump -uroot -ppassword -q -d dbname > /data/bakm3310/dbname.sql
-q 就是忽略缓存数据
-d 就是没有数据行信息


导出某库某表的结构


mysqldump -uroot -ppassword -d dbname tbname > /data/rh/tbname.sql


导出某库某表的内容


mysqldump -uroot -ppassword -t dbname tbname > /data/rh/tbname.sql
-t 没有创建表的创建信息
二、恢复数据
有两种恢复方式如下:


第一种


mysql -uroot -ppassword db_name < /data/rh/db_name.sql


第二种


#mysql -u root -ppasword
mysql> use db_name;
mysql> source /data/rh/db_name.sql;

收起阅读 »

Flask ImportError: No module named XXX问题解决

第一个flask项目,做一个简单的网址导航。部署项目后,浏览器访问报500错误。查看apache日志后,报错如下: [Tue Jan 06 09:58:22 2015] [error] hello world [Tue Jan 06 09:58:22 2015...
继续阅读 »
第一个flask项目,做一个简单的网址导航。部署项目后,浏览器访问报500错误。查看apache日志后,报错如下:
[Tue Jan 06 09:58:22 2015] [error] hello world
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] mod_wsgi (pid=31615): Target WSGI script '/var/www/qianshan/qianshan.wsgi' cannot be loaded as Python module.
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] mod_wsgi (pid=31615): Exception occurred processing WSGI script '/var/www/qianshan/qianshan.wsgi'.
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] Traceback (most recent call last):
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] File "/var/www/qianshan/qianshan.wsgi", line 12, in
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] from qianshan import app as application
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] File "/var/www/qianshan/__init__.py", line 4, in
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] import extras
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] ImportError: No module named extras
项目结构
qianshan
├── config.ini
├── extraModules.py
├── extras.py
├── __init__.py
├── qianshan.wsgi
├── static
├── templates
├── test.py
└── venv
init.py代码
from flask import Flask
from flask import render_template
import extraModules
import extras#如果没有这句无报错正常运行,只有一些静态资源没拉到,可能是其他问题
import ConfigParser
import codecs
import logging

logging.basicConfig(filename='qianshan.log', level=logging.INFO)
logging.info('Started')

app = Flask(__name__)

logging.info('App established')

@app.route("/")
def index():
return render_template('index.html')
extras.py是实际我想要导入的模块,里面有两个我需要的类;extraModules是测试模块,import extraModules是成功的,apache日志的第一行也打出来了;他们的代码分别如下:
# Filename : extras.py

class Block:
def setNo(self, no):
self.no = int(no)
def getNo(self):
return self.no
def setName(self, name):
self.name = name
def getName(self):
return self.name
def setPriority(self, priority):
self.priority = int(priority)
def getPriority(self):
return self.priority
def setHotKeyAsc(self, hotKeyAsc):
self.hotKeyAsc = hotKeyAsc
def getHotKeyAsc(self):
return self.hotKeyAsc
def setElement(self, equation):
s = equation.split(':')
if(s[0] == 'no'):
self.setNo(s[1])
elif(s[0] == 'name'):
self.setName(s[1])
elif(s[0] == 'priority'):
self.setPriority(s[1])
elif(s[0] == 'hot_key_asc'):
self.setHotKeyAsc(s[1])

class Website:
def setNo(self, no):
self.no = int(no)
def getNo(self):
return self.no
def setName(self, name):
self.name = name
def getName(self):
return self.name
def setUrl(self, url):
self.url = url
def getUrl(self):
return self.url
def setIcon(self, icon):
self.icon = icon
def getIcon(self):
return self.icon
def setBlockNo(self, blockNo):
self.blockNo = int(blockNo)
def setPriority(self, priority):
self.priority = int(priority)
def getPriority(self):
return self.priority
def setHotKeyAsc(self, hotKeyAsc):
self.hotKeyAsc = hotKeyAsc
def getHotKeyAsc(self):
return self.hotKeyAsc
def setElement(self, equation):
s = equation.split(':')
if(s[0] == 'no'):
self.setNo(s[1])
elif(s[0] == 'name'):
self.setName(s[1])
elif(s[0] == 'url'):
self.setUrl(s[1])
elif(s[0] == 'icon'):
self.setIcon(s[1])
elif(s[0] == 'priority'):
self.setPriority(s[1])
elif(s[0] == 'hot_key_asc'):
self.setHotKeyAsc(s[1])

if __name__ == '__main__':
block = Block()
website = Website()
extraModules.py代码如下:
# Filename : extraModules.py
print 'hello world'
其他背景信息:
项目部署在digital ocean的ubuntu12.x主机上,python版本2.7.3.

还请指导下,是不是extras.py有什么地方大意了,小弟新学python不久,请多敲打点拨

谢谢1L和2L前辈的指点啊!白天一直在上课,以下为1月7日晚更新,我把wsgi以及virtual host的配置也发一下,wsgi中是有配置/var/www/qianshan/为sys.path的。

qianshan.wsgi如下:
#!/usr/bin/python
activate_this = '/var/www/qianshan/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

import sys
import logging

logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,'/var/www/qianshan/')
sys.path.insert(1,'/var/www/')

from qianshan import app as application
application.secret_key = 'Add your secret key'
Virtual Host配置:

ServerName qianshan.co
ServerAdmin spark@qianshan.co
WSGIScriptAlias / /var/www/qianshan/qianshan.wsgi

Order allow,deny
Allow from all

Alias /static /var/www/qianshan/static

Order allow,deny
Allow from all

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
我会按照1L和2L的方法试试,如果不行再在这里说
 
 
问题解决如下:
 
1.首先确认是文件的权限问题。和import的语法无关。
下图中可以看到目前项目根目录下各个文件的权限,otherModules(就是之前的extras)对root所在的用户组没有读权限。
-rwx------ 1 root root 9091 Jan  3 09:27 config.ini
-rwxr--r-- 1 root root 404 Jan 7 22:58 __init__.py
-rwx------ 1 root root 2316 Jan 7 23:07 otherModules.py
-rwxr--r-- 1 root root 360 Jan 5 23:34 qianshan.wsgi
drwxr-xr-x 2 root root 4096 Jan 3 09:08 static
drwxr-xr-x 2 root root 4096 Jan 3 08:51 templates
-rw-r--r-- 1 root root 262 Jan 7 23:05 testModule.py
-rwx------ 1 root root 1716 Jan 3 09:36 test.py
drwxr-xr-x 6 root root 4096 Jan 3 08:05 venv
chmod调整权限后,权限如下,项目可以正常访问,不再报错
-rwxr--r-- 1 root root 9091 Jan  3 09:27 config.ini
-rwxr--r-- 1 root root 404 Jan 7 22:58 __init__.py
-rwxr--r-- 1 root root 2316 Jan 7 23:07 otherModules.py
-rwxr--r-- 1 root root 360 Jan 5 23:34 qianshan.wsgi
drwxrwxr-x 2 root root 4096 Jan 3 09:08 static
drwxrwxr-x 2 root root 4096 Jan 3 08:51 templates
-rw-r--r-- 1 root root 262 Jan 7 23:05 testModule.py
-rwxr--r-- 1 root root 1716 Jan 3 09:36 test.py
drwxr-xr-x 6 root root 4096 Jan 3 08:05 venv
大体过程就这样!
原文地址:分享原文 收起阅读 »

php不重新编译添加模块

PHP
php如何使用第三方软件 本例是: php(mysql_connect()函数)使用mysql(第三方软件). 观察上图,php能使用大量的第三方非php库(典型性是C语言写库), 为了达到此目的,你必须具备两个条件:条件I. 安装第三方库(软件...
继续阅读 »


php如何使用第三方软件


本例是: php(mysql_connect()函数)使用mysql(第三方软件).
pload.png

观察上图,php能使用大量的第三方非php库(典型性是C语言写库), 为了达到此目的,你必须具备两个条件:
条件I. 安装第三方库(软件) 
条件II. 安装了该软件的php扩展
如果只是安装mysql,满足条件I,但是条件II不满足, 为了满足条件二, 我们需要了解php安装扩展的知识.

安装php, 大的方面还可以分为两种方式:
方式1. 将扩展编译到php 
方式2. 将扩展单独编译成动态连接库so文件

方式1的优点是运行速度快,但是为了一个扩展需要重新安装整个php
方式2灵活,但是运行速度稍慢.
windows平台下的php程序员大多只熟悉方式2,因为方式2是windows下安装Php扩展的唯一方式.
之前如果安装了php, 如果没有删除php源码目录,重新进入该目录, 那么此时重新编译运行将采用增量方式,实际上比方式2还更方便些,永远的三步曲:
./configure --prefix=/usr/local/php --with-mysql 
make
make install
有人质疑:
我安装mysql sdk,./configure命令一个–with-mysql就知道我安装的目录,还是有点神奇,难道他全硬盘搜索.h文件? 不是, 如果你用yum方式安装sdk,那么LD_LIBRARY_PATH系统变量就指示了该sdk相关信息 ,如果你使用源码(tar)安装mysql sdk,你的–with-mysql参数不得不像这样: –with-mysql=/your_mysql_sdk_dir/ 来指定了。
 
方式2:
以添加ftp模块为例子:
进入源码目录
#cd php-5.2.8/ext/ftp
运行phpize configure
#/usr/local/php/bin/phpize
编译,指定php-config,留意这里的php-config,不是php.ini
#./configure --with-php-config='/usr/local/php/bin/php-config'
#上面可以添加--enable-ftp,也可以不添加
编译安装
(留意:假如之前有过添加其他模块肯定 要先 make clean ,不然 编译报错。)
#make && make install
生成一个目录来存放扩展的模块
#mkdir /usr/local/php/etc/php/ext
复制ftp.so到模块目次
#cp /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/ftp.so /usr/local/php/etc/ext/
编辑 php.ini文件,指定PHP到哪个目次读模块
#vi /usr/local/php/etc/php.ini
#extension_dir="/usr/local/php/etc/ext"
Load模块
#extension=ftp.so
#保存退出

重启apache,或者其他web服务器
再用/usr/local/php/bin/php -m|grep ftp #验证是否有ftp.so
收起阅读 »

Ansible工作原理

Ansible是一款非常简单的IT自动化引擎,可自动执行 云配置 ,配置管理,应用程序部署,服务内编排和许多其他IT需求。 从第一天开始,Ansible就专为多层部署而设计,它通过描述所有系统之间的相互关系来建模IT基础架构,而不仅仅是一次管理一个系统。...
继续阅读 »

Ansible是一款非常简单的IT自动化引擎,可自动执行 云配置配置管理应用程序部署服务内编排和许多其他IT需求。


从第一天开始,Ansible就专为多层部署而设计,它通过描述所有系统之间的相互关系来建模IT基础架构,而不仅仅是一次管理一个系统。


它不使用任何代理程序,也不使用其他自定义安全性基础结构,因此易于部署-最重要的是,它使用一种非常简单的语言(YAML,以Ansible Playbooks的形式)。


高效的架构

Ansible通过连接到节点并向其推出称为Ansible模块的小程序来工作。这些程序被编写为系统所需状态的资源模型。然后,Ansible执行这些模块(默认情况下通过SSH),并在完成后将其删除。


您的模块库可以驻留在任何计算机上,并且不需要服务器,守护程序或数据库。通常,您将使用自己喜欢的终端程序,文本编辑器以及可能的版本控制系统来跟踪内容的更改。


友好的SSH密钥

支持密码,但是带有ssh-agent的SSH密钥是使用Ansible的最佳方法之一。尽管如果您想使用Kerberos,那也很好。很多选择!


不需要root用户登录,您可以以任何用户身份登录,然后以su或sudo身份登录到任何用户。


Ansible的authorized_key模块是使用ansible控制哪些机器可以访问哪些主机的好方法。也可以使用其他选项,例如kerberos或身份管理系统。


ssh-agent bash
ssh-add〜/ .ssh / id_rsa

以简单的文本文件管理库存

默认情况下,Ansible使用一个非常简单的INI文件表示要管理的计算机,该文件将所有受管计算机放入您自己选择的组中。


要添加新计算机,无需使用其他SSL签名服务器,因此,毫无疑问可以确定为什么特定的计算机由于NTP或DNS问题而无法链接。


如果您的基础架构中还有其他来源,Ansible也可以对此进行插件,例如从EC2,Rackspace,OpenStack等来源中绘制库存,组和变量信息。


纯文本清单文件如下:


[webservers]
www1.example.com
www2.example.com

[dbservers]
db0.example.com
db1.example.com

一旦列出清单主机,就可以在简单的文本文件(在名为“ group_vars /”或“ host_vars /”的子目录中)中或直接在清单文件中为它们分配变量。


或者,正如已经提到的,使用动态清单从EC2,Rackspace或OpenStack等数据源中提取清单。


使用Ansible AD DOC并发执行任务

有了可用实例后,您可以立即与其进行对话,而无需进行任何其他设置:


ansible all -m ping 
ansible foo.example.com -m yum -a "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"

请注意,我们有权访问基于状态的资源模块以及运行原始命令。这些模块非常易于编写,Ansible附带了许多模块,因此您的大部分工作已经完成。
Ansible包含一个巨大的内置模块工具箱,其中有750多个。


手册:简单而强大的自动化语言

PLaybook可以很好地协调基础结构拓扑的多个部分,并且可以非常详细地控制一次要处理的计算机数量。这是Ansible开始变得最有趣的地方。


Ansible的编排方法是微调的简单方法之一,因为我们相信您的自动化代码对您来说很有意义,而且对于特殊的语法或功能,您应该几乎不需要记住。


这是一本剧本的样子。提醒一下,这仅是预告片-跳至 docs.ansible.com 以获取完整的文档以及所有可能的方法。


---
- hosts: webservers
serial: 5 # update 5 machines at a time
roles:
- common
- webapp
- hosts: content_servers
roles:
- common
- content

例如app_config.yml可能看起来像:


---
- yum: name={{contact.item}} state=installed
with_items:
- app_server
- acme_software


- service: name=app_server state=running enabled=yes


- template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf
notify:
- restart app server

该Ansible文档更加深入探讨了这一点。您还可以做很多事情,包括:


  • 从负载均衡器和监视窗口中取出机器
  • 使用收集到的有关特定服务器的事实,让一台服务器知道所有其他服务器的IP地址-并使用这些服务器动态构建配置文件
  • 设置一些变量并提示其他变量,并设置未设置时的默认值
  • 使用一个命令的结果来决定是否运行另一个命令
  • 有许多先进的可能性,但是很容易上手。

最重要的是,该语言保持可读性和透明性,并且您无需执行诸如声明显式排序关系或使用编程语言编写代码之类的事情。


扩展可扩展性:模块,插件和API

如果您想编写自己的模块,则可以使用任何可返回JSON的语言(Ruby,Python,bash等)编写Ansible模块。库存还可以通过编写与该数据源对话并返回JSON的程序来插入任何数据源。还有各种Python API用于扩展Ansible的连接类型(SSH并非唯一的传输方式),回调(Ansible日志的方式等),甚至用于添加新的服务器端行为。


原文: https://www.ansible.com/overview/how-ansible-works

收起阅读 »

Ansible介绍

Ansible是一个自动化工具。它可以配置系统,部署软件,编排更高级的任务,比如连续部署或零停机时间滚动更新。 Ansible的目标是最简单和最易用。它也有一个强烈关注安全性和可靠性,以最少的移动部件,使用OpenSSH运输(加速插座模式和拉模式选择),和设计...
继续阅读 »

Ansible是一个自动化工具。它可以配置系统,部署软件,编排更高级的任务,比如连续部署或零停机时间滚动更新。


Ansible的目标是最简单和最易用。它也有一个强烈关注安全性和可靠性,以最少的移动部件,使用OpenSSH运输(加速插座模式和拉模式选择),和设计语言,人类可审核性的 - 甚至是那些不熟悉程序。


我们认为简单是所有大小的环境和相关的设计对于忙碌的所有类型的用户——这是否意味着开发人员、系统管理员,发布工程师,经理,无处不在。Ansible适合管理小设置少量的实例以及与许多成千上万的企业环境。


Ansible管理机器以最好的方式。没有一个问题如何升级远程守护进程或无法管理系统的问题因为守护进程是卸载。OpenSSH是最同行评议的开源组件,使用该工具的安全风险大大降低。Ansible是分散的,它依赖于现有的操作系统凭证来控制访问远程机器,如果需要使用Kerberos,它可以很容易地连接LDAP和其他管理系统的集中式身份验证。


Ansible是一个彻底的简单自动化引擎,自动化云配置,配置管理、应用程序部署,intra-service编排,以及许多其他的需求。


被设计为多层部署自第一天,Ansible模型你的IT基础设施,描述如何推动你所有的系统,而不仅仅是管理一个系统。


它使用没有代理,没有额外的自定义安全基础设施,所以很容易部署,最重要的是,它使用一个非常简单的语言(YAML Ansible Playbooks的形式),让你描述你的自动化工作的方式方法简明英语。


我们利用Ansible主要是作为内网服务器的一些管理,因为他用ssh来管理配置,内网同学还是很快速的,外网主要是利用Saltstack,利用消息队列远程通信,我感觉是比Ansible好的。

收起阅读 »

python利用ansible磁盘检测报警

简单的利用python调用ansible检测内网服务器磁盘,然后报警,看代码吧,写得有点糙,很多地方都没有考虑异常抛出,和处理,暂时能用就行,The following code: #!/usr/bin/env python # encoding...
继续阅读 »
python.png


简单的利用python调用ansible检测内网服务器磁盘,然后报警,看代码吧,写得有点糙,很多地方都没有考虑异常抛出,和处理,暂时能用就行,The following code:


#!/usr/bin/env python
# encoding: utf-8
#Author: Lucky chen

import datetime,time,traceback
import smtplib,os,re
import threading
from string import join

def sendmail(subject='', msg='', fromaddr='lucky@hadoope.com', toaddrs=):
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
mail_msg = MIMEMultipart()
mail_msg['Subject'] = subject
mail_msg['From'] = fromaddr
mail_msg['To'] = ','.join(toaddrs)
mail_msg.attach(MIMEText(msg, 'html', 'utf-8'))
#print mail_msg.as_string()
try:
[size=16]# Intranet mail server[/size]
s = smtplib.SMTP('10.3.8.2')
s.sendmail(fromaddr, toaddrs, mail_msg.as_string())
s.quit()
except:
error_result = traceback.format_exc()
print error_result


def check_sendmail(zn,hn):
#The recipient email
mailto_list=['ronghua@139.com', 'lucky@hadoope.com']
f = '%'
mail_content = "host %s %s zone used gt 95%s" % (hn, zn, f)
sub = "online host Disk usage"
sendmail(subject=sub, msg=mail_content, toaddrs=mailto_list)


def check_result(cmd,hname):
resu = os.popen(cmd).read().strip().split()
#print resu
#To obtain / /data zone Pointer to the location
rnum, dnum = resu.index("/") - 1 , resu.index("/data") - 1
[size=16] get root /data zone % num[/size]
rzone, dzone = int(resu[rnum].split('%')[0]), int(resu[dnum].split('%')[0])
#print type(rzone)
#print rzone,dzone,hname

if rzone > 95:
check_sendmail(zn="/",hn=hname)
if dzone > 95:
check_sendmail(zn='/data',hn=hname)

if __name__=='__main__':
[size=16]ansible host list /etc/ansible/hosts[/size]
host=['web1','web2','db1','db2']
for dest in host:
comm = "ansible %s -m shell -a 'df -h'" % (dest)
#print comm
#check_result(cmd=comm,hname=dest)
s = threading.Thread(target = check_result,args = (comm,dest))
s.start()
收起阅读 »

Python系统信息模块Psutil介绍

         psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU 、内存、磁盘、网络等)信息,它主要应用于系统监控,分析和限制系统资源以及进程的管理...
继续阅读 »
py1.jpeg
   
     psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU 、内存、磁盘、网络等)信息,它主要应用于系统监控,分析和限制系统资源以及进程的管理。它可以实现等同于命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和SunSolaris等操作系统,支持从2.4到3.4的python版本,目前最新版本为2.0.0。
 
    通常我们获取操作系统信息往往采用编写shell脚本来实现,如获取当前系统的物理内存总大小和使用大小,shell命令如下:
物理内存total值: free -m |grep Mem |awk ‘{print $2}’
物理内存used值:free -m |grep Mem | awk ‘{print $3}’
    相比较而言,使用psutil库实现起来就更加简单了。psutil大小单位一般采用字节(Byte),如下:
>>> import psutil
[quote]>> mem = psutil.virtual_memory()
>>> mem.total,mem.used
(8361156608L, 8215703552L)
转换成M为单位的话可以如下:
>>> print mem.total/1024/1024,mem.used/1024/1024
7973 7835


psutil的安装


    centos下:
[root@crh]#yum search python |grep psutil
python26-psutil.x86_64 : A process and system utilities module for Python
所以我只需要yum -y install python26-psutil 就可以了
    源码安装:
[root@crh]#wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz
[root@crh]#tar zxf psutil-2.0.0.tar.gz
[root@crh]#cd psutil-2.0.0
[root@crh]#python setup.py install
安装完成后,进入到python交互模式你可以导入试试。。。。


获取系统性能信息


    采集系统的基本性能信息包括(cpu、内存、磁盘、网络等,可以完整描述当前系统的运行的状态以及质量。psutil模块已经封装好了这些方法,用户可以根据自身的应用场景,调用相应的方法来满足需求,非常简单实用,那我们就开始来学习吧。走起。。。。。
 
1.CPU信息
    Linux操作系统的CPU利用率主要有以下几个部分:
    []User Time, 执行用户进程的时间百分比;[/][]System Time,执行内核进程和中断的时间百分比;[/][]Wait IO, 由于IO等待而让CPU处于idle(空闲)状态的时间百分比;[/][]Idle, CPU处于idle状态的时间百分比。[/]

    我们使用Python的psutil.cpu_times()方法可以非常简单的获取到这些信息,同时也可以获取到CPU的硬件相关的信息,比如CPU的物理个数和逻辑个数,具体看下面的操作例子:
>>> import psutil
>>> psutil.cpu_times() [size=16]使用cpu_items方法获取CPU完整信息[/size]
cputimes(user=202656.94, nice=0.85999999999999999, system=83652.119999999995, idle=10823517.810000001, iowait=1242.27, irq=632.41999999999996, softirq=8720.3500000000004)[/quote]

[quote]>> psutil.cpu_times(percpu=True) #[size=16]#显示所有逻辑CPU的信息,指定percpu=True就好[/size]
[cputimes(user=8798.4200000000001, nice=0.029999999999999999, system=4920.2399999999998, idle=1376294.9399999999, iowait=40.539999999999999, irq=0.01, softirq=24.239999999999998), cputimes(user=35990.419999999998, nice=0.20000000000000001, system=13513.059999999999, idle=1338291.54, iowait=431.29000000000002, irq=95.420000000000002, softirq=1756.3499999999999), cputimes(user=23382.98, nice=0.080000000000000002, system=9391.4300000000003, idle=1356101.8899999999, iowait=102.27, irq=48.829999999999998, softirq=1050.73), cputimes(user=36171.690000000002, nice=0.28999999999999998, system=13764.790000000001, idle=1337939.1399999999, iowait=383.88, irq=91.719999999999999, softirq=1726.6199999999999), cputimes(user=9241.1200000000008, nice=0.070000000000000007, system=5088.5100000000002, idle=1375672.72, iowait=36.68, irq=0.01, softirq=38.950000000000003), cputimes(user=35656.849999999999, nice=0.089999999999999997, system=13522.209999999999, idle=1339042.3700000001, iowait=114.27, irq=84.890000000000001, softirq=1657.29), cputimes(user=17315.099999999999, nice=0.0, system=9599.6100000000006, idle=1362112.8, iowait=28.25, irq=224.88999999999999, softirq=797.25999999999999), cputimes(user=36109.360000000001, nice=0.070000000000000007, system=13855.99, idle=1338251.4299999999, iowait=105.06999999999999, irq=86.640000000000001, softirq=1669.28)][/quote]

[quote]>> psutil.cpu_times().user [size=16]# 获取CPU的但单项数据,如用户的CPU时间比[/size]
202673.82000000001[/quote]

[quote]>> psutil.cpu_count() [size=16]#获取cpu逻辑个数,默认logical=True ****注释如果你的psutil的版本不对的话可能没有cpu_count这个方法[/size][/quote]

8

[quote]>> psutil.cpu_count(logical=False) [size=16]#获取cpu的物理个数[/size][/quote]

1
2.内存信息
    Linux 系统的内存信息涉及total(内存总数)、used(已使用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)等,分别使用psutil.virtual_memory()与psutil.swap_memory()方法获取到这些信息。
>>> mem = psutil.virtual_memory()  #使用psutil.virtual_memory方法获取内存完整信息

[quote]>> mem[/quote]

svmem(total=8361156608L, available=5626871808L, percent=32.700000000000003, used=8166158336L, free=194998272L, active=2812674048, inactive=4402806784, buffers=290136064L, cached=5141737472)

[quote]>>[/quote]

[quote]>> mem.total/1024/1024 #获取内存总数[/quote]

7973L

[quote]>> mem.free/1024/1024 #获取内存空闲数[/quote]

185L

[quote]>> psutil.swap_memory() #获取swap分区信息[/quote]

sswap(total=8587182080L, used=143360L, free=8587038720L, percent=0.0, sin=0, sout=143360)
3.磁盘信息
    在系统磁盘信息中我们比较关注的是磁盘的利用率和IO信息,其中磁盘利用率使用psutil.disk_usage方法获取。磁盘IO信息包括read_count(读IO数)、write_count(写IO数)、read_bytes(IO读字节数)、write_bytes(IO写字节数)、read_time(磁盘读时间)、write_time(磁盘写时间)等。这些IO信息可以使用psutil.disk_io_counters()获取。
>>> psutil.disk_partitions()        #使用psutil.disk_partions()获取磁盘完整信息

[sdiskpart(device=’/dev/sda2′, mountpoint=’/’, fstype=’ext3′, opts=’rw’), sdiskpart(device=’/dev/sda5′, mountpoint=’/data’, fstype=’ext3′, opts=’rw’), sdiskpart(device=’/dev/sda1′, mountpoint=’/boot’, fstype=’ext3′, opts=’rw’)]

[quote]>> psutil.disk_usage(‘/’) [size=16]使用disk_usage方法指定参数获取指定分区的使用情况。[/size][/quote]

sdiskusage(total=52005134336, used=3963228160, free=45357588480, percent=7.5999999999999996)

[quote]>> psutil.disk_usage(‘/data’) [size=16]使用disk_usage方法指定参数获取指定分区的使用情况。[/size][/quote]

sdiskusage(total=423282647040, used=32194187264, free=369240064000, percent=7.5999999999999996)

[quote]>> psutil.disk_io_counters() #使用psutil.disk_io_counters获取硬盘总的IO个数读写信息[/quote]

sdiskio(read_count=95397, write_count=3333898, read_bytes=1524504064, write_bytes=90824263168, read_time=256049, write_time=20039375)

[quote]>> psutil.disk_io_counters(perdisk=True) [size=16]”perdisk=True” 参数获取单个分区IO个数读写信息[/size][/quote]

{‘sda4′: sdiskio(read_count=5, write_count=0, read_bytes=5120, write_bytes=0, read_time=50, write_time=0), ‘sda5′: sdiskio(read_count=29679, write_count=1161203, read_bytes=594831360, write_bytes=46546737152, read_time=79547, write_time=12518375), ‘sda2′: sdiskio(read_count=65407, write_count=2172728, read_bytes=927507456, write_bytes=44279271424, read_time=175431, write_time=7521025), ‘sda3′: sdiskio(read_count=39, write_count=3, read_bytes=831488, write_bytes=143360, read_time=158, write_time=10), ‘sda1′: sdiskio(read_count=267, write_count=26, read_bytes=1328640, write_bytes=28160, read_time=863, write_time=32)}
4.网络信息
    系统的网络信息和磁盘信息类似,涉及几个关键的点,包括bytes_sent(发送字节数)、bytes_recv(接受字节数)、packets_sent(发送数据包数)、packets_recv(接受数据包数)等。这些网络信息可以使用psutil.net_io_counters()方法获取。
>>> psutil.net_io_counters()     [size=16]使用psutil.net_io_counters获取到网络总的IO信息,默认pernic=False[/size]

snetio(bytes_sent=98373481869, bytes_recv=630483790117, packets_sent=869376956, packets_recv=894221315, errin=0, errout=0, dropin=0, dropout=0)

[quote]>> psutil.net_io_counters(pernic=True) [size=16]pernic=True,输出每个网络接口的IO信息[/size][/quote]

{‘lo': snetio(bytes_sent=1064059797, bytes_recv=1064059797, packets_sent=6473544, packets_recv=6473544, errin=0, errout=0, dropin=0, dropout=0), ‘sit0′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth3′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth2′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth1′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth0′: snetio(bytes_sent=97313244366, bytes_recv=629446229973, packets_sent=862937674, packets_recv=887781757, errin=0, errout=0, dropin=0, dropout=0)}
5.其他一些系统信息
     除了前面介绍的几个获取系统的基本信息的方法,psutil模块还支持获取用户登录、开机时间信息
>>> psutil.users()    #使用psutil.users方法获取当前登陆用户的信息

[suser(name=’root’, terminal=’pts/0′, host=’111.206.162.94′, started=1417013248.0)]

[quote]>> psutil.boot_time() #使用psutil.boot_time方法获取开机时间,默认以linux时间戳返回[/quote]

1415455455.0

[quote]>> import datetime [size=16]#导入datetime模块,格式化时间戳,转换成自然时间格式[/size][/quote]

[quote]>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime(“%Y-%M-%d %H:%M:%S”)[/quote]

‘2014-04-08 22:04:15′


系统进程管理方法


 
    获取当前系统的进程信息,可以让运维得知当前应用程序的运行状态,包括进程的启动时间,查看或设置CPU亲和度,内存使用率,IO信息,socket链接,线程数等。这些信息可以呈现出指定进程是否存活,资源利用情况,为开发人员的代码优化,问题定位提供了很好的数据参考。
 
 1.进程信息
    psutil模块在获取进程信息方面也提供了很好的支持,包括使用psutil.pids()方法获取所有进程PID,使用psutil.Process()方法获取单个进程的名称、路径、状态、系统资源利用率等信息。
>>> psutil.pids()  #获取所有进程的PID

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 105, 116, 117, 118, 119 …… ]

[quote]>> p = psutil.Process(5926) #实例化一个Process对象,参数为一个进程PID[/quote]

[quote]>> p.name() #进程名[/quote]

‘httpd’

[quote]>> p.exe() #进程bin路径[/quote]

‘/usr/local/apache2/bin/httpd’

[quote]>> p.cwd() #进程工作绝对路径目录[/quote]

‘/data/www/crh/monitor’

[quote]>> p.status() #进程状态[/quote]

‘sleeping’

[quote]>> p.create_time() #进程创建时间,时间戳格式[/quote]

1417019136.6400001

[quote]>> p.uids() #进程uid信息[/quote]

puids(real=2, effective=2, saved=2)

[quote]>> p.gids() #进程gid信息[/quote]

pgids(real=2, effective=2, saved=2)

[quote]>> p.cpu_times() # 进程cpu时间信息[/quote]

pcputimes(user=0.68000000000000005, system=0.13)

[quote]>> p.memory_info() #进程内存利用率[/quote]

pmem(rss=9306112, vms=147357696)

[quote]>> p.io_counters() # 进程io信息,包括读写io数以及字节数[/quote]

pio(read_count=8390, write_count=1282, read_bytes=0, write_bytes=311296)

[quote]>> p.connections() #返回打开进程socket的namedutples列表[/quote]

[pconn(fd=3, family=10, type=1, laddr=(‘::’, 8001), raddr=(), status=’LISTEN’)]

[quote]>> p.num_threads() #进程开启线程数[/quote]

1
2.popen类的使用
    psutil提供的popen类的作用是获取用户启动应用程序的信息,以便跟踪程序进程的允许状态。
>>> import psutil

[quote]>> from subprocess import PIPE[/quote]

[size=16]通过psutil的Popen方法启动应用程序,可以跟着应用程序的相关信息[/size]

[quote]>> p = psutil.Popen([“/usr/bin/python”, “-c”, “print (‘hello’)”], stdout=PIPE)[/quote]

[quote]>> p.name()[/quote]

‘python’

[quote]>> p.username()[/quote]

‘root’

[quote]>> p.communicate()[/quote]

(‘hello\n’, None)

[quote]>> p.cpu_times()[/quote]

pcputimes(user=0.02, system=0.060000000000000001)
 psutile更多方法参考:
https://github.com/giampaolo/psutil

模块说明官网:http://pythonhosted.org/psutil/


收起阅读 »