glance api 的实验(curl)

参考文档:
http://docs.openstack.org/api/openstack-image-service/1.0/content/requesting-detailed-metadata-on-public-vm-images.html
http://glance.openstack.org/glanceapi.html
http://glance.openstack.org/formats.html
1、登录、获取 token

curl -X POST -d ‘{“auth”: {“tenantName”: “admin”, “passwordCredentials”:{“username”: “admin”, “password”: “nova”}}}’ -H “Content-type: application/json” http://192.168.28.5:35357/v2.0/tokens | python -mjson.tool

curl -X POST -d ‘{“auth”: {“tenantId”: “6a524dbe23dd4e4ab672cd163c85a27d”, “passwordCredentials”:{“username”: “admin”, “password”: “nova”}}}’ -H “Content-type: application/json” http://192.168.28.5:35357/v2.0/tokens | python -mjson.tool

2、glance的api实验

获取 images 列表
curl -H “X-Auth-Token: 32efbc8c22af4ad6a8f03d051dc3413b” http://192.168.28.5:9292/v1/images |python -mjson.tool
获取 images列表(详情)
curl -H “X-Auth-Token: 32efbc8c22af4ad6a8f03d051dc3413b” http://192.168.28.5:9292/v1/images/detail |python -mjson.tool

可以使用 name, container_format, disk_format, status, size_min, size_max进行帅选
可以使用 sort_key 进行排序, sort_dir (asc, desc(缺省))决定正序、倒序

获取某个image的详细Metadata:
curl -I -X HEAD -H “X-Auth-Token: 32efbc8c22af4ad6a8f03d051dc3413b” http://192.168.28.5:9292/v1/images/32b518d8-2dcf-451a-9f8b-ccf5264e17f3
下载某个image, 和上面的方法,相差就是 HEAD和 GET 的方法区别:
curl -X GET -H “X-Auth-Token: 32efbc8c22af4ad6a8f03d051dc3413b” http://192.168.28.5:9292/v1/images/32b518d8-2dcf-451a-9f8b-ccf5264e17f3

删除某个image:
curl -X DELETE -H “X-Auth-Token: 32efbc8c22af4ad6a8f03d051dc3413b” http://192.168.28.5:9292/v1/images/258ad2d5-d48b-4f95-94f4-10e60ace6e67
查看 image 的Memberships:
curl -H “X-Auth-Token: 32efbc8c22af4ad6a8f03d051dc3413b” http://192.168.28.5:9292/v1/images/32b518d8-2dcf-451a-9f8b-ccf5264e17f3/members |python -mjson.tool

查看某个 tenant 共享的image:
curl -H “X-Auth-Token: 32efbc8c22af4ad6a8f03d051dc3413b” http://192.168.28.5:9292/v1/shared-images/admin |python -mjson.tool

增加某个成员共享:
curl -X PUT -H “X-Auth-Token: 32efbc8c22af4ad6a8f03d051dc3413b” http://192.168.28.5:9292/v1/images/32b518d8-2dcf-451a-9f8b-ccf5264e17f3/members/demo

缺省,can_share 是false,可以加入body:
{‘member’:
{‘can_share’: true}
}

删除某个成员共享:
curl -X DELETE -H “X-Auth-Token: 32efbc8c22af4ad6a8f03d051dc3413b” http://192.168.28.5:9292/v1/images/32b518d8-2dcf-451a-9f8b-ccf5264e17f3/members/demo

发表在 OpenStack | 标签为 , | 留下评论

执行nova-manage db sync时出错,提示’Specified key was too long; max key length is 1000 bytes’

执行nova-manage db sync时出错:

2012-03-24 14:07:01 CRITICAL nova [-] (OperationalError) (1071, ‘Specified key was too long; max key length is 1000 bytes’) ‘\nCREATE TABLE user_project_association (\n\tcreated_at DATETIME, \n\tupdated_at DATETIME, \n\tdeleted_at DATETIME, \n\tdeleted BOOL, \n\tuser_id VARCHAR(255) NOT NULL, \n\tproject_id VARCHAR(255) NOT NULL, \n\tPRIMARY KEY (user_id, project_id), \n\tCHECK (deleted IN (0, 1)), \n\tFOREIGN KEY(user_id) REFERENCES users (id), \n\tFOREIGN KEY(project_id) REFERENCES projects (id)\n)\n\n’ ()

