Quantcast
Channel: linux运维小站–linux系统架构_服务器运维_Linux运维工程师工作手札
Viewing all 130 articles
Browse latest View live

OPENSSL生成 NGINX CSR(证书签名申请)

$
0
0

在开始申请 SSL 之前,您必须从自己的服务器生成一个证书签名申请(Certificate Signing Request,CSR)。当您生成 CSR 后,剪切/复制该 CSR,然后将其粘贴到 SSL 证书申请页面的“CSR”字段中即可。

要生成 NGINX CSR

  1. 通过 SSH 连接至您的服务器。
  2. 运行以下命令:
    openssl req -new -newkey rsa:2048 -nodes -keyout 您的域名.key -out 您的域名.csr

    用您保护的域名替换您的域名。 例如,如果您的域名是 ido3.com,您可以键入 ido3.key 和 ido3.csr

  3. 输入申请的信息:
    字段 输入的内容
    通用名称 您想要保护的完全合格的域名,或 URL。
    如果您申请通配证书,在您想要通配的通用名称左侧添加一个星号 (*),例如*.coolexample.com
    组织 您企业的法定注册名称。 如果以个人身份注册,则输入证书申请者的姓名。
    组织单位 如适用,请输入营业名称 (Doing Business As, DBA)。
    城市或地区 您的组织注册/所在的城市名称。 不要缩写。
    州或省 您的组织所在的州或省的名称。 不要缩写。
    国家 您的组织合法注册所在国家的国家代码(按照国际标准化组织 (ISO) 的双字母格式)。
    密码 可选): SSL 的密码。 如果您将此字段留空,则 SSL 无密码,会让您暴露于其他风险中。
  4. 在文本编辑器中打开 CSR,然后复制所有文本。
  5. 将完整的 CSR 粘贴到您账户的 SSL 申请区域。

Safari不能认证GoDaddy SSL Certificates问题

$
0
0

购买证书,搭建https服务器:
证书是在godaddy购买,购买细节流程不在详述,最终购买的是通配符的证书 Standard Wildcard SSL,如*.domain.com,支持信用卡和支付宝,时价是1892元/年,业务使用比较急,先自掏腰包,走的支付宝付款。

购买完成,下载解压后,目录中有两个文件,一个是证书,另一个gd_bundle-g2-g1.crt,现在不知这个是干啥的。

马上配置nginx

1
2
3
ssl on;
ssl_certificate /ssl_location/yourdomain.com.crt;
ssl_certificate_key /ssl_location/yourdomain.com.key;

配好后,使用firefox ie chrome浏览器测试,一切ok。
但是让研发同学测试时,Safari还是This certificate was signed by an unknown authority.通过查看Safari的证书厂商,发现里面没有godaddy。推测是证书链断了。
google之,确实是证书链断了,需要把gd_bundle-g2-g1.crt和自己的证书保存为一个文件,供游览器向上爬证书链。方法如下:
cat yourdomain.com.crt gd_bundle-g2.crt > yourdomain.com_combined.crt
重新配置nginx

1
2
3
ssl on;
ssl_certificate /ssl_location/yourdomain.com_combined.crt;
ssl_certificate_key /ssl_location/yourdomain.com.key;

之后再测试,测试通过。

解决过程中也找到了apache的配置方法,如下,apache支持证书链bundle文件

1
2
3
4
SSLEngine On
SSLCertificateFile /ssl_location/yourdomain.com.crt
SSLCertificateKeyFile /ssl_location/yourdomain.com.key
SSLCertificateChainFile /ssl_location/gd_bundle.crt

深坑,请大家注意,此问题影响线app正常打开,差点没被领导骂死。

ImageMagick高危命令执行漏洞(CVE-2016-3714)

$
0
0
漏洞描述:
ImageMagick官方,目前程序存在一处远程命令执行漏洞(CVE-2016-3714),当其处理的上传图片带有攻击代码时,可远程实现远程命令执行,进而可能控制服务器,此漏洞被命名为ImageTragick。ImageMagick是一款开源图片处理库,支持PHP、Ruby、NodeJS和Python等多种语言,使用非常广泛。包括PHP imagick、Ruby rmagick和paperclip以及NodeJS imagemagick等多个图片处理插件都依赖它运行。可能的影响范围包括各类流行的内容管理系统(CMS)。
影响影响范围:
 ImageMagick <= 6.9.3-9
