华为S9303多VLAN做DHCP relay

机房的核心交换机S9303上划分了多个VLAN,这些VLAN需要使用DHCP自动获取IP地址。

如何使用一个DHCP服务器给多个VLAN分配IP,网上有不少资料,但是有一些设置比较繁琐,比如需要做trunk到DHCP服务器,然后DHCP服务器的网卡,需要创建多个VLAN子网卡。经过测试,下面是一个方便简化的方法:

1、华为S9303上的设置

设置到DHCP服务器的接口,其中vlan100是dhcp所在vlan

interface Vlanif100
 description TO DHCP Server
 ip address 172.16.255.2 255.255.255.252

interface GigabitEthernet2/1/23
 description to DHCP Server
 port hybrid pvid vlan 100
 port hybrid untagged vlan 100

打开 DHCP relay

dhcp server group dhcp-srv
 dhcp-server 172.16.255.1 0

dhcp enable

然后在每一个需要做dhcp的vlan里加入:

interface Vlanif90
 description office
 ip address 192.168.29.1 255.255.255.0
 dhcp select relay
 dhcp relay server-select dhcp-srv

2、设置 dhcp 服务器

dhcp服务器采用ubuntu,单网卡,配置一个IP:

vi /etc/network/interfaces
auto eth0
iface eth0 inet static
    address 172.16.255.1
    netmask 255.255.255.252

dhcp的配置文件,注意

采用 shared-network 包含多个subnet,所有需要获取地址的vlan,都要单独一个 subnet
网卡所在地址段172.16.255.0,也必须配置一个空的 subnet,否则无法启动

shared-network pubyun {
    next-server 192.168.29.2;
    filename "/pxelinux.0";

    # 必须有,否则无法启动
    subnet 172.16.255.0 netmask 255.255.255.0 {
    }
    #每个 vlan 一个 subnet
    subnet 172.16.0.0 netmask 255.255.255.0 {
        option routers 172.16.0.1;
        range 172.16.0.200 172.16.0.240;
    }

    subnet 192.168.29.0 netmask 255.255.255.0 {
        option routers 192.168.29.1;
        range 192.168.29.128 192.168.29.199;
    }
}
发表在 DEVOPS | 留下评论

ubuntu 下的 locale

查看所有安装的 locale:

locale -a

编辑配置文件,改为zh_CN.UTF-8

sudo nano /etc/default/locale
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN.zh"

如果没有zh_CN,则需要手工安装:

$cd /usr/share/locales
$sudo ./install-language-pack zh_CN
发表在 DEVOPS | 留下评论

openstack 的调度策略

https://www.ibm.com/developerworks/mydeveloperworks/blogs/e93514d3-c4f0-4aa0-8844-497f370090f5/entry/openstack_nova_scheduler_and_its_algorithm27?lang=en

这是IBM中国研究院的YongShengGong 写的一个分析文章,比较仔细。回头得仔细看一下。

发表在 OpenStack | 留下评论

OpenStack的EPEL 包中启动顺序的问题

目前,OpenStack 的软件包,已经进入EPEL 测试阶段。

发现/etc/init.d 下的启动顺序有问题,都采用了 20, 80的方式:

#!/bin/sh
#
# openstack-nova-api OpenStack Nova API Server
#
# chkconfig: – 20 80
# description: At the heart of the cloud framework is an API Server. \
# This API Server makes command and control of the \
# hypervisor, storage, and networking programmatically \
# available to users in realization of the definition \
# of cloud computing.

这样,启动OpenStack的服务,将比 mysql, rabbitMQ, libvirtd 等服务还要前,这样的启动次序经常导致OpenStack服务启动不成功。

已经发送了邮件给RedHat开发人员,Pádraig Brady确认将做修改。变成 98 02.

发表在 OpenStack | 留下评论

openstack日志信息的国际化(i18n)

目前 OpenStack 的日志信息,是采用国际化语言提示的,这样会有一些问题。我在邮件列表发了一个信息,建议采用英文提示信息,原因如下:

1、英文日志信息,更加便于用户共享和查找问题。我们可以方便地在搜索引擎检索错误信息,可以将日志信息发送到邮件列表供讨论。如果采用国际化的日志信息,不便于大家交流和共享。

2、如果采用国际化的提示信息,对于开发人员来说,维护会困难得多,修改一个提示信息,需要修改很多版本的语言资源文件,这个对于开源项目来说是一个不小的负担。

3、日志信息不像界面提示,对于管理员才可见,出了问题才会去查日志,所以英文不是障碍。更重要的是用日志来检索和共享。

Andrew Hutchings回了一个邮件,提到:

1、开发峰会已经涉及这个议题

http://etherpad.openstack.org/FolsomI18N

谈到邮件列表里曾经提到不要采用国际化日志信息,但是会议上说要(特别是中国的系统管理员)。是否需要一个投票?相比较apache的项目