原因是 openstack nova 的一个主键PRIMARY KEY (user_id, project_id)过长。

每个都是256字节,两个是512字节,,这时:

1、由于mysql做采用 MYISAM 表类型时,每个key不能超过 1k字节

2、由于mysql设置了 utf-8,每个字符占3个字节,这样 512*3就超过了1K字节

解决方法:

1、mysql server不要采用 utf-8, 采用latin1

或者:

2、mysql server 采用 INNODB 作为表结构,这样没有 key 是 1k字节的限制

vi /etc/my.cnf

[mysqld]

default_table_type = InnoDB

character-set-server=utf8
init_connect=’SET NAMES utf8′

 

这个问题,已经有人碰到,递交了一个bug,只是一直没有人回答,我顺便也回答了:

https://bugs.launchpad.net/nova/+bug/829209

 

发表在 OpenStack | 标签为 , | 留下评论

2T以上硬盘,怎么做kickstart

必须使用 gpt

%pre
/usr/sbin/parted -s /dev/sda mklabel gpt
/usr/sbin/parted -s /dev/sdb mklabel gpt
%end

#System bootloader configuration
bootloader --driveorder=sda,sdb

#必须注释掉下列行,否则,会去掉gpt

#zerombr
#clearpart --all --initlabel
发表在 DEVOPS | 标签为 , | 留下评论

5分钟安装CentOS

为了快速批量安装CentOS,保证安装的一致性和进行基本的系统优化,我们定制了CentOS光盘,现在开放给社区:

1、没有对rpm包做任何改动,仅仅对原来的DVD进行了裁剪,保留了服务器需要用的软件

2、使用 kickstart 进行安装,对很多系统参数进行了优化和调整

3、光盘由于主要是公司使用,所以里面有我们的两个开发人员的公钥,请安装完了以后删除 /root/.ssh/authorized_keys  里的公钥

4、安装完了以后,缺省是禁止远程ssh密码登录,必须使用公钥登录,如果要打开,可以:

perl -pi -e “s|PasswordAuthentication|#PasswordAuthentication|” /etc/ssh/sshd_config

service sshd reload

安装方法:
1、下载光盘,刻录:

http://openstack.pubyun.com/centos/

2、将光盘放入机器,启动以后,有一个提示,输入:

ks

2.1 如果有两个硬盘,做成软 raid,则输入 ks-raid

2.2 如果是采用 usb 光驱安装,则输入:

linux ks=hd:scd0:/ks.cfg
或者 (raid)
linux ks=hd:scd0:/ks-raid.cfg

(在 SCSI 的机器上,不能使用 sda0,否则当作硬盘)

3、这样就进行自动安装,安装完毕,会重新启动

4. 系统缺省密码:

user: root
pass: astpbx

5、重新启动以后,修改 IP 地址,网关等参数:

修改IP地址、网关, 执行命令:

system-config-network

域名服务器修改:

/etc/resolv.conf

然后执行下述命令,使网络参数生效:
service network restart

发表在 DEVOPS | 标签为 , | 留下评论

为什么服务器上,我们要使用 CentOS

早期,我们使用 Debian 作为服务器软件,后来转向了CentOS,主要原因如下:

1、CentOS/RHEL的生命周期是7年,基本上可以覆盖硬件的生命周期,也就意味着一个新硬件安装以后,不用再次安装操作系统。要知道重新折腾一个生产机是很麻烦而且有风险的事情。

[2012.2.1]今天刚刚收到红帽子的通知邮件,RedHat 5, RedHat 6的生命周期,延长到10年,太牛叉了。这个对企业用户很重要。

而Debian的生命周期是不固定的,一般新版本发布以后,上个版本再维护18个月。而Debian的版本发布时间间隔不稳定,经常会延期。综合起来一个版本的生命周期一般在3~4年。

Ubuntu的server版生命周期是5年。

如果你选用了 Debian 或者 Ubuntu作为服务器,等生命周期过了以后,就没有安全补丁,你的服务器就会裸奔或者需要重新安装系统。

2、CentOS/RHEL对硬件的支持很好,主流硬件厂商早就将服务器拿过去测试,一般不存在硬件的兼容性问题。