1、调用ImageMagick的库实现图片处理和渲染的应用。
ImageMagick 为多种语言提供了api,具体可参考http://www.imagemagick.org/script/api.php
2、很多流行的内容管理系统(CMS)使用了ImageMagick ,例如 WordPress 的图片处理插件已被证实存在远程命令执行的漏洞(Author 及以上权限用户执行)。其他例如MediaWiki、phpBB和vBulletin 使用了ImageMagick 库生成缩略图,还有一些程序如LyX使用ImageMagick转换图片格式。以上应用可能受到此漏洞影响。
3、如果通过shell 中的convert 命令实现一些图片处理功能,也会受到此漏洞影响。
漏洞等级:
高危
漏洞验证方法:
若系统中安装使用了ImageMagick,本地执行如下命令:
convert 'https://example.com"|ls "-la' out.png
若ls -la 命令成功执行,说明存在漏洞。未执行ls 命令,并报错,说明不受影响。
修复建议(临时):
1、由于远程命令执行时,命令代码是包含在图片中上传的,所以在图片上传时需要对图片内容进行检验。
2、Linux临时防护方案 :编辑 /etc/ImageMagick/policy.xml ,在 之间增加以下几行
<policy domain="coder" rights="none" pattern="EPHEMERAL" />
<policy domain="coder" rights="none" pattern="URL" />
<policy domain="coder" rights="none" pattern="HTTPS" />
<policy domain="coder" rights="none" pattern="MVG" />
<policy domain="coder" rights="none" pattern="MSL" />
3、在官网下载最新的安装包并在本地安装。(http://www.imagemagick.org/script/binary-releases.php

Install from Unix Source

ImageMagick builds on a variety of Unix and Unix-like operating systems including Linux, Solaris, FreeBSD, Mac OS X, and others. A compiler is required and fortunately almost all modern Unix systems have one. Download ImageMagick.tar.gz from www.imagemagick.org or a mirrors and verify its message digest.

Unpack the distribution with this command:

tar xvzf ImageMagick.tar.gz

Next configure and compile ImageMagick:

cd ImageMagick-7.0.1
 ./configure
make
make install

nginx 1.10启用http2

$
0
0

nginx下载:wget http://nginx.org/download/nginx-1.10.0.tar.gz

openssl下:wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz

前提:已购买ssl证书或者已申请免费ssl证书,本实例中只是对nginx做了升级操作,不是全新安装

步骤:

cd /data/soft
wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz
tar zxvf openssl-1.0.2g.tar.gz
wget http://nginx.org/download/nginx-1.10.0.tar.gz
tar zxvf nginx-1.10.0.tar.gz
cd nginx-1.10.0
./configure --user=nobody --group=nobody --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-openssl=../openssl-1.0.2g --with-http_v2_module --add-module=../nginx-http-concat
make -j2

效果:

nginx 1.10启用http2

nginx启用http2

nginx 1.10启用http2

nginx支持http2配置文件

server {
listen 443 ssl http2 default_server;
server_name www.olinux.org.cn;
ssl on;
ssl_certificate /data/htdocs/olinux/olinux.org.cn.crt;
ssl_certificate_key /data/htdocs/olinux/olinux.org.cn.key;
#缓存连接凭据
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:5m;
#禁止不安全的 SSL 协议,使用安全协议
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
#禁止已经不安全的加密算法
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
#缓解 BEAST 攻击
ssl_prefer_server_ciphers on;
#启用HSTS
add_header Strict-Transport-Security "max-age=63072000; preload";

dnsmasq安装与配置-搭建本地干净快捷无广告DNS服务器

$
0
0

dnsmasq简介
dnsmasq是一款小巧且方便地用于配置DNS服务器和DHCP服务器的工具,适用于小型网络,它提供了DNS解析功能和可选择的DHCP功能。 dnsmasq可以解决小范围的dns查询问题,如果业务是跨机房、跨地区的话不建议使用dnsmasq做为dns解析服务器。
dnsmasq官网:http://www.thekelleys.org.uk/dnsmasq/doc.html
dnsmasq下载地址:http://www.thekelleys.org.uk/dnsmasq/
默认的情况下,我们平时上网用的本地DNS服务器都是使用电信或者联通的,但是这样也导致了不少的问题,首当其冲的就是上网时经常莫名地弹出广告,或者莫名的流量被消耗掉导致网速变慢。其次是部分网站域名不能正常被解析,莫名其妙地打不开,或者时好时坏。
如果碰上不稳定的本地DNS,还可能经常出现无法解析的情况。除了要避免“坏”的DNS的影响,我们还可以利用DNS做些“好”事,例如管理局域网的DNS、给手机App Store加速、纠正错误的DNS解析记录、保证上网更加安全、去掉网页讨厌的广告等等。
这时候搭建一个属于自己的本地DNS服务器就十分必要了,本篇文章就来分享一下Dnsmasq安装与配置方法,利用Dnsmasq来搭建一个属于自己的本地DNS服务器,享受更干净无污染、更智能快速和没有广告干扰的DNS解析服务。
选择好的本地DNS可以让我们上网更快更舒心,而对于网站,选择一个好的DNS域名解析服务也是十分重要
二、安装dnsmasq
dnsmasq的安装我们可以源码安装,也可以直接通过yum和apt-get方式进行安装,下面对此分别介绍下。
2.1 源码安装
源码安装dnsmasq,从dnsmasq官网下载,如下:
wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.75.tar.gz
yum -y install gcc
tar -xf dnsmasq-2.75.tar.gz
cd dnsmasq-2.75
make install
安装完毕后,查看下dnsmasq的版本。如下:
dnsmasq -v
2.2 yum和apt-get方式安装
yum方式安装,如下:
yum -y install dnsmasq
dnsmasq -v
apt-get方式安装,如下:
sudo apt-get -y install dnsmasq
dnsmasq -v
dnsmasq安装完毕后,现在我们来配置dnsmasq。
三、dnsmasq配置
dnsmasq配置选项比较多,我们可以根据实际需求来进行配置。下面介绍下,平时最常使用的配置方法。
vim /etc/dnsmasq.conf
resolv-file=/etc/resolv.dnsmasq.conf
strict-order
listen-address=192.168.1.24
address=/olinux.org.cn/192.168.1.24
server=223.5.5.5
bogus-nxdomain=223.5.5.5

dnsmasq安装与配置-搭建本地干净快捷无广告DNS服务器
resolve-file定义dnsmasq从哪里获取上游DNS服务器的地址, 默认是从/etc/resolv.conf获取。
在此我们定义的是从/etc/resolv.dnsmasq.conf文件中获得。
strict-order表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。
listen-address定义dnsmasq监听的地址,默认是监控本机的所有网卡上。
如果想让局域网内的其他机器使用dnsmasq解析域名的话,需要添加本机的IP地址。
address自定义域名解析的IP地址,在此已olinux.org.cn这个域名为例。注意dnsmasq是支持泛域名解析的,以上配置就是一个典型的泛域名解析实例。
address也可以过滤某些网站,比如如果不想让客户端解析youk.com这个域名的话,我们这个把该域名解析到一台不存在的服务器上或者解析到127.0.0.1这个地址。如下:
address=/olinux.org.cn/127.0.0.1
为了防止DNS污染,我们使用bogus-nxdomain定义DNS解析的服务器。
注意:如果在阿里云服务器上配置dnsmasq,一定要启用此项。
server这行告诉dnsmasq使用DNS服务器进行解析
我们也可以通过server对不通的网站使用不通的DNS服务器进行解析。如下:
server=/google.com/8.8.8.8
以上表示对于google的服务,使用谷歌的DNS解析。
以上配置完毕后,需要重启dnsmasq服务,重启完毕后局域网中的其他机器,就可以通过该DNS服务器解析公网的域名。
四、客户端测试
现在我们切换到客户端,修改客户端的dns配置文件。在此已centos6为例进行讲解,如下:
cat /etc/resolv.conf
nslookup olinux.org.cn
nslookup wwww.olinux.org.cn
nslookup www.baidu.com
通过上图,我们可以很明显的看出www.olinux.org.cn、olinux.org.cn都解析到了192.168.1.24这台服务器上,而www.baidu.com已经解析到公网的IP地址。
五、Dnsmasq使用
1、本地DNS。将Dnsmasq作为本地DNS服务器使用,直接修改电脑的本地DNS的IP地址即可。
Dnsmasq本地DNS服务器使用
2、应对ISP的DNS劫持。输入一个不存在的域名,正常的情况下浏览器是显示无法连接,DNS劫持会跳转到一个广告页面。先随便nslookup 一个不存在的域名,看看ISP商劫持的IP地址。
Dnsmasq检查DNS劫持
3、接着编辑/etc/dnsmasq.conf文件,将:bogus-nxdomain=123.123.123.123 加入进去,后面的IP是刚刚查询到的DNS劫持IP地址。
4、重启dnsmasq,再尝试打开不存在的域名,这时浏览器就会显示正常的无法连接页面了。
Dnsmasq无法显示网页
5、智能DNS加快解析速度。打开/etc/dnsmasq.conf文件,server=后面可以添加指定的DNS,例如国内外不同的网站使用不同的DNS。
#国内指定DNS
server=/cn/114.114.114.114
server=/taobao.com/114.114.114.114
server=/taobaocdn.com/114.114.114.114
#国外指定DNS
server=/google.com/223.5.5.5
6、server=/cn/表示所有的cn域名都使用114这个公共DNS,server=/taobao.com/表示所有的taobao.com域名都用114,223.5.5.5 是阿里云的公共DNS,你可以换成其它的。
7、屏蔽网页广告。将指广告的URL指定127这个IP,就可以将网页上讨厌的广告给去掉了。
address=/ad.youku.com/127.0.0.1
address=/ad.iqiyi.com/127.0.0.1
8、指定域名解析到特定的IP上。这个功能可以让你控制一些网站的访问,非法的DNS就经常把一些正规的网站解析到不正确IP上。
address=/olinux.org.cn/123.123.123.123
9、内网DNS。首先将局域网中的所有的设备的本地DNS设置为已经安装Dnsmasq的服务器IP地址。然后修改已经安装Dnsmasq的服务器Hosts文件:/etc/hosts,指定域名到特定的IP中。
10、例如想让局域网中的所有用户访问www.olinux.org.cn时跳转到192.168.0.2,添加:192.168.0.2 www.olinux.org.cn在Hosts文件中既可,整个过程也可以说是“DNS劫持”。
五、Dnsmasq小结
1、Dnsmasq作为本地DNS服务器安装方便,操作简单,改动的地方也不是很多,如果用国内的VPS来搭建本地DNS,响应的速度会更快,也更稳定。
2、Dnsmasq的功能强大,反DNS劫持、加快解析速度、屏蔽广告、控制内网DNS、强制域名跳转到特定IP上等这些功能在我们的实际的生活中都是很有用的。

Centos下vsftpd提示:连接超时,读取目录列表失败

$
0
0

vsftp开启防火墙后发现ftp连接不上提示:错误: 连接超时 错误: 读取目录列表失败
解决方法,本文以centos系统为案例,希望能帮到遇到同样问题的朋友。
错误提示如下:
响应: 227 Entering Passive Mode (192,168,10,16,221,111).
命令: LIST
错误: 连接超时
错误: 读取目录列表失败
后来发现在防火墙中规则并没有设置动态端口的规则和ftp pasv模式
在ftp pasv模式时也要在vsftp配置文件加入指定端口参数:
1.打开:vi /etc/vsftpd/vsftpd.conf在最后面加入如下:
pasv_min_port=5555
pasv_max_port=5566
2.再在iptable防火墙规则中加入如下规则:
打开:vi /etc/sysconfig/iptables 加入如下:
-A INPUT -m state –state NEW -m tcp -p tcp –dport 5555:5566 -j ACCEPT
3.最后一步就是重启vsftp和iptables服务了。
键入:service vsftpd restart重启vsftp服务
键入:service iptables restart重启iptables服务
重启完这两个服务后我们再重新测试看看是否可以连接了

 

 

SELinux状态查看及如何关闭SELinux

$
0
0

查看SELinux状态
1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态
SELinux status: enabled
2、getenforce ##也可以用这个命令检查
关闭SELinux
1、临时关闭(不用重启机器):
setenforce 0 ##设置SELinux 成为permissive模式
setenforce 1 ##设置SELinux 成为enforcing模式
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器

Centos 6.8下安装kvm虚拟化环境

$
0
0

系统版本:centos 6.8

加载kvm模块:modprobe kvm_intel

关闭SElinux :setenforce 0

安装kvm虚拟化组件:yum install kvm libvirt python-virtinst qemu-kvm

启动libvirtd :/etc/init.d/libvirtd start并加入开机启动chkconfig libvirtd on

ifcfg-br0

[root@localhost network-scripts]# cat ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=59.xx.xx.xx
NETMASK=255.255.255.128
GATEWAY=59.xx.xx.xx
DNS1=202.101.224.68
IPV6INIT=no
USERCTL=no
DELAY=0

ifcfg-em1

[root@localhost network-scripts]# cat ifcfg-em1
DEVICE=em1
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=yes
IPV6INIT=no
USERCTL=no

关闭networkmanager服务并重启网络服务:service network restart

查看网桥br0

[root@localhost network-scripts]# ifconfig br0
br0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx
inet addr:59.xx.xx.xx Bcast:59.xx.xx.xx Mask:255.255.255.128
inet6 addr: fe80::92b1:1cff:fe4b:f625/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:593343 errors:0 dropped:0 overruns:0 frame:0
TX packets:278804 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:591056831 (563.6 MiB) TX bytes:45965030 (43.8 MiB)

查看网桥:brctl show

[root@localhost network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.90b11c4bf625 no em1
vnet0
vnet1
vnet2
virbr0 8000.525400891f7f yes virbr0-nic

 


kvm虚拟机日常管理与配置

$
0
0

KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理。
1. 查看KVM虚拟机配置文件及运行状态
(1) KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/
autostart目录是配置kvm虚拟机开机自启动目录。
(2) virsh命令帮助
# virsh --help
或直接virsh命令和,再执行子命令。如下所示。
[root@node1 ~]# virsh
欢迎使用 virsh,虚拟化的交互式终端。
输入:'help' 来获得命令的帮助信息
'quit' 退出
virsh # help
……
(3) 查看kvm虚拟机状态
# virsh list --all
2. KVM虚拟机开机
# virsh start centos6
3. KVM虚拟机关机或断电
(1) 关机
默认情况下virsh工具不能对linux虚拟机进行关机操作,linux操作系统需要开启与启动acpid服务。在安装KVM linux虚拟机必须配置此服务。
# chkconfig acpid on
# service acpid restart
virsh关机
# virsh shutdown centos6
(2) 强制关闭电源
# virsh destroy win03
4. 通过配置文件启动虚拟机
# virsh create /etc/libvirt/qemu/win03.xml
5. 配置开机自启动虚拟机
# virsh autostart centos6
autostart目录是kvm虚拟机开机自启动目录,可以看到该目录中有KVM配置文件链接。
6. 导出KVM虚拟机配置文件
# virsh dumpxml win03 > /etc/libvirt/qemu/wintest02.xml
KVM虚拟机配置文件可以通过这种方式进行备份。
7. 添加与删除KVM虚拟机
(1) 删除kvm虚拟机
# virsh undefine win03
说明:该命令只是删除win03的配置文件,并不删除虚拟磁盘文件。如下图所示。
(2) 重新定义虚拟机配置文件
通过导出备份的配置文件恢复原KVM虚拟机的定义,并重新定义虚拟机。
# mv /etc/libvirt/qemu/wintest02.xml /etc/libvirt/qemu/win03.xml
# virsh define /etc/libvirt/qemu/win03.xml
8. 编辑KVM虚拟机配置文件
# virsh edit win03
virsh edit将调用vi命令编辑/etc/libvirt/qemu/win03.xml配置文件。也可以直接通过vi命令进行编辑,修改,保存。
可以但不建议直接通过vi编辑。
9. virsh console 控制台管理linux虚拟机
配置virsh console见下文
kvm虚拟化学习笔记(六)之kvm虚拟机控制台登录配置
# virsh console centos6
10. 其它virsh命令
(1) 挂起服务器
# virsh suspend centos6
(2) 恢复服务器
# virsh resume centos6
virsh命令丰富。可以执行各种维护任务,本文只是从维护与管理的角度例举了常用的命令,为该命令的使用提供一个思路。

Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization.解决办法

$
0
0

在KVM中克隆出新的CentOS虚拟机时,出现如下问题:
# service network restart
Shutting down loopback insterface: [ OK ]
Bringing up loopback insterface: [ OK ]
Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization. [FAILED]
用ifconfig查看发现缺少eth0,只有lo;用ifconfig -a查看发现多出了eth1的信息。
解决办法1:
# mv /etc/sysconfig/network-scripts/ifcfg-eth0 /etcsysconfig/network-scripts/ifcfg-eth1
将eth0的mac地址改为eth1的mac地址,同时改变其DEVICE名称为eth1,再重启网络即可。
解决办法2:
# rm -rf /etc/udev/rules.d/70-persistent-net.rules
# reboot
总之,只要保证/etc/sysconfig/network-scripts/ifcfg-eth0 与/etc/udev/rules.d/70-persistent-net.rules的信息一致即可,即网卡地址与网卡编号一致,这样service network restart 就可以配置成功。

免费企业级Iaas新品OVM开源虚拟化管理平台功能特性揭秘

$
0
0

OVM 全称Open Virtual Manager 开源虚拟化管理平台。作为完全免费、公益的一款产品,不仅拥有商业软件同样的稳定性、易用性、高性能,而且还拥有开源软件一样的开放性、可扩展性,我们对外开放所有的RestAPI接口,供第三方集成自己的软件到OVM平台,我们致力把OVM打造成IaaS领域“新国货”!欢迎所有的合作伙伴基于OVM开放的接口实现与OVM平台的集成,让更多的企业用到你们的软件,也欢迎各位业界大牛、研发攻城狮加入我们OVM的大家庭。

OVM作为一款真正意义上的“新国货”Iaas新兵,从去年筹备开始就吸引了技术圈相当多朋友的关注,大家纷纷表示对OVM非常感兴趣。经过近一年的发展,我们推出了OVM的第一个Beta版本,Beta版推出后迅速的吸引了一批技术爱好者要求加入内测团队,希望第一时间来一睹真颜。究竟OVM有什么魔力能够引起大家的关注呢?我们将通过这篇文章来向各位传递下OVM的产品理念、架构设计、功能规划、社区发展。

OVM产品理念

我们在筹备OVM的时候,市场上已经有不少类似的开源产品,当时就有朋友提出疑问说:既然市场上已经有了这么多现成的开源产品,为什么你们还要从零开始做一个OVM出来呢?

那我在这里就说下为什么我们要从零开始做OVM:

  • 在做OVM之前,我们对比了目前市场上一些比较成熟的开源产品,发现这些产品大多是有国外开发者主导的社区产品,既然这些开源产品是国外开发者主导的,那么这些产品里面就肯定没有太多中国元素,国内的企业要想使用这些产品,首页要对其中文化,其二还要花费相当多的时间来苦读英文文档来学习这些产品。
  • 另外我们发现目前市场上的这类开源产品更加偏向于拥有大规模数据中心的企业采用,中小企业用起来有些大材小用了。一般中小企业拥有的数据中心规模并不大,运维团队一般也比较小,对于Openstack、Cloudstack这些产品的确不适合这类中小企业使用。
  • 另外还有一个严重的问题就是,在使用开源产品过程中,如果遇到Bug或者重大安全隐患,中小企业并不具备解决问题的能力,那么对于他们来说只能等待开源社区推出Bug补丁包。

基于以上的原因,我们决定筹备一个团队开发OVM产品OVM定位为一个企业级的虚拟化管理平台,完全基于国内企业特点开发,更多的关注中小企业用户的产品需求,OVM的每个版本均经过严格的内测——OVM核心测试团队测试——市场公测——正式版发布,我们不追求产品快速的迭代,只希望开发的每个功能稳定并且易用。OVM想要带给用户的是一个稳定、简单、易用、易扩展的企业级Iaas产品。

OVM架构设计

OVM从设计之初就决定要做一款完全符合国人使用习惯和特点的“新国货“Iaas产品。OVM产品架构的设计严格按照商业产品架构的高标准要求,把产品的稳定性、易用性、可扩展性,以及产品的高性能放在第一位,单单OVM架构的设计就花费了我们团队将近半年的时间,之所以我们如此重视OVM的架构设计,是因为我们觉得架构就是一个产品的灵魂所在,决定着产品日后的发展。

OVM采用分布式、松耦合的模块化插件架构,分布式特点可以使管理平台规避单点故障,达到业务持续高可用,松耦合的模块化特点让产品在后期的扩展性方面不受任何限制,使其向下可以兼容数据中心所有硬件(通过OVM标准的Rest API接口),向上可以实现插件式的工作流引擎、计费引擎、报表引擎、桌面云引擎和自动化运维引擎。

OVM产品目前由三大组件、七大模块组成。其中三大组件分别为OVMUI、OVMAPI和OVM数据中心组件,OVMUI提供WEB自服务界面,OVMAPI负责UI和数据中心组件之间的交互,OVM数据中心组件分别提供不同的功能。

七大模块分别负责不同的功能实现,和三大组件之间分别交互。下图所示是OVM的总体架构图,体现了OVM三大组件与七大模块之间相辅相成的关系,由于每个模块各司其职,即使单个模块出现了故障也只是影响到该模块功能的使用,而不会影响平台整体使用。

免费企业级Iaas新品OVM开源虚拟化管理平台功能特性揭秘

大家如果对比过会发现每个平台都会宣称自己的易用性、稳定性、可扩展性和高效,作为一款Iaas基础设施的软件,我们也不例外。但是具体到产品是否真正的做到了这四点,我想也只有用户最具有发言权,伟人毛主席说过“只有实践才是检验真理的唯一标准”,我们OVM产品发布之后,更想听听用户使用后的反馈,根据用户的反馈不断的优化产品,不断的促使产品向前发展。

下面我简单介绍下OVM在这四点上所做的努力,也欢迎各位看后为我们提供更多宝贵的建议。

易用性

OVM的易用性首先体现在安装部署方面。传统的开源软件安装部署相信对于运维人员来说不会陌生,他们大多只会提供安装包和简单的安装文档,而这些安装过程大多会涉及到数据库、redis、rabbitmq、ruby等环境的配置,这些环境的配置也要求运维人员必须先去熟悉这些相关软件的安装部署,毕竟一步配置错误就会导致整体的安装部署失败,整个安装部署少则也需要2-3天时间才可搞定,多则需要1-2周,复杂的安装部署过程让运维人员疲惫不堪。

OVM安装部署全部(包括管理平台和计算节点)采用一键式的ISO安装部署,整个安装过程就像是在安装一个Centos操作系统一样的简单,只用花费10-20分钟的过程就可以完成OVM的安装部署,极大的方便了运维人员,为他们省去了很多的宝贵时间。因为我们觉得真正易用的软件不会在安装部署上让运维人员为难,OVM要做的就是即使是一个刚进入运维行业的新人,通过OVM提供的iso镜像也可在1小时内完成整个产品的安装部署。

OVM的易用性其次还体现在升级方面。对于一个产品来说,迭代升级是必然的事情,因为一个产品总是要向前发展的,OVM在设计之初就在考虑如何可以让用户不费吹灰之力就可以升级使用中的版本到最新版本。经过我们OVM团队多次的讨论,最终将升级与UI无缝结合,用户只用点击WEB管理平台中的一键升级按钮就可轻松实现版本的快速升级,整个升级过程用户几乎感知不到,丝毫不会影响到用户业务的运行。

稳定性、可扩展性

OVM从架构设计之初就充分考虑到产品的稳定性,把产品的稳定放在第一位。因为作为一款Iaas虚拟化管理软件,其本身不仅仅是一个软件,而是连接用户数据中心的中枢(包括物理机、存储、网络、防火墙、灾备等)。在架构设计上,OVM分别参考了同行业开源软件、商业软件的产品架构,作为一款Iaas软件首先要保证产品无单点故障,即管理平台高可用;其次支持分布式部署,将不可预估因素造成的损失降到最小。

因此OVM架构设计之一就是分布式、插件式,分布式和插件式的特点可以允许用户将不同的模块和服务,既可以部署在同一台Server上面,也可以将其分开部署在多台Server上,大大了提高了部署的灵活性,同时也可将单点故障的风险降到最小。另外OVM也引入了Zookeeper、Pacemaker等软件来为OVM提供高可用,避免单点故障的发生。此外,OVM的每个版本均经过严格的内测——OVM核心测试团队测试——市场公测——正式版发布,每一个环节我们都严把质量关,将稳定性自始至终贯穿到OVM的每个环节。

分布式和插件式的特点也为OVM的扩展提供了无限大的可能。模块化的插件式架构允许用户根据自己的需求来定制自己所需的模块,毕竟不同行业的用户还是存在不少差异的,即使是相同行业不同企业的用户也是会有所差距的,此时每个用户都可能会有自己的不同需求,获益于OVM插件式的架构,用户只需要根据自己的需求增加不同的模块来实现自己所需的功能就可以,可谓是真正的无限扩展,另外OVM完善的API可以助力用户、商业软件生产商集成第三方软件到OVM平台。

比如IDC运营商想要的是一个公有云门户对外提供有偿服务,那么就可以根据自己的需要增加一个公有云模块到OVM平台,一般企业用户想要的是一个私有云,那么可以直接使用OVM轻松构建自己的私有云平台,而政府、事业单位、以及大规模企业则想要的是一个混合云环境,因为这类单位既有自己内部的高保密业务,也有对外提供服务的公有云业务,那么此类单位则可以使用OVM的API借口对接阿里云、腾讯云、亚马逊云、Openstack等,实现自己的混合办公需求。

高效

高效是检验一个平台设计是否优秀的关键。大家都希望管理平台能为自己的工作带来高效率,这也是选择使用一个平台的初衷,OVM设计之初就将平台的高效性视为关键,整体采用全异步、无等待、无锁架构来确保平台的每个任务都是独立执行,即使同时有存储任务、网络任务、虚拟机任务等都在执行也互不干扰,从此避免了多任务同时执行带来的阻塞问题。

另外OVM全异步架构也可以为一些批量任务的执行带来高效率,比如虚拟机的批量创建、监控数据的采集、节点状态的检测等,这些任务都可以为用户节省大量的时间,全异步架构说简单点就是各干各的事情,极大的提高了完成工作的效率。OVM无锁、无等待架构既保证了高并发,也兼顾了整体的性能。

功能规划

功能规划上,OVM第一版本功能为我们团队内定,实现了Iaas基本功能,可满足政府、企事业单位一般的虚拟化需求,同时我们在第一版本也实现了一些高级功能,比如:虚拟机在线迁移、HA、负载均衡、快照、PCI设备直通等。作为第一款真正意义上的国产Iaas软件,我们视用户为我们团队发展的动力,从下一版本开始,OVM的大部分功能将会来源于社区需求+投票来决定,我们把产品的主动权交给用户,让用户来决定和推动OVM产品的不断发展,OVM将会是第一款真正服务于用户的国产Iaas平台。

下面是OVM第一版功能列表:

支持资源池
导入宿主机原有VM
在管理平台开启、禁用宿主机
虚拟机生命周期管理(包括开机、关机、重启、暂停、恢复、删除、编辑)
多种虚拟机部署方式(包括从iso镜像、模板)
noVNC控制台
虚拟机在线迁移
将虚拟机转换模板
支持虚拟机从CD ROM、Disk启动
虚拟机CPU、内存监控
支持NFS存储
支持存储的分层管理
存储负载均衡(根据设置的利用率阀值在存储之间自动迁移虚拟机存储)
支持无限数量的VLAN创建和管理
支持标准虚拟交换机
以模板为基础的配置及部署
模板分类
支持iso和模板上传
HA
虚拟机部署前负载均衡策略
支持存储驱动类型、网络驱动类型的选择(Virtio驱动等)
完整的RestFul API接口
数据中心、虚拟数据中心资源监控
支持自定义权限管理
根据不同用户权限显示不同的自服务界面

社区发展

OVM联合KVM云技术社区维护的目前已达2万规模的“KVM虚拟化与实践”微信订阅号、微信群、QQ群,一起成立了中国最大的虚拟化与云计算交流社区——OVM社区。

OVM管理平台作为OVM社区的产物,也将会不断的推动OVM社区壮大和发展,我们致力于打造中国最专业的虚拟化与云计算交流与实践社区,一起分享自己的实践经验,交流虚拟化与云计算相关技术知识与学习心得,共同推动中国虚拟化与云计算事业向前发展。

KVM社区QQ群,99.99%纯技术交流气氛

QQ 2群:131961942,加入密码大写KVM

千人VMWare技术交流群494084329,加入密码小写vm

OpenNebula QQ群:495571573 加入密码Nebula

OpenStack开发纯技术群: 334605713 加入密码nova

Cloudstack纯技术交流群:515249455密码cs

桌面云行业讨论: 484979056 加入密码大写VDI

 

https://github.com/ovm-china/OVM

Ubuntu下安装pip的方法

$
0
0

安装pip的方法:

Install pip and virtualenv for Ubuntu 10.10 Maverick and newer

$ sudo apt-get install python-pip python-dev build-essential

$ sudo pip install --upgrade pip

$ sudo pip install --upgrade virtualenv

For older versions of Ubuntu Install Easy Install

$ sudo apt-get install python-setuptools python-dev build-essential

Install pip

$ sudo easy_install pip

Install virtualenv

$ sudo pip install --upgrade virtualenv

安装mysql拓展包可以:sudo pip install mysql-python

安装其他的包只要pip + 包的名字 就行了 很方便。而且安装完的mysqlib用起来没一点问题,

在windows下还要修改下源文件。写程序还是在linux下好啊。

安装mysql

apt-get install mysql-server

Centos 5下php-java-bridge扩展安装与配置

$
0
0

由于公司业务需要通过招商银行进行网上支付,但是由于PHP不能调用招行的Java校验码而导致无法进行下一步支付,所以就进行php-java-brige的安装。

系统环境

[root@app4 ~]# cat /etc/redhat-release
CentOS release 5.11 (Final)
[root@app4 ~]# /usr/local/webserver/php/bin/php -v
PHP 5.2.14 (cli) (built: Apr 16 2012 16:45:06)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
 with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
 with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
<a href="https://www.olinux.org.cn/tag/php-java-bridge" title="查看与 php-java-bridge 相关的文章"target="_blank">php-java-bridge</a>-5.4.4.2

php-java-bridge下载地址:http://netix.dl.sourceforge.net/project/php-java-bridge/RHEL_FC%20SecurityEnhancedLinux/php-java-bridge_5.4.4.2/php-java-bridge_5.4.4.2.tar.gz

php-java-brige是php众多拓展模块(功能)中的一个,安装此模块之后,PHP就能自动调用Java语言编写的文件了。

What is the PHP/Java Bridge?

The PHP/Java Bridge is an implementation of a streaming, XML-based network protocol, which can be used to connect a native script engine, for example PHP, Scheme or Python, with a Java virtual machine. It is up to 50 times faster than local RPC via SOAP, requires less resources on the web-server side. It is faster and more reliable than direct communication via the Java Native Interface, and it requires no additional components to invoke Java procedures from PHP or PHP procedures from Java.

Centos 5下php-java-bridge扩展安装与配置

J2EE back end clustering and Apache load balancing are supported as well as running PHP scripts within JSP, JSF or other frameworks.

The bridge uses "continuation passing" to invoke procedures/methods from each environment. Although this may be unusual, it is a fast and reliable mechanism to connect different script environments.

安装java

yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel -y

配置环境变量/etc/profile后面加入

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.101.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar

[root@app4 ~]# source /etc/profile
[root@app4 ~]# echo $JAVA_HOME
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.101.x86_64
安装php-java-bridge扩展

[root@app4 ~]#cd /data/soft/
[root@app4 soft]#tar zxvf php-java-bridge_5.4.4.2.tar.gz
[root@app4 soft]#cd php-java-bridge-5.4.4.2/
[root@app4 php-java-bridge-5.4.4.2]#/usr/local/webserver/php/bin/phpize
[root@app4 php-java-bridge-5.4.4.2]#./configure --with-java=$JAVA_HOME,$JAVA_HOME/jre --with-php-config=/usr/local/webserver/php/bin/php-config
[root@app4 php-java-bridge-5.4.4.2]#make
[root@app4 php-java-bridge-5.4.4.2]#make install

配置php-java-bridge
编辑php.ini在最后添加

java.java_home="/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.101.x86_64"
java.java="/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.101.x86_64/jre/bin/java"
java.log_file="/var/log/php-java-bridge.log"
java.classpath="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/JavaBridge.jar"
java.libpath="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
java.log_level="2"
extension="java.so"

保存重启php后运行phpinfo查看关于java bridge的扩展信息验证是否成功
安装碰到过的坑
make时提示/data/soft/php-java-bridge-5.5.4.1/init_cfg.h:44:39: note: in expansion of macro ‘EXT’
#define EXT_GLOBAL(fkt) EXT_EXPAND( , EXT, _, fkt)
^
/data/soft/php-java-bridge-5.5.4.1/java.c:302:3: note: in expansion of macro ‘EXT_GLOBAL’
EXT_GLOBAL(destroy_cfg) (EXT_GLOBAL(ini_set));
^
make: *** Error 1
解决办法:php版本过高,降低php版本至5.2.14
最初安装时就碰到这个坑,当初php版本为5.5.25,为了解决这个坑,java版本从1.6.0变更为1.7.0,php-java-bridge版本从php-java-bridge_6.2.1降为php-java-bridge_5.5.4.1再降php-java-bridge_5.5.2均未解决,最后降低php版本解决此问题
在启动Javabridge.jar的前提下,PHP才能自动调用Java接口,启动命令nohup java -jar /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/Javabridge.jar SERVLET:8080 3 JavaBridge.log &

Centos下Nagios 3.x upgrade to 4.x 升级

$
0
0

环境:Centos 5.x    Nagos:3.5.1

升级至4.1.1

nagios 4.1.1下载地址:https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.1.1.tar.gz#_ga=1.25904255.396335615.1468476262

准备工作完成,现在开撸

1、最重要的当然是备份好之前的版本安装目录了  tar czvf nagios_3.tar.gz /usr/local/nagios

2、备份完以后停掉nagios服务  /etc/init.d/nagios stop

3、下载安装naigos 4.1.1

[root@mail soft]#tar zxvf nagios-4.1.1.tar.gz
[root@mail soft]#cd nagios-4.1.1
[root@mail nagios-4.1.1]#./configure --with-command-group=nagios
[root@mail nagios-4.1.1]#make all
[root@mail nagios-4.1.1]#make install
[root@mail nagios-4.1.1]#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
[root@mail nagios-4.1.1]#/etc/init.d/nagios restart

重启nagios服务后通过访问web页面就可以看到显示新版本信息了

Centos下Nagios 3.x upgrade to 4.x 升级

nagios 3.x升级gc 4.x

 

有关ovm的29个问题解答及ovm产品经理对ovm的架构思考

$
0
0

第一部分分享内容《架构与技术分享》

首先非常感谢肖力、北极熊提供一个这么好的技术分享平台,能够和大家一起分享、讨论一些热门技术,也非常感谢主持人杨轩,一直忙前忙后的筹备本期分享,最后感谢各位听众对我分享的技术感兴趣,希望和大家一起探讨、学习、共同进步!

我是sam,目前在某公司负责基础设施架构做负责人,负责约1000台规模,最近正在迁移2000台vmware虚拟机到kvm平台上.

分享主题

1.企业为什么要虚拟化

2.OVM目标

3.OVM设计思路

 

1、企业为什么要虚拟化

使用虚拟化有什么好处,我结合自身单位几年运营,认为如下:

服务器整合

传统的服务器管理时代,服务器利用率不高,往往都是专机专用,一台服务器只安装一个应用,资源是严重的浪费;另外计算资源独立、资源无法共享也是传统服务器管理时代的一大弊端。随着互联网技术的快速发展,传统的管理模式已无法满足业务的快速发展。虚拟化可以在一台服务器上运行多个操作系统和应用,极大的提高了服务器的利用率,虚拟化也可以将所有资源池化,统一管理和分配资源,以此来降低公司的硬件和运维成本。

快速业务交付

现在的互联网时代,业务上线比的就是谁的速度快、反应快,这就对运维提出了更高的要求,必须保证业务可以快速上线、快速交付。虚拟化可以实现秒级交付虚拟机和容器,大大缩短了上线、交付时间,帮助公司业务抢占市场先机。

业务连续性

虚拟化提供的HA、在线迁移,可以帮助公司更好的应对硬件故障,做到业务零中断。

自动化运维

虚拟化提供的实时监控,以及经过封装的完善的对外接口,可以帮助公司更好的实现自动化运维。

 

2、OVM目标

OVM虚拟化的目标:是要实现混合虚拟化,做一个大一统的资源管理和交付平台

有关ovm的29个问题解答及ovm产品经理对ovm的架构思考

纵观虚拟化市场,现在当属开源的KVM和Docker最火,我们工作过去有vmware,现在大量使用kvm,未来一定会考虑docker,但现有市场上的产品要么架构太大,开发难度高,易用性不够强,要么就是单纯的虚拟化,类似vmware等,

新形式下,我们需要的产品要同时具备如下目标:

跨平台,支持KVM、Esxi和Docker容器

因为我们单位过去采用虚拟化技术混杂,上面又遗留很多虚拟机,这就要求我们新开发产品能够兼容不同hypervior,同时还能识别并管理原有hypervior上的虚拟机,能够识别并导入原数据库技术并不难,难的是导入后还能纳入新平台管理,这部分我们又研发了自动捕获技术,而不同混合虚拟化管理技术可以摆脱对底层Hypervisor的依赖,专心于资源的统一管理。

单独的用户自助服务门户

过去采用传统虚拟化时,解决了安装部署的麻烦,但资源的申请和扩容、准备资源和切割资源仍然没有变,还是要让我们做,占据了日常运维工作的大部分工作量,每天确实烦人,所以我们想而这部分工作是可以放给相关的部门Leader或者专员,来减少运维的工作量,所以我们希望新设计的OVM允许用户通过一个单独的Web门户来直接访问自己的资源(云主机、云硬盘、网络等),而且对自己的资源进行管理,而不需要知道资源的具体位置,同时用户的所有云主机都建立在高可用环境之上,也不必担心实际物理硬件故障引起服务瘫痪。

Opscode Chef自动化运维集成

实行自助服务后,有一个问题,就是软件不同版本部署不兼容,这就需要设计能够把操作系统、中间件、数据库、web能统一打包部署,减少自助用户哭天喊地甚至骂我们,我们通过对chef的集成,可以一键更新所有的虚拟机,在指定的虚拟机上安装指定的软件。有了chef工具,为虚拟机打补丁、安装软件,只需要几个简单的命令即可搞定。

可持续性

做运维不要故障处理办法是不行,而且还要自动化的,同时我们有vmware和kvm,就需要新平台能在esxi上(不要vcenter,要付钱的)和kvm同时实现ha功能

可运维性

一个平台再强大,技术再厉害,如果不可运维,那结果可想而知。因此我们希望OVM可以给用户带来一个稳定、可控、安全的生产环境

弹性伸缩

自助服务部门拿到资源后,通过对各项目资源的限额,以及对各虚拟机和容器性能指标的实时监控,可以实现弹性的资源伸缩,达到合理分配利用资源。

资源池化

将数据中心的计算、存储、网络资源全部池化,然后通过OVM虚拟化平台统一对外提供IaaS服务。

3、ovm设计思路

OVM架构选型一

我们觉得架构就是一个产品的灵魂所在,决定着产品日后的发展。

我们团队在产品选型初期,分别调研了目前比较热门的openstack,以及前几年的明星产品convirt、ovirt,这几个产品可谓是典型的代表。

Openstack偏重于公有云,架构设计的很不错,其分布式、插件式的模块化架构,可以有效避免单点故障的发生,从发布之初便备受推崇,但是其存在的问题也同样令人头疼目前使用Openstack的大多是一些有实力的IDC、大型的互联网公司在用。而对于一般的企业来说,没有强大的开发和维护团队,并不敢大规模的采用openstack,初期使用一段时间后我们放弃了OS。

而前几年的convirt,在当时也掀起了一股使用热潮,其简单化的使用体验,足以满足小企业的虚拟化需求,但是他的问题是架构采用了集中式的架构,而且对于上了规模之后,也会带来性能方面的瓶颈,除非是把数据库等一些组件松藕合,解决起来也比较麻烦,所以到了后期也是不温不火,官方也停止了社区的更新和维护。

OVM架构选型二

   通过对以上产品的优劣势分析,我们决定采用用分布式、松耦合的模块化插件架构,分布式使其可以规避单点故障,达到业务持续高可用,松耦合的模块化特点让产品在后期的扩展性方面不受任何限制,使其向下可以兼容数据中心所有硬件(通过OVM标准的Rest API接口),向上可以实现插件式的我们即将需要的工作流引擎、计费引擎、报表引擎、桌面云引擎和自动化运维引擎。

而目前阶段我们则专心于实现虚拟化的全部功能,发掘内部对虚拟化的需求,打造一款真正简单、易用、稳定、可运维的一款虚拟化管理软件,并预留向上、向下的接口留作后期发展。(架构图大家可以查看刚才上面发的图片)

虚拟化技术选择

  Docker当下很火,其轻量级、灵活、高密度部署是优点,但是大规模使用还未成熟。许多场景还是需要依赖传统的虚拟化技术。所以我们选择传统虚拟化技术KVM+Docker,确保线上业务稳定性、连续性的同时,开发、测试环境又可以利用到Docker的轻量级、高密度和灵活。

另外很多用户的生产环境存在不止一种虚拟化技术,例如KVM+Esxi组合、KVM+XenServer组合、KVM+Hyper-V组合,而目前的虚拟化管理平台,大多都是只支持一种Hypervisor的管理,用户想要维护不同的虚拟化技术的虚拟机,就要反复的在不同环境之间切换。 基于此考虑,我和团队内部和外部一些同行选择兼容(兼容KVM、Esxi,Docker),并自主打造新一代虚拟化管理平台——混合虚拟化。

网络  

 

有关ovm的29个问题解答及ovm产品经理对ovm的架构思考

网络方面,我们对所有Hypervisor的虚拟机使用统一的网络管理(包括Docker容器),这样做的一个好处就是可以减少运维工作量,降低网络复杂性。初期我们只实现2层的虚拟网络管理,为虚拟机和容器提供Vlan隔离、DHCP分配网络,当然也可以手工为虚拟机挑选一个网络,这个可以满足一般的虚拟化需求,后期我们会在此基础上增加虚拟网络防火墙、负载均衡。

存储

存储上面我们采用本地存储+NFS两种方式,对于一般中小企业来说,不希望购买高昂的商业存储,直接使用本地存储虚拟机的性能是最好的,而且我们也提供了存储快照、存储热迁移、虚拟机的无共享热迁移来提升业务安全。此外NFS作为辅助,可以为一些高风险业务提供HA。后期存储方面我们会考虑集成Ceph和GlusterFS存储来提升存储管理。

镜像中心

顾名思义,镜像中心就是用来存放镜像的。传统虚拟化我们使用NFS来作为镜像中心,所有宿主机共享一个镜像中心,这样可以更方便的来统一管理镜像,而针对Docker容器则保留了使用Docker自己的私有仓库,但是我们在WEB UI的镜像中心增加了从Docker私有仓库下载模板这么一个功能,实现了在同一个镜像中心的管理,后期我们会着重打造传统虚拟化镜像与Docker镜像的相互转换,实现两者内容的统一。

HA

OVM 主机HA依然坚持全兼容策略,支持对可管理的所有Hypervisor的HA。

在启用HA的资源池,当检测到一个Hypervisor故障,创建和运行在该Hypervisor共享存储上的虚拟机将在相同资源池下的另外一个主机上重启。

具体工作流程为:

第一次检测到故障会将该故障主机标记;

第二次检测依然故障将启动迁移任务;

迁移任务启动后将在该故障主机所在的资源池寻找合适的主机;

确定合适主机后,会将故障主机上所有的虚拟机自动迁移到合适的主机上面并重新启动;

VM分配策略

负载均衡

PERFORMANCE(性能): 这条策略分配虚拟机到不同的主机上。它挑选一组中可用资源最多的主机来部署虚拟机。如果有多个主机都有相同的资源可用,它使用一个循环算法,每个虚拟机分配到一个不同的主机上。

PROGRESSIVE(逐行扫描): 这条策略意味着,所有虚拟机将被分配在同一个主机上,直到它的资源被用尽。此项策略将一个主机资源使用完,然后再切换到另一个主机。

负载均衡级别

所有资源池: 如果选定此选项,则负载均衡级别策略将适用于所选定数据中心的所有资源池中的主机。

所有主机: 该策略将适用于所选数据中心单个资源池的所有主机。

特定主机: 该策略仅适用于所选的特定主机。

VM设计一

VM是整个虚拟化平台的核心,我们开发了一个单独的模块来负责虚拟机的相关操作。其采用异步通信和独立的并行操作,提升了虚拟机性能、稳定性和扩展性。

可扩展性:独立、并发

可追溯性:错误信息和log、监控控制台、性能

非阻塞操作:稳定性、改进重新配置、改进回滚、标准、统一的hypervisor通信、自动化测试

 

VM设计二

我们设计基于vApp来部署虚拟机,一个vApp可包含N个虚拟机:

N 个虚拟机配置

N个开机请求

我们希望并行运行N个配置(要求资源允许),并在配置后每个虚拟机请求一个开机。这些操作都是并发和独立的。

平台设计

OVM产品目前由三大组件、七大模块组成。其中三大组件分别为OVM UI、OVM API和OVM数据中心组件。

有关ovm的29个问题解答及ovm产品经理对ovm的架构思考

OVM UI提供WEB自服务界面,OVM API负责UI和数据中心组件之间的交互,OVM数据中心组件分别提供不同的功能。七大模块分别负责不同的功能实现,和三大组件之间分别交互。

VDC资源限额

有关ovm的29个问题解答及ovm产品经理对ovm的架构思考

管理员可以为每个VDC设置资源限额,防止资源的过度浪费。

 

完整的RestFul API接口

OVM  RestFul  API

物理机管理

网络管理

虚拟数据中心管理

虚拟存储管理

虚拟网络管理

虚拟机生命周期管理

应用商店管理

账户管理

 

OVM提供存储SDK、备份SDK,以及虚拟防火墙SDK,轻松与第三方实现集成

 

成果展示—清晰的首页监控

有关ovm的29个问题解答及ovm产品经理对ovm的架构思考

成果展示—VDC资源限额

有关ovm的29个问题解答及ovm产品经理对ovm的架构思考

成果展示—统一的镜像中心

有关ovm的29个问题解答及ovm产品经理对ovm的架构思考

第二部分:提问互动环节

QQ群—KVM2群—Q1:VMware迁移到kvm 你是用什么工具呢?

答:VMware之前我们已经导入到平台实现了统一管理,下一步我们准备将部分相同业务转换成模板,然后在KVM部署新的虚拟机,部分直接淘汰,另外一部分可以直接导出vmware的镜像,然后基于这些镜像在KVM生成新的虚拟机,这些全部通过脚本来实现

QQ群—OpenStack群—Q1:企业虚拟化选用kvm xenopenstack怎么选择呢?这三个和OVM有那些异同点呢?

答:目前的底层hypervisor技术有kvm、xen、esxi等,openstack是属于管理平台,可以管理kvm,但是我们觉得openstack太重,不适合于一般企业采用;OVM希望做的是一个混合虚拟化管理平台,可以管理目前所有主流的底层hypervisor,用户无论使用何种hypervisor都可以使用OVM实现统一管理和运维

QQ群—OpenStack群—Q2:虚拟机的自动迁移是要基于共享存储吗,nfs?

答:虚拟机的自动迁移是需要共享存储的,但不限于NFS,手工在线迁移目前我们可以支持无共享存储的在线迁移

QQ群—OpenStack群—Q3:外部存储主要支持哪些?SAN、NAS、cifs等

答:外部存储目前支持NAS和cifs,后期会考虑支持SAN

QQ群—OpenStack群—Q4:vm基于非共享存储创建是否可以迁移?

答:可以,支持手工迁移,但基于非共享存储创建的vm不支持HA

QQ群—OpenStack群—Q5:外部存储系统映射的lun,ovm上的vm是否可以共享?
答:外部存储系统映射的lun,这个功能我们正在做,当前版本还不支持

QQ群—OpenStack群—Q6:今天内容还有整理的文档?

答:官网51ovm.com 微信公众号,openvm

QQ群—OpenStack群—Q7:nas存储走的是网络,稳定性并不如san,如网络突然中断,基于nas目录上的运行的vm是否down

答:是的,nas的性能及稳定性是不如san,如果网络突然中断是会对运行于其上的虚拟机造成影响,这种可以采取多路径绑定来避免该问题,下一步我们会提供对SAN的支持

QQ群—OpenStack群—Q8:目前你们实际案例或是测试出来,一个ovm平台最多有几台服务器运行?是否支持超分配?

答:实际案例是一个OVM平台到了300台物理服务器,测试模拟数据达到了万台,支持超分配,并可在UI设置超分比例

QQ群—KVM1群—Q1:ovm安装程序,有网盘下载链接吗?

答:ovm安装程序,有网盘下载链接的,可以到官网51ovm.com下载

QQ群—KVM1群—Q2:ovm部署教程?

答:ovm部署教程,在51ovm.com官网有提供,ovm社区交流qq群也有提供

QQ群—KVM1群—Q3:要么就是单纯的虚拟化,类似vmware等、这句话怎么理解 ?

答:要么就是单纯的虚拟化,类似vmware等——这句话我想可以这么理解,目前的虚拟化管理平台大多只提供对一种底层hypervisor的管理,而大多公司由于历史原因、成本考虑等共存了多种hypervisor,我们希望做的是提供一个统一管理这些底层hypervisor的管理平台,另外我们还将其扩展到了对docker的统一管理,实现了传统虚拟化和轻量级docker的混合管理

QQ群—KVM1群—Q4:思路不错!后面测试看看。目前有比较大的公司或者管理较多的设备实际使用吗?超过100台物理机的

答:目前我们这套产品有某知名广电单位在用,物理机规模已经超100,虚机规模达到了3000+

QQ群—KVM1群—Q5:ovm安装程序,网盘下载密码是多少?

ovm安装程序,网盘下载密码请到OVM社区交流群查询,在公告里面有

QQ群—KVM1群—Q6:本地存储如何在线迁移?

答:本地存储通过块复制来实现在线迁移

QQ群—KVM1群—Q7:外部存储目前支持NAS和cifs,后期会考虑支持和SAN。请问,CIFS都可以呀?smb2.0 or smb3.0 ?

答:是的,CIFS可以的

QQ群—KVM1群—Q8:本地存储通过块复制来实现在线迁移。请问,块复制?DRBD

答:目前没有用到DRBD

QQ群—KVM1群—Q9:如何在线同步不同主机的数据块?

答:关于虚拟机的无共享存储热迁移后期我们会出一个详细的原理性介绍文档,届时你可以关注

QQ群—KVM1群—Q10:windows8有没有办法读取xfs格式的移动硬盘

答:这个问题貌似需要微软工程师来回答,目前没有做过这个验证

QQ群—KVM1群—Q11:举个极端例子,如果ovm平台出问题,我当前运行的虚拟机及宿主机会有影响吗?

答:如果ovm平台出问题,对当前运行的虚拟机及宿主机均不会有任何影响

QQ群—KVM1群—Q12:HA方面,管理节点自身如何做到HA高可用?

答:管理平台HA方面,管理节点目前我们通过zookper来实现,具体的我们随后也会安排工程师整理出一个文档提供到官网,不过管理平台部署到虚拟机是最容易实现HA的

QQ群—KVM1群—Q13:负载均衡中,性能是如何判断的,比如CPU  内存,哪个参数更优先?

答:负载均衡策略中,可以对CPU和内存参数分别设置,所以不存在哪个优先

QQ群—OVM社区群—Q1:ovm管理平台支持集群吗?如果不支持对kvm有没有影响?

答:OVM HA不限于nfs,只要是共享存储均可,ovm管理平台支持集群的

QQ群—OVM社区群—Q2:整个平台自身的性能有没有什么样的性能指标。假设一个标准的ovm平台,支持管理多少台物理机,支持多少虚拟机数量等等。还有虚拟机创建有没有内置一套策略,(虚拟机创建合理分配到资源空闲的物理机和存储。)

平台是分布式的架构,可以做成多个多个数据中心的模式,支撑万台规模没什么问题,虚拟机的数量可支撑到10万+(我们测试数据,具体生产环境可能有差异),关于虚拟机创建合理分配到资源空闲的物理机和存储,这个我们内置有策略,用户可以配置策略,分配时会根据策略判断

QQ群—OVM社区群—Q3:OVM在支持VDI方面有哪些设计?

答:目前我们还没考虑对VDI的支持,后期可能会考虑

QQ群—OVM社区群—Q4:OVM支持哪些虚拟化引擎

目前支持KVM和Docker,后期我们会考虑增加Esxi、XenServer、Hyper-V

微信群-免费虚拟化OVM-Q1:有这个整体的拓扑图吗?

答:关于OVM的图片可以参考今晚分享提供的图片,另外后期我们也会将更多OVM相关的设计图、架构图分享到51ovm.com,希望大家持续关注我们官网

微信群-免费虚拟化ovm-Q2 能详细说下sdn和存储吗?

答:SDN我们不打算重写,计划集成现有比较成熟的开源方案,并给大家提供更多种选择,具体的可以持续关注我们微信公众号和官网,关于存储,目前我们只支持简单的NAS,后期会考虑集成ceph和GlusterF

微信群-免费虚拟化ovm-Q3:可以自定义CPU超分比?内存、硬盘允许复用?内存、硬盘允许预先分配?

答:内存、硬盘允许复用问题请看分享内容,硬盘允许预分配,我的理解是假如创建了一个200GB磁盘的虚拟机,其在物理硬盘上的占用以虚拟机的实际使用空间来计算,那么剩余的部分依然可以分配给其他虚拟机使用,但是不建议这么用;至于内存预分配,我觉得这个没必要,只要支持内存热添加,那么就不存在虚拟机内存不够用的情况


免费虚拟化,从ovm开始

KVM云技术社区微信群,加入请联系北极熊:

KVM社区QQ群,99.99%纯技术交流气氛

QQ 1群:434720759(已满

QQ 2群:131961942,加入密码大写KVM

1000人VMWare技术交流群494084329,加入密码小写vm

OpenNebula QQ群:495571573 加入密码Nebula

2000人OpenStack开发纯技术群: 334605713 加入密码nova

Cloudstack纯技术交流群:515249455密码cs

2000人桌面云行业讨论: 484979056 加入密码大写VDI

2000超融合行业讨论群:65779632 加入密码大写HC

2000云技术招聘求职群: 279875515 加入密码hr


mysql 转换引擎脚本mysql_convert_table_format,myisam转成innodb方法

$
0
0

MyISAM与InnoDB是mysql目前比较常用的两个数据库存储引擎,MyISAM与InnoDB的主要的不同点在于性能和事务控制上。这里简单的介绍一下两者间的区别和转换方法:
MyISAM:MyISAM是MySQL5.5之前版本默认的数据库存储引擎。MYISAM提供高速存储和检索,以及全文搜索能力,适合数据仓库等查询频繁的应用。但不支持事务、也不支持外键。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。
InnoDB:InnoDB是MySQL5.5版本的默认数据库存储引擎,不过InnoDB已被Oracle收购,MySQL自行开发的新存储引擎Falcon将在MySQL6.0版本引进。InnoDB具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。尽管如此,但是InnoDB包括了对事务处理和外来键的支持,这两点都是MyISAM引擎所没有的。

mysql官方提供了一个批量转换存储引擎的脚本工具 mysql_convert_table_format,今天安装mysql 5.7.14时发现已经被移除掉了这个引擎转换脚本,具体是从哪个版本开始移除的不做深究,还能正常使用才是关键。

mysql数据库存储引擎转换

方法一: /usr/local/webserver/mysql/bin/mysql_convert_table_format xxxzzz --user=root --password=xxxzzz --socket=/tmp/mysql.sock

脚本代码:


#!/usr/bin/perl
# Copyright (c) 2000-2002, 2006, 2007 MySQL AB, 2009 Sun Microsystems, Inc.
# Use is subject to license terms.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

# Convert given tables in a database to MYISAM

use DBI;
use Getopt::Long;

$opt_help=$opt_version=$opt_verbose=$opt_force=0;
$opt_user=$opt_database=$opt_password=undef;
$opt_host="localhost";
$opt_socket="";
$opt_engine="MYISAM";
$opt_port=0;
$exit_status=0;

GetOptions(
"e|engine|type=s" => \$opt_type,
"f|force" => \$opt_force,
"help|?" => \$opt_help,
"h|host=s" => \$opt_host,
"p|password=s" => \$opt_password,
"u|user=s" => \$opt_user,
"v|verbose" => \$opt_verbose,
"V|version" => \$opt_version,
"S|socket=s" => \$opt_socket,
"P|port=i" => \$opt_port
) || usage(0);

usage($opt_version) if ($#ARGV < 0 || $opt_help || $opt_version);

$opt_database=shift(@ARGV);

if (grep { /^$opt_engine$/i } qw(HEAP MEMORY BLACKHOLE))
{
print "Converting to '$opt_engine' would delete your data; aborting\n";
exit(1);
}

$connect_opt="";
if ($opt_port)
{
$connect_opt.= ";port=$opt_port";
}
if (length($opt_socket))
{
$connect_opt.=";mysql_socket=$opt_socket";
}

$dbh = DBI->connect("DBI:mysql:$opt_database:${opt_host}$connect_opt",
$opt_user,
$opt_password,
{ PrintError => 0})
|| die "Can't connect to database $opt_database: $DBI::errstr\n";

my @tables;

push(@ARGV, "%") if(!@ARGV);

foreach $pattern (@ARGV)
{
my ($sth,$row);
$sth=$dbh->prepare("SHOW TABLES LIKE ?");
$rv= $sth->execute($pattern);
if(!int($rv))
{
warn "Can't get tables matching '$pattern' from $opt_database; $DBI::errstr\n";
exit(1) unless $opt_force;
}
while (($row = $sth->fetchrow_arrayref))
{
push(@tables, $row->[0]);
}
$sth->finish;
}

print "Converting tables:\n" if ($opt_verbose);
foreach $table (@tables)
{
my ($sth,$row);

# Check if table is already converted
$sth=$dbh->prepare("show table status like '$table'");
if ($sth->execute && ($row = $sth->fetchrow_arrayref))
{
if (uc($row->[1]) eq uc($opt_engine))
{
print "$table already uses the '$opt_engine' engine; Ignored\n";
next;
}
}
print "converting $table\n" if ($opt_verbose);
$table=~ s/`/``/g;
if (!$dbh->do("ALTER TABLE `$table` ENGINE=$opt_engine"))
{
print STDERR "Can't convert $table: Error $DBI::errstr\n";
exit(1) if (!$opt_force);
$exit_status=1;
}
}

$dbh->disconnect;
exit($exit_status);
sub usage
{
my($version)=shift;
print "$0 version 1.1\n";
exit(0) if ($version);

print <<EOF;

Conversion of a MySQL tables to other storage engines

Usage: $0 database [table[ table ...]]
If no tables has been specifed, all tables in the database will be converted.
You can also use wildcards, ie "my%"

The following options are available:

-f, --force
Continue even if there is some error.

-?, --help
Shows this help

-e, --engine=ENGINE
Converts tables to the given storage engine (Default: $opt_engine)

-h, --host=HOST
Host name where the database server is located. (Default: $opt_host)

-p, --password=PASSWORD
Password for the current user.

-P, --port=PORT
TCP/IP port to connect to if host is not "localhost".

-S, --socket=SOCKET
Socket to connect with.

-u, --user=USER
User name to log into the SQL server.

-v, --verbose
This is a test specific option that is only used when debugging a test.
Print more information about what is going on.

-V, --version
Shows the version of this program.
EOF
exit(1);
}

至于是将Myisam转换成InnoDB还是InnoDB转换成Myisam关键在于$opt_engine="MYISAM";脚本默认是将InnoDB转换成Myisam

方法二:如果要更改整个数据库表的存储引擎,采用先把数据库导出,得到SQL,把MyISAM全部替换为INNODB,再导入数据库的方式。

单表引擎转换

将wp_posts表修为InnoDB存储引擎(也可以此命令将InnoDB换为MyISAM):
mysql> ALTER TABLE wp_posts ENGINE=INNODB;

Win7系统本地连接不可用,依赖服务或组无法启动解决办法汇总

$
0
0

Win7系统使用过程中突然无法上网,网络和共享中心显示未知,依赖服务或组无法启动。很多服务是没有禁用的,但是打开服务控制器,很多服务却启动不了,其实这是Network Location Awareness的问题,诊断和修复显示无法运行,因为"诊断策略服务"没有运行。无法手动启动,显示windows不能在本地计算机,启动 Network Location Awareness有关更多信息,查阅系统事件日志等等。给大家介绍Win7系统本地连接不可用,依赖服务或组无法启动的解决方法汇总。

Win7系统本地连接不可用,依赖服务或组无法启动解决办法汇总

Win7系统本地连接不可用,依赖服务或组无法启动

方法一:放入安装光盘,按“win+r”打开“运行”窗口,输入sfc /scannow 命令按回车运行即可修复。(提示:sfc 后面有空格)。
方法二:很多时候TCPIP.sys文件被修改时就会导致出错,解决方法是复制一个相同文件来解决。
方法三:无法启动服务一般是由于对应的服务所需要的动态链接文件不存在或已经被破坏而引起的,可尝试下载对应的 dll 来解决。
方法四:检查服务里面的Remote Access Connection Manager服务是否已经启动了。
方法五:选择还原点将系统还原到几天前便可解决。
方法六:按“win+r”打开“运行”窗口,输入“dcomcnfg”命令按回,然后依次点击“组件服务——计算机——我的电脑——DCOM配置”右键netprofm选择属性,切换到“安全”标签页,选择启动和激活权限,点击自定义,点击“编辑——添加”,输入对象名称来选择,输入“LOCAL SERVICE”点击确定,返回之前,将下面的本地启动和本地激活勾选上,选择LOCAL SERVICE后点击应用、确定,最后在组件服务中点击服务,在Network List Service上右键选择启用即可。
有时候,需要三种方法全部应用才能解决问题。
方法七:如果足够幸运,使用如下方法可以直接搞定:开始->所有程序->附件->命令提示符, 注意右键以管理员身份运行; 输入netsh winsock reset catalog, 回车, 重启测试。

Win7系统本地连接不可用,依赖服务或组无法启动解决办法汇总

无法上网:依赖服务或组件无法启动

方法八:以上方法行不通时,则尝试采用360安全卫士LSP修复工具,工具路径(我用的是领航版):点击右下角“更多”,弹出如图界面,找到并点击LSP修复工具。

Win7系统本地连接不可用,依赖服务或组无法启动解决办法汇总

Win7系统本地连接不可用,依赖服务或组无法启动

方法九:点击LSP修复工具左下方的“恢复到上一次状态”,然后在“运行”里输入命令:netsh winsock reset catalog,重启电脑。如果不行,可以再重复一次第二种方法,如果还不奏效则采用第三种方法。
(1)点击“开始”->“运行”,输入“services.msc”命令;
(2)启动服务管理界面中的“Network Location Awareness”、“Secure Socket Tunneling Protocol”、“Remote Access Connection Manager ”、“Remote access auto connection manager”,并设置为自动启动;
(3)启动服务过程中如果遇到问题,可查看“依存关系”Tab页选项,启动相应的服务。
(4)在“运行”里输入命令:netsh winsock reset catalog,重启电脑。
方法十:启动以上“Network Location Awareness”服务时,可能提示“windows不能在本地计算机启动Network Location Awareness……”信息,此时可点击“开始”->“运行”,输入“cmd”命令。
在命令行中依次执行如下命令:
(1)在cmd执行 net localgroup administrators localservice /add 回车
(2)在cmd执行 net localgroup administrators networkservice /add 回车
(3)在cmd执行 exit 回车
(4)重启Windows系统

Centos下的python模块MySQLdb安装

$
0
0

在Python环境下,如果想操作MySQL数据库,难免会调用相应的包,比如常用的:MySQLdb通过导入:import MySQLdb 后,可直接调用里面的方法
默认情况下,MySQLdb包是没有安装的,不信? 看到类似下面的代码你就信了。
$ python update_mysql.py
Traceback (most recent call last):
File "update_mysql.py", line 9, in <module>
import MySQLdb
ImportError: No module named MySQLdb
这时我们就不得不安装MySQLdb包了。安装其实也挺简单,具体步骤如下:
1、下载 MySQL for Python
地址:http://sourceforge.net/projects/mysql-python/files/mysql-python/
我这里安装的是1.2.3版本
wget http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz
2、解压
tar zxvf MySQL-python-1.2.3.tar.gz
3、安装
$ cd MySQL-python-1.2.3
$ python setup.py build
$ python setup.py install
注:
如果在执行:python setup.py build 遇到以下错误:
EnvironmentError: mysql_config not found
首先查找mysql_config的位置,使用
find / -name mysql_config ,比如我的在/usr/local/mysql/bin/mysql_config
修改setup_posix.py文件,在26行:
mysql_config.path = “mysql_config” 修改为:
mysql_config.path = “/usr/local/mysql/bin/mysql_config”
error: command 'gcc' failed with exit status 1
error: command 'gcc' failed with exit status 1 的解决办法
yum install gcc python-devel
保存后,然后再次执行:
python setup.py build
python setup.py install
OK,到此大功告成。

[pipy]pip更换国内源加速python pypi包安装

$
0
0

[pipy]pip国内源列表(部分)

https://pypi.mirrors.ustc.edu.cn/  中国科学技术大学

http://mirrors.aliyun.com/pypi/   阿里云

http://mirrors.sohu.com/python/  搜狐

http://pypi.doubanio.com/    豆瓣

 

Windows python版本

Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32

更改C:\Python35\Lib\site-packages\pip\models\index.py中PyPI的值,如图所示:

[pipy]pip更换国内源加速python pypi包安装

更改pip国内镜像

pip命令安装第三方库:
Python 导入库的时候,可以用import命令,如果是标准库,那么直接运行即可,如果是第三方的库,需要用pip命令安装之后才能导入。
pip install pandas

从MySQL全库备份中恢复某个库和单张表

$
0
0

环境:

mysql版本:5.6.x

利用Mysqldump官方工具全库备份,如何做到只恢复单个库呢?

全库备份

[root@mysql ~]# mysqldump -uroot -p --single-transaction -A --master-data=2 >auto.sql

只恢复某个库的数据如何操作呢?比如恢复xxx库数据

[root@mysql ~]#mysql -uroot -p xxx --one-databases < auto.sql

可以看出主要是用到mysql命令中的--one-database简写-o的参数,极大方便了我们恢复数据时的灵活变化。

-o, --one-database Ignore statements except those that occur while the default database is the one named at the command line.

如何从全库备份中提取某张表呢,全库恢复,再恢复某张表小库还可以,大库就很麻烦了,那我们可以利用正则表达式来进行快速提取,具体实现方法如下:

从全库备份中提取出'cms_cnodes'表结构

[root@mysql~]#sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `cms_cnodes`/!d;q'  auto.sql

DROP TABLE IF EXISTS cms_cnodes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cms_cnodes` (
`cnid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '节点编号',
`alias` varchar(50) NOT NULL COMMENT '节点名称',
`appurl` varchar(80) NOT NULL COMMENT '节点跳转URL',
`ename` varchar(50) NOT NULL COMMENT '节点名称',
`closed` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否关闭',
`caid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '栏目属性',
`cnlevel` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '交叉层数',
`needstatics` varchar(255) NOT NULL COMMENT '静态时间',
`ccid18` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '销售状态',
`ccid12` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '排量',
`tid` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '节点配置编号',
`keeptid` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '定制节点,保持tid',
`ccid13` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '年款',
`ccid1` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '车类目',
`ccid7` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '用途分类',
`ccid3` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '地铁',
`ccid8` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '车款级别',
`ccid16` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '车模图集',
`ccid17` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '新房价格区间',
`ccid19` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '(已不用)',
`ccid20` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '地区',
`ccid15` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '汽车主题',
`ccid24` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '(已不用)',
`ccid2` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '新车资讯',
`ccid10` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '新车价格',
`ccid11` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '二手车价',
`ccid23` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '车龄',
`ccid28` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '求购车价',
`ccid22` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '行驶里程',
`ccid51` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '等级推荐',
`ccid53` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '租车类型',
`ccid57` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '问题状态',
`ccid56` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '精华',
`ccid58` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '高额悬赏',
`ccid59` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '问答推荐',
`ccid60` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '问吧分类',
PRIMARY KEY (`cnid`),
UNIQUE KEY `enamesid` (`ename`)
) ENGINE=MyISAM AUTO_INCREMENT=3406 DEFAULT CHARSET=utf8 COMMENT='节点表';
/*!40101 SET character_set_client = @saved_cs_client */;

从全库备份中提取出'cms_cnodes'表数据

[root@mysql~]#grep -i 'INSERT INTO `cms_cnodes`' auto.sql

INSERT INTO `cms_cnodes` VALUES (1,'','','caid=8&ccid20=1296',0,8,2,'1413947415,',0,0,119,0,0,0,0,0,0,0,0,0,1296,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0),(2,'','','caid=8&ccid20=1297',0,8,2,'1413947415,',0,0,119,0,0,0,0,0,0,0,0,0,1297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(3,'','','ca
id=8&ccid20=1302',0,8,2,'1413947415,',0,0,119,0,0,0,0,0,0,0,0,0,1302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(4,'','','caid=8&ccid20=1304',0,8,
2,'1413947415,',0,0,119,0,0,0,0,0,0,0,0,0,1304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(5,'','','caid=8&ccid20=1305',0,8,2,'1413947415,',0,0,11
9,0,0,0,0,0,0,0,0,0,1305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(6,'','','caid=8&ccid20=1306',0,8,2,'1413947415,',0,0,119,0,0,0,0,0,0,0,0,0,13
06,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(7,'','','caid=8&ccid20=1307',0,8,2,'1413947415,',0,0,119,0,0,0,0,0,0,0,0,0,1307,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0),(8,'',''...............

dump出来的sql文件被gzip压缩以后如何处理呢,其实也非常简单,只需要通过gunzip -c xxxx.gz,比如提取某个表的数据并重定向到sql文件中

[root@mysql~]#gunzip -c xxx-backup-2016-11-23.gz |grep -i  'insert into `ju_base`'>>/data/insert_ju_base.sql

提取表结构访问类似,请自行补充。

Viewing all 130 articles
Browse latest View live