> The information in there says “mailing list says no, feedback from
> session says yes (especially requested by operators in china) – need a
> vote? compare to apache projects…”

我们有500多人的OpenStack社区,可以发起一个讨论或者投票。

2、Oracle处理日志信息,采用的是问题编号,比如 ORA-01000,这样也便于共享或者检索。
但是这种方式,还是要维护国际化资源文件,对于开源项目,维护困难。

> I do also remember a suggestion of translated error messages and a
> common error code (such as NOV1234 I guess?) to use in places such as a
> Google search (such as MySQL does). You could then search for the
> translated error message or the code if you feel your language skills
> are good enough to get multi-lingual results.

发表在 OpenStack | 留下评论

ubuntu 下修改 mysql 库文件目录不能启动

/var的目录过小,按照公司的安装习惯,将mysql 的 datadir切换到 /home/mysql,发现无法启动,日志中出现:

Apr 30 21:56:03 n1 kernel: [41411.680225] init: mysql post-start process (31902) terminated with status 1
Apr 30 21:56:03 n1 kernel: [41411.691791] type=1400 audit(1335794163.366:298): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=31935 comm="apparmor_parser"
Apr 30 21:56:03 n1 kernel: [41411.707244] type=1400 audit(1335794163.382:299): apparmor="DENIED" operation="mknod" parent=1 profile="/usr/sbin/mysqld" name="/home/mysql/n1.lower-test" pid=31939 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0
Apr 30 21:56:03 n1 kernel: [41411.707381] type=1400 audit(1335794163.382:300): apparmor="DENIED" operation="mknod" parent=1 profile="/usr/sbin/mysqld" name="/home/mysql/n1.lower-test" pid=31939 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0
Apr 30 21:56:03 n1 kernel: [41411.711149] type=1400 audit(1335794163.386:301): apparmor="DENIED" operation="open" parent=1 profile="/usr/sbin/mysqld" name="/home/mysql/mysql/plugin.frm" pid=31939 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=107 ouid=107
Apr 30 21:56:03 n1 kernel: [41411.736333] type=1400 audit(1335794163.410:302): apparmor="DENIED" operation="open" parent=1 profile="/usr/sbin/mysqld" name="/home/mysql/ibdata1" pid=31939 comm="mysqld" requested_mask="rw" denied_mask="rw" fsuid=107 ouid=107

原来是 apparmor 做了限制。AppArmor 是内核的一个安全增强模块,对程序存取资源进行限制。解决方法:

vi /etc/apparmor.d/usr.sbin.mysqld