而Debian就麻烦了,由于有版权上的考虑和代码纯洁性上的洁癖,一些硬件驱动和软件被删掉了,导致安装过程有问题。比如 Dell 服务器上,大量使用的网卡 BroadCom,就驱动不了,安装了以后,网络起不来。

3、大量商业软件,比如 Oracle ,都是针对 Redhat认证的,有大量的帮助文档和使用说明,有良好的技术支持。

4、CentOS 是RedHat的克隆版,如果需要可以随时平滑切换到 RedHat,从而享受RedHat的服务支持。RedHat是一个值得尊敬的开源公司,有很多大牛,Linux内核他们的贡献程度最多。是要知道厂商的服务,是最后一道防火墙,如果你给一个大客户做方案,他们一般会倾向选用商业服务。万一出了什么问题,还有Redhat可以求助,或者有一个RedHat可以承担责任 🙂
5、熟悉了 CentOS/RedHat ,找工作更加容易

6、CentOS/RHEL 的批量安装更加方便

在机房,使用kickstart + PXE安装,给客户,使用定制的kickstart光盘,一键安装,一般在5分钟左右就可以安装完。而debian的preseed 本质上是按照步骤模拟手工操作一点一点来配置,相对 kickstart,配置文件更加复杂。比如做 softraid + LVM,是目前最常用的一个磁盘分区分案,使用 preseed很麻烦,而 kickstart 简洁。

发表在 DEVOPS | 标签为 | 留下评论

CentOS 6.2下安装 openstack 2012.1(essax)

现在 ubuntu 上安装已经比较方便,但是 CentOS 下安装 openstack 2012还是比较痛苦,我做了一个软件包,方便大家使用:

http://openstack.pubyun.com/centos/6/pubyun/x86_64/

安装方法如下:

wget -O /etc/yum.repos.d/pubyun.repo http://openstack.pubyun.com/centos/6/pubyun/x86_64/pubyun.repo

安装epel的源:
rpm -i http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm

安装 kvm 虚拟机软件:
yum -y install kvm virt-manager libvirt libvirt-python python-virtinst libvirt-client bridge-utils

安装openstack 和相应的软件:
yum -y install openstack-nova openstack-glance openstack-keystone openstack-dashboard rabbitmq-server python-pip python-tempita ntp ntpdate

#升级 sqlalchemy
pip-python install -U sqlalchemy

启动 mysql server:
chkconfig mysqld on && service mysqld restart

设置和启动 libvritd:
perl -pi -e “s|#mdns_adv|mdns_adv|” /etc/libvirt/libvirtd.conf
perl -pi -e “s|#auth_unix_rw|auth_unix_rw|” /etc/libvirt/libvirtd.conf

chkconfig libvirtd on && service libvirtd restart
virsh net-autostart default –disable
virsh net-destroy default
启动 ntp 时间同步:
chkconfig ntpd on && service ntpd restart

 

设置用户密码,注意,域名一定要设置正确,否则 rabbitmq-server 无法正常启动。如果不能控制域名服务器:

vi /etc/sysconfig/network

#设置成你要的域名

HOSTNAME=nova.pubyun.com

vi  /etc/hosts

#正确配置域名服务器,或者将域名、IP写入 hosts文件

#IP是你当前机器的IP,域名是你刚才设置的域名

172.16.11.12  nova.pubyun.com nova

 

如果不想重新启动机器,则:

hostname  nova.pubyun.com

启动 rabbitmq-server:

chkconfig rabbitmq-server on && service rabbitmq-server restart
rabbitmqctl change_password guest nova

查看rabbitmq-server的状态:
rabbitmqctl list_exchanges
rabbitmqctl list_queues
rabbitmqctl list_bindings

 

设置 lvm for nova volume:
dd if=/dev/zero of=/var/lib/nova/nova-volumes.img bs=1M seek=20k count=0
vgcreate nova-volumes $(losetup –show -f /var/lib/nova/nova-volumes.img)

设置 nova 的一些参数:
openstack-config-set /etc/nova/nova.conf DEFAULT libvirt_type kvm
openstack-config-set /etc/nova/nova.conf DEFAULT rpc_backend nova.rpc.impl_kombu
openstack-config-set /etc/nova/nova.conf DEFAULT rabbit_host localhost
openstack-config-set /etc/nova/nova.conf DEFAULT rabbit_password nova
openstack-config-set /etc/nova/nova.conf DEFAULT auth_strategy keystone