/home/mysql/ r,
/home/mysql/** rwk,

重新启动mysql,正常。

发表在 DEVOPS | 留下评论

本地ssh非标准端口时,连接github.com

针对公网上的服务器的检查,在日志中会发现大量针对22端口(ssh)的非法扫描。为了增强安全性,减少这些扫描,我们将服务器的ssh端口改成了一个非标准的端口。

这时,连接github时,会出现错误,无法连接:

#git pull
ssh: connect to host github.com port xxxxx: Connection refused
fatal: The remote end hung up unexpectedly

解决方法,编辑一个 ssh 的config文件:

$vim ~/.ssh/config
Host github.com
HostName github.com
Port 22

测试一下:

$ssh  -T git@github.com
Hi pubyun! You've successfully authenticated, but GitHub does not provide shell access.
$git pull
Current branch master is up to date.
发表在 DEVOPS | 留下评论

RHEL 6.3 的一些重要改进

Red Hat Enterprise Linux 6.3 Beta已经发布了,一些重要的改进:

1、虚拟化

  • 提供一个 Virt-P2V工具,可以将windows和RedHat Linux的物理机转换成虚拟机,使用KVM进行部署。
  • 可以进行文件卷的在线resizing,提高了虚拟机的可用性
  • 增强qcow2磁盘镜像的存储性能,存取更加异步,从而降低vCPU占用和提高整体性能
  • 对虚拟机进行性能监控,采用vPMU,可以在主机上诊断虚拟机的性能。
  • 动态的vCPUs分配,不再需要重启,这个对计算资源伸缩有利(什么时候对内存可以在线伸缩?)
  • 虚拟机的休眠状态,支持S3、S4(休眠到磁盘、休眠到内存)

2、伸缩性

  • 最多支持的虚拟CPU数(vCPUs),从64提高到了160
  • 虚拟机支持的最多内存从512MB提高到2TB
以上两条,觉得是RedHat摆的噱头,没有太多实际意义,不断挤牙膏

3、存储

  • 全面支持FCoE,该特性还是预览测试阶段
  • LVM支持 raid4, 5, 6(以前这些raid是依靠MD来支持的),这样将存储管理的常见功能(创建卷、增缩卷大小、创建Raid、创建快照等)集成在一个界面里,简化了存储管理。该特性还是预览测试阶段
  • LVM支持 thin provisioned logical volumes(按需分配逻辑卷)。之前存储空间都是在创建的时候分配的,需要监控文件系统使用情况,手工增加卷空间。现在可以自动按需分配,自动扩展,不再需要人工干预。该特性还是预览测试阶段

4、支持 OpenJDK 7

5、Mysql InnoDB 的插件支持

这个插件,比内置的InnoDB引擎提供更多功能和更好的性能

 

发表在 DEVOPS | 留下评论

什么是openstack的 metadata

metadata字面上是元数据,是一个不容易理解的概念。在除了openstack的其他场合也经常会碰到。openstack里的metadata,是提供一个机制给用户,可以设定每一个instance 的参数。

具体可以参见openstack的相关api和以下的蓝图:

https://blueprints.launchpad.net/nova/+spec/openstack-api-metadata

比如你想给instance设置某个属性,比如主机名。metadata的一个重要应用,是设置每个instance的ssh公钥。公钥的设置有两种方式:

1、创建instance时注入文件镜像

2、启动instance后,通过metadata获取,然后用脚本写入

第二种方式更加灵活,可以给非root用户注入公钥。以下是获取ssh key的代码片段:

# Fetch public key using HTTP
ATTEMPTS=10
while [ ! -f /root/.ssh/authorized_keys ]; do
    curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/aws-key 2>/dev/null
    if [ \$? -eq 0 ]; then
        cat /tmp/aws-key >> /root/.ssh/authorized_keys
        chmod 0600 /root/.ssh/authorized_keys
        restorecon /root/.ssh/authorized_keys
        rm -f /tmp/aws-key
        echo "Successfully retrieved AWS public key from instance metadata"
    else
        FAILED=\$((\$FAILED + 1))
        if [ \$FAILED -ge \$ATTEMPTS ]; then
            echo "Failed to retrieve AWS public key after \$FAILED attempts, quitting"
            break
        fi
        echo "Could not retrieve AWS public key (attempt #\$FAILED/\$ATTEMPTS), retrying in 5 seconds..."
        sleep 5
    fi
done

可以看到,获取metadata的api接口是:

http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key

可是,这个IP地址,在我们 openstack 是不存在的。为什么可以获取到metadata呢?

这是由于Amazon的原因,最早metadata是亚马逊提出来的,参见:

http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html

后来很多人给亚马逊定制了一些操作系统的镜像,比如 ubuntu, fedora, centos 等等,而且将里面获取 metadta 的api地址也写死了。所以opentack为了兼容,保留了这个地址 169.254.169.254。然后通过iptables nat映射到真实的api上:

iptables -A nova-network-PREROUTING -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.4:8775

使用metadata会带来便利,但是经常碰到的一个问题是,metadata获取不成功,导致instance启动很慢,并且获取失败会导致ssh key等功能设置失效,刚才获取ssh的代码片段中,就是尝试10次。需要注意的是:

1、在 network 上,正确设置相关参数,在 /etc/nova/nova.conf 里配置:

metadata_host=10.0.0.4

这里的 10.0.0.4 是api所在的内网地址

2、network上,要能够连接这个api地址 10.0.0.4

3、由于 api 判断instance是通过fix ip 来判断的,所以instance的fix ip地址段,一定要能够正确连接 api 所在 ip, 并且没有经过 nat 地址转换。否则不能正确获取instance 的metadata

openstack 的 metadata获取,我修正了一个bug:

https://review.openstack.org/#/c/5961/

https://code.launchpad.net/bugs/968453

但是,在某些场合,管理地址分开的情况下,还有bug, 需要继续改进:

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

发表在 OpenStack | 留下评论

阿里云分享摘要

昨天阿里云弹性计算平台的郑永升,做了《阿里云弹性计算产品》的分享,主要介绍了阿里云弹性计算产品,并重点介绍自己在弹性计算产品运维中积累的安全防护以及集群管理方面的经验。下面是一些摘要:

http://vdisk.weibo.com/s/4tTcO

  • 阿里云使用的是自己开发的分布式操作系统飞天(Apsara),底层的分布式文件系统,解决了不同主机上虚拟机的迁移问题
  • 目前主要的销售渠道,在万网和阿里、淘宝的一些客户。万网相当于阿里云的一个销售。这是一个不错的组合。
  • 目前,阿里云的用户数,大概在一万
  • DDOS攻击现在是一个常态,阿里每天现在遭受数十次DDOS攻击,采用流量清洗和黑洞来解决。自动检测异常流量,然后触发清洗和黑洞。
  • 云计算环境下,安全是一个大问题。阿里每天现在除了DDOS,还每天新增100+以上的被挂马,windows RDP高危漏洞
  • 目前,用户中,windows操作系统占50%以上,但是Linux的增长迅速
  • 云计算下,硬件故障成为常态,每个月迁移100+次,硬盘年故障率1.62%
  • 30%的服务请求(工单)是由于用户的误操作导致的(比如修改fstab)
发表在 DEVOPS | 标签为 | 留下评论