设置 nova 的数据:
openstack-nova-db-setup

openstack-keystone-db-setup

设置用户名:
cat > keystonerc <<EOF
export ADMIN_TOKEN=$(openssl rand -hex 10)
export OS_USERNAME=admin
export OS_PASSWORD=nova
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://127.0.0.1:5000/v2.0/
EOF

. ./keystonerc

mkdir -p /var/run/keystone
chown keystone.keystone /var/run/keystone/

#启动 keystone
openstack-config-set /etc/keystone/keystone.conf DEFAULT admin_token $ADMIN_TOKEN
chkconfig openstack-keystone on && service openstack-keystone restart

#导入keystone数据:
ADMIN_PASSWORD=$OS_PASSWORD openstack-keystone-sample-data

#查看一下,keystone是否工作:
keystone user-list
keystone tenant-list

#设置、启动 glance
openstack-config-set /etc/glance/glance-api.conf paste_deploy flavor keystone
openstack-config-set /etc/glance/glance-registry.conf paste_deploy flavor keystone
openstack-config-set /etc/glance/glance-api-paste.ini filter:authtoken admin_token $ADMIN_TOKEN
openstack-config-set /etc/glance/glance-registry-paste.ini filter:authtoken admin_token $ADMIN_TOKEN
for svc in api registry; do service openstack-glance-$svc start; done
for svc in api registry; do chkconfig openstack-glance-$svc on; done

for svc in api registry; do service openstack-glance-$svc status; done

grep -i error /var/log/glance/*.log
导入image:
curl http://images.ansolabs.com/tty.tgz | tar -xzv
glance add name=aki-tty is_public=true container_format=aki disk_format=aki < aki-tty/image
glance add name=ari-tty is_public=true container_format=ari disk_format=ari < ari-tty/image
glance add name=ami-tty is_public=true container_format=ami disk_format=ami \
“kernel_id=$(glance index | awk ‘/aki-tty/ {print $1}’)” \
“ramdisk_id=$(glance index | awk ‘/ari-tty/ {print $1}’)” \
< <(zcat –force ami-tty/image)

检查 glance 是否正常工作:
glance index

#启动 nova
sed -i -e ‘s/# \(pipeline = .*\keystone\)/\1/g’ /etc/nova/api-paste.ini
openstack-config-set /etc/nova/api-paste.ini filter:authtoken admin_token $ADMIN_TOKEN
for svc in api cert compute network objectstore scheduler volume; do service openstack-nova-$svc start; done
for svc in api cert compute network objectstore scheduler volume; do chkconfig openstack-nova-$svc on; done

#nova 是否正常工作
nova flavor-list
nova endpoints
. ./keystonerc
USER_ID=$(keystone user-list | awk ‘/admin / {print $2}’)
ACCESS_KEY=$(keystone ec2-credentials-list –user $USER_ID | awk ‘/admin / {print $4}’)
SECRET_KEY=$(keystone ec2-credentials-list –user $USER_ID | awk ‘/admin / {print $6}’)
cat > novarc <<EOF
export EC2_URL=http://localhost:8773/services/Cloud
export EC2_ACCESS_KEY=$ACCESS_KEY
export EC2_SECRET_KEY=$SECRET_KEY
EOF
chmod 600 novarc
. ./novarc

euca-add-keypair nova_key > nova_key.priv
euca-describe-keypairs
nova-manage network create private –multi_host=T –fixed_range_v4=10.9.0.0/16 –num_networks=1 –network_size=256 –bridge=br100 –bridge_interface=eth1

nova-manage floating create –ip_range=192.168.28.32/27

nova keypair-add   –pub_key refactor.pub refactor

nova keypair-list

nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 # to allow ping

nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 # to allow only SSH or do
nova secgroup-add-rule default tcp 1 65535 0.0.0.0/0 # to allow all TCP
nova secgroup-add-rule default udp 1 65535 0.0.0.0/0 # and all UDP
nova secgroup-list-rules default # lists the rules

nova boot –flavor 1 –image  299982b4-97c2-4e1b-88d4-52ef8f0a5b5b –key_name refactor t1

nova floating-ip-create

nova add-floating-ip t1 192.168.28.33

mkdir /var/www/.novaclient

chkconfig httpd on && service httpd restart

 

 

发表在 OpenStack | 标签为 , | 留下评论

Linux下的时钟设置和时区

openstack各个节点时钟同步,是安装的时候,重要步骤。我们所有服务器,在自动安装的时候,在脚本里都设置了自动同步,因为日志、计费等等,都会与时间有关。

一些概念:

1、硬件时钟(也叫BIOS时钟、CMOS时钟)

和CPU和系统无关的,单独由一个电池和晶振运行的时钟,即使关机也会走。

硬件时钟只有当系统启动的时候才会读取。

2、系统时间

Linux内核启动以后的时间,保持一个时间中断,用1970年1月1日00:00:00开始的秒数计数。这是我们平时看到时间。

3、时区

在某个时刻,世界各地的人,看到的时间都不同的。比如你同样适用gmail,大陆的人看到是 20:00,北美的人,可能是07:00.时刻还是一样的,但是由于时区不同,看到的时间显示就不同。

同样,我们机器里,可以系统时间一样的,但是不同的用户,可以设置不同的时区,看到的时间也不同。当然,系统本身有一个缺省时区。

在Redhat或者CentOS下,是使用  /etc/sysconfig/clock里的 ZONE="Asia/Shanghai" 选项配置的

4、UTC/GMT还是本地时间

系统启动的时候,使用/sbin/hwclock 从硬件时钟读取时间,关机的时候,会回写硬件时钟。

这里就有一个问题,读取和回写的时候,采用什么标准,是UTC还是本地时间?

一般情况下,都使用UTC/GMT,这样可以自动处理夏令时间(中国地方太大,已经作废)。

使用UTC的唯一坏处,是当你的计算机是多系统时,如果启动Windows,会导致时间不对。

5、时间同步

一般使用 ntp 协议进行同步,可以保持毫秒级的时差。

 

配置:

1、设置时区和是否UTC

1.1 Redhat或者CentOS下,一个配置文件

/etc/sysconfig/clock

ZONE=”Asia/Shanghai”
UTC=true
ARC=false

1.2 debian/ubuntu,有两个配置文件:

/etc/timezone
Asia/Shanghai
/etc/default/rcS

# assume that the BIOS clock is set to UTC time (recommended)
UTC=yes

1.3 设置用户个人的时区

可以使用环境变量 TZ, 比如,设置中国的东八区:

export TZ=PRC

变量的值,参见:

/usr/share/zoneinfo 目录

2、设置时钟同步

2.1 Redhat或者CentOS下

yum -y install ntpdate ntp

chkconfig  ntpdate on

2.2 debian/ubuntu

apt-get install -y ntpdate ntp

2.3 注意,如果系统时钟和标准原子时钟相差很大,ntp不会同步,第一次的时候,需要使用 ntpdate 进行手工同步一下:

ntpdate time.nist.gov

2.4 两个重要的ntp服务器

中国国家授时中心:

210.72.145.44

美国 nist 授时中心:

time.nist.gov

 

参考:

man clock

 

发表在 DEVOPS | 标签为 | 留下评论

centos 下的openstack

一贯以来,公司都是使用 CentOS,其稳定性值得信赖。

发邮件给 markmc(redhat维护openstack的老大),他说等essex正式发布以后,很快会在 epel 里有 openstack

 

Mark McLoughlin
3月9日 (10 天前)

发送至 pbrady, 彭勇
Hi,

On Thu, 2012-03-08 at 23:17 +0800, 彭勇 wrote:
>
>
> i found the package is in Fedora 17 beta:
>
>
http://fedoraproject.org/wiki/Features/OpenStack_Essex
>
>
> i would like to test it on RHEL6. when will Essex go to EPEL?

We plan on including Essex in EPEL sometime soon after the official
Essex release.

Stay tuned to the Cloud SIG mailing list for more updates:

https://admin.fedoraproject.org/mailman/listinfo/cloud

Cheers,
Mark.

发表在 OpenStack | 标签为 , | 留下评论

openstack遇到问题怎么办

openstack是一个开源云平台,遇到问题怎么办呢?

官方的求助方式:
http://docs.openstack.org/bexar/openstack-compute/admin/content/ch08.html

1、检查日志

openstack的 nova, keystone, glance 等都会产生日志, 日志是发现问题的一个重要手段,也是求助时需要提供的基本资料,否则求助时光说问题,不说症状,社区也无法帮你解决问题。

日志有两种方式,一种是发送到系统的 syslog,一种是发送到文件,也可以两种同时打开。

日志的配置文件和位置,也可以设置日志输出的详细程度参见 /etc/nova/nova.conf 等。比如:

#系统日志级别,详细程度

verbose=True

#日志文件位置
logdir = /var/log/nova

#是否发送到系统 syslog

use_syslog=True

2、查看官方文档

最重要的是仔细、全面阅读官方文档,重要的文档是:

http://docs.openstack.org/

http://wiki.openstack.org/

找社区求助之前,首先全面阅读一下文档,很多问题已经在文档中提到了,可以迎刃而解。同时,网上大量安装文档,由于良莠不齐,而且各个版本的 openstack 的差异也较大,建议还是阅读官方文档。
3、阅读安装脚本
这些安装脚本,将安装过程自动化了,我们可以很轻松地安装出一个openstack。
这些脚本是社区的经验总结和积累,值得好好仔细阅读,并且手工一条一条执行了去安装。
等你仔细阅读完,你会发现,你对openstack熟悉了好多。

http://devstack.org/
https://github.com/managedit/openstack-setup
4、搜索或者递交 bug report
https://bugs.launchpad.net/openstack

遇到解决不了的问题,可以到openstack 的bug库搜索一下,或许就发现有人遇到同样的问题了。
如果确实是系统的一个bug,也可以在这里递交bug,以利于社区对软件的改进。
积极测试,积极递交bug,也是参与开源社区的一种表现。

5、搜索社区问题

https://answers.launchpad.net/openstack/
这里就是一个知识库,大家互助,知识共享。

6、IRC帮助
IRC 是openstack官方的一个求助方式。
freenode.net 服务器上的 #openstack 频道,可以获得帮助。
7、关注微博:
http://weibo.com/refactor

经常会有关于 openstack 的技术信息。

8、加入qq群 和 大陆openstack社区
OpenStack中国社区超级综合群:(QQ ID: 11315737)
http://www.openstack.org.cn

8、阅读代码/修正代码/递交代码
这是终极利器,一切都在代码中。只是要求有点高。

9、靠自己
靠天、靠地、靠社区,最终还要靠自己

发表在 OpenStack | 标签为 , | 留下评论

openstack下的Gerrit 代码评审工具

Gerrit 是谷歌在开发 Android 开源项目上,用的代码评审工具。Gerrit 为 Git 引入的代码审核是强制性的,就是说除非特别的授权设置,向 Git 版本库的推送(Push)必须要经过 Gerrit 服务器,修订必须经过代码审核的一套工作流之后,才可能经批准并纳入正式代码库中。

OpenStack 采用 Gerrit的评审工具和流程,具体可以参见:

http://wiki.openstack.org/GerritWorkflow

使用步骤:

1、在Launchpad 注册一个帐号,并且上传 ssh公钥

2、在 https://review.openstack.org/ 登录, 这个和Launchpad使用统一登录,不再需要注册。联系信息,邮件地址,ssh公钥都同步过来。到设置界面,注意Contact InformationSSH Public Keys 一定要正确

3、配置git递交者信息

git config --global user.name "Firstname Lastname"
git config --global user.email "your_email@youremail.com"
4、设置你在 Launchpad 和 review.openstack.org 的帐号
git config --global --add gitreview.username "ppyy"
5、安装 git review 程序
yum install git-review
apt-get install git-review
6、对项目进行开发
先clone:
git clone git://github.com/openstack/nova.git
做开发分支:
git checkout -b FEATURE_A
修改代码:
。。。。
递交代码:
git commit -a
递交到 review 服务器:
git review
7、如果上一个 patchset 有问题,需要重新递交一个 patchset,则:
git commit -a --amend
如果忘记了 --amend 选项,则会重新递交一个review,而不是一个 patchset

							
发表在 OpenStack | 标签为 | 留下评论