本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihouphp
JmilkFan:minxihou的技术博文方向是 算法&Openstack自动化 ,写得很好,值得推荐。css
这是个在多物理服务器上部署openstack例子:html
你须要一个刚安装好的Linux系统。你能够直接下载最小化的Ubuntu版本,devstack会下载安装全部额外的依赖关系。一样也支持网络安装Fedora,Centos/RHEL.安装几个包用于引导程序配置。前端
apt-get install -y git sudo || yum install -y git sudo
在实验中咱们只须要反复的使用openstack的FlatDHCP网络控制器因此咱们只须要一个单网络。不使用DHCP,要保证网络处在它本身的网段内。主机IP和前端IP池将会设在同一个网段内。以下设置了一个示例:node
* Gateway: 192.168.42.1 * Physical nodes: 192.168.42.11-192.168.42.99 * Floating IPs: 192.168.42.128-192.168.42.254
在每一个节点配置静态IP。对于Ubuntu来讲配置网络须要编辑/etc/network/interfacesmysql
auto eth0
iface eth0 inet static
address 192.168.42.11
netmask 255.255.255.0
gateway 192.168.42.1
对于Fedora,Centos/RHEL版本的Linux来讲修改/etc/sysconfig/network-scripts/ifcfg-eth0:linux
BOOTPROTO=static
IPADDR=192.168.42.11
NETMASK=255.255.255.0
GATEWAY=192.168.42.1
openstack运行须要使用非root用户该用户能够经过sudo来访问root,对于这个非root用户来讲用户名没有特别的限制。在这里咱们使用stack来做为用户名。每一个节点都必须使用相同的用户名(uuid也尽可能保持一致)来部署openstack。若是你在安装系统的时候就设置了用户那你能够直接使用它,用sudo指令进入用户。若是没有建立stack用户的话须要进系统把这个用户建立出来。nginx
groupadd stack
useradd -g stack -s /bin/bash -d /opt/stack -m stack
在安装部署openstack的时候stack用户会修改不少系统的操做,这样咱们须要stack用户拥有sudo到root而且无需输入密码的特权。git
echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
从这里开始使用stack用户。登入和登出都使用stack用户。github
在每一个节点上设置stack的秘钥用于stack访问每一个节点。
mkdir ~/.ssh; chmod 700 ~/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyYjfgyPazTvGpd8OaAvtU2utL8W6gWC4JdRS1J95GhNNfQd657yO6s1AH5KYQWktcE6FO/xNUC2reEXSGC7ezy+sGO1kj9Limv5vrvNHvF1+wts0Cmyx61D2nQw35/Qz8BvpdJANL7VwP/cFI/p3yhvx2lsnjFE3hN8xRB2LtLUopUSVdBwACOVUmH2G+2BWMJDjVINd2DPqRIA4Zhy09KJ3O1Joabr0XpQL0yt/I9x8BVHdAx6l9U0tMg9dj5+tAjZvMAFfye3PJcYwwsfJoFxC8w/SLtqlFX7Ehw++8RtvomvuipLdmWCy+T9hIkl+gHYE4cS3OIqXH7f49jdJf jesse@spacey.local" > ~/.ssh/authorized_keys
找到devstack的最新版
git clone https://git.openstack.org/openstack-dev/devstack
cd devstack
到目前为止以上的操做适用于你要部署集群中的每一个节点。从如今开始在集群控制节点(又名头结点)和计算节点上配置有一些差别。
集群控制节点上跑着全部openstack的服务。在集群控制节点devstack的local.conf文件中作以下配置。
[[local|localrc]]
HOST_IP=192.168.42.11
FLAT_INTERFACE=eth0
FIXED_RANGE=10.4.128.0/20
FIXED_NETWORK_SIZE=4096
FLOATING_RANGE=192.168.42.128/25
MULTI_HOST=1
LOGFILE=/opt/stack/logs/stack.sh.log
ADMIN_PASSWORD=labstack
DATABASE_PASSWORD=supersecret
RABBIT_PASSWORD=supersecret
SERVICE_PASSWORD=supersecret
在多节点的配置文件中子网段前十个IP地址通常预留做为虚机私网网段的IP地址。把以下命令加入到local.sh文件中,在每次stack.sh运行完以后运行local.sh。
for i in `seq 2 10`; do /opt/stack/nova/bin/nova-manage fixed reserve 10.4.128.$i; done
运行devstack的部署脚本。
./stack.sh
在一连串运行以后。当stack.sh部署完成的时候终端会输出一个总结的信息,其中包括了各个端点使用的URL,帐户和密码信息。最近一次运行stack.sh脚本的日志会被存放到stack.sh.log中。
计算节点只运行openstack的计算服务。针对充当计算节点角色的机器,咱们须要添加一个local.conf文件在计算节点的devstack中,配置以下:
[[local|localrc]]
HOST_IP=192.168.42.12 # change this per compute node
FLAT_INTERFACE=eth0
FIXED_RANGE=10.4.128.0/20
FIXED_NETWORK_SIZE=4096
FLOATING_RANGE=192.168.42.128/25
MULTI_HOST=1
LOGFILE=/opt/stack/logs/stack.sh.log
ADMIN_PASSWORD=labstack
DATABASE_PASSWORD=supersecret
RABBIT_PASSWORD=supersecret
SERVICE_PASSWORD=supersecret
DATABASE_TYPE=mysql
SERVICE_HOST=192.168.42.11
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
GLANCE_HOSTPORT=$SERVICE_HOST:9292
ENABLED_SERVICES=n-cpu,n-net,n-api-meta,c-vol
NOVA_VNC_ENABLED=True
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
VNCSERVER_LISTEN=$HOST_IP
VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
注意:n-api-meta服务只是源数据服务api的一个版本。启用这个服务是须要的由于计算节点不会建立到控制节点源数据服务的路由路径。
以后咱们只须要运行./stack.sh
./stack.sh
如今关闭openstack相应的服务已经变得很是简单了,只须要运行 unstack.sh脚本。
./unstack.sh
更加深度的清除工做咱们可使用clean.sh脚本。这种模式清除能够删除掉一些明确有问题的包,而且修改掉原有部署的数据库和消息队列管理器。能够理解为深度清理。
./clean.sh
有些时候正在运行的实例可能没法被清理,Devstack会尝试清除正在运行的实例但有时候仍然须要手动来完成清除操做。
sudo rm -rf /etc/libvirt/qemu/inst*
sudo virsh list | grep inst | awk '{print $1}' | xargs -n1 virsh destroy
devstack建立了两个openstack帐号(一个是admin一个是demo)同时建立了两个对应的project(命名依旧一个是admin一个是demo)。admin的做用就像admin字面意思上同样,一个特权管理帐户这个帐户同时包含在了admin和demo的项目里面。demo帐户做为一个普通用户帐户它只包含在了demo项目里面。经过dashboard咱们能够自定义的建立咱们所须要的openstack帐户。有些时候在dashboard里面建立帐户会比在脚本里面定义建立会更快捷方便一些。尤为你每次执行stack.sh脚本的时候这些设置的帐户就会被再次更改。比较成熟的作法是遵循如下脚本配置:
# Get admin creds
. openrc admin admin
# List existing projects
openstack project list
# List existing users
openstack user list
# Add a user and project
NAME=bob
PASSWORD=BigSecret
PROJECT=$NAME
openstack project create $PROJECT
openstack user create $NAME --password=$PASSWORD --project $PROJECT
openstack role add Member --user $NAME --project $PROJECT
# The Member role is created by stack.sh
# openstack role list
Swift,openstack类储存对象。swift须要大量的存储资源,这个项目在devstack自动化部署的时候是默认禁止的。在devstack中支持swift的最小化安装,这样能够用于测试swift功能。为了真正测试多节点的swift,以下附加的参数设置是必要的。在local.conf文件中写入尽量简单的开启swift配置参数。
enable_service s-proxy s-object s-container s-account
swift是openstack的类存储对象服务,swift将会把它的数据文件存放到SWIFT_DATA_DIR中(设定的默认值/opt/stack/data/swift).划分分区的数据大小由SWIFT_LOOPBACK_DISK_SZIE来肯定(这样其实是挂载了一个本地文件夹供swift来使用)。swift的配置文件由SWIFT_CONF_DIR参数决定(默认值为/ect/swift)。以上所说的这些配置均可以在local.conf文件中经过修改配置项来实现。
devstack会自动使用现有stack-volumes的LVM卷来做为云主机的存储卷。若是stack-volumes不存在,那么devstack会自动建立一个10GB大小的本地卷来做为存储卷使用。这样在openstack建立云主机的时候由于卷的数量和规模而被限制了建立个数和大小。卷的大小能够经过修改local.conf中的VOLUME_BACKING_FILE_SIZE来扩大。
stack-volumes卷能在任何支持Linux的LVM功能的物理机上预先建立出来。卷组名能够经过localrc中的VOLUME_GROUP参数进行修改。想要清除以前运行的内容,部分工做须要依靠stack.sh这个脚本,该脚本能够删除VOLUME_GROUP中以VOLUME_GROUP_PREFIX开头的全部逻辑卷。 在设置VOLUME_GROUP的时候不建议使用根卷组。
建立卷组的细节取决于你所用到的物理服务器,在系统层面上指令以下所示
pvcreate /dev/sdc
vgcreate stack-volumes /dev/sdc
devstack经过使用参数ryslog能够跨节点的来收集日志。默认状况下是这个参数是关闭的,要打开的话须要在local.conf中写入SYSLOG=True.SYSLOG_HOST默认的IP地址继承了HOST_IP参数的IP地址。在计算节点设置收集日志的IP地址必须只想keystone控制节点,这样可以统一的收集日志。如下例子指出如何在计算节点添加输出日志的条目值:
SYSLOG_HOST=192.168.42.11
在stackrc中定义了devstack自动化部署时候所要下载openstack服务所要用到的默认repo源与分支。自从这个文件加入了devstack自动部署文件中咱们只须要在这个文件中设置咱们想使用的repo源和相对应的git分支,则部署的时候就会按照咱们配置的repo和分支生效。可是在stackrc中设定的值都是能够在local.conf中从新定义的。
针对建立一个特定的openstack服务选用不一样的repo源和分支,最简单的办法就是在local.conf文件中修改针对这个服务的*_REPO和*_BARNCH参数。
再修改了repo源和分支以后,若是你在local.conf中没有设置RECLONE参数,则须要从/opt/stack目录中删除相关服务的文件目录,而后用git来从新根据你设定的repo源和分支来从新克隆代码。
例如,我想从nova主分支树下拉取候选发行版的nova分支,可用以下操做:
NOVA_BRANCH=rc-proposed
从一个实验分支下拉取一个glance的分支则须要使用以下参数:
GLANCE_BRANCH=try-something-big
GLANCE_REPO=https://github.com/mcuser/glance.git
如何重置网桥配置
sudo brctl delif br100 eth0.926
sudo ip link set dev br100 down
sudo brctl delbr br100
若是你忘记设置数据库root密码你能够遵循如下作法:
mysqladmin -u root -pnova password 'supersecret'
默认配置动态迁移的URL
[libvirt]
live_migration_uri = qemu+ssh://stack@%s/system
每一个计算节点间因该要互相交换秘钥
1.在“源”主机中root用户的公钥(形如/root/.ssh/id_rsa.pub)须要复制到”目标”服务器stack用户目录认证秘钥文件夹下(~stack/.ssh/authorized_keys)。能够经过手动的在”源”主机中复制目标目录下的文件到”目标”主机对应的文件目录中来实现这个目标。若是你为stack用户作了密码配置一样的能够经过如下的命令来完成秘钥交换。
ssh-copy-id -i /root/.ssh/id_rsa.pub stack@DESTINATION
2.“目标主机”公用的ECDSA秘钥(/etc/ssh/ssh_host_ecdsa_key.pub)须要放入”源”主机的超级用户的known_hosts文件夹中(/root/.ssh/know_hosts).在“源”主机中经过使用如下命令能够完成需求(注意须要使用主机名)
ssh-keyscan -H DEST_HOSTNAME | sudo tee -a /root/.ssh/known_hosts
本质上,作这两步的操做是为了可以让每个计算节点中的root用户公钥存在于其余计算节点stack用户的authorized_keys文件中,其次为了让每一个计算节点中的公共ECDSA秘钥存在于其余计算节点的root用户knows_hosts文件夹中。请注意,若是root或者stack用户没有SSH秘钥,能够用如下命令生成一个:
ssh-keygen -t rsa
以上的配置是必须的当动态迁移设置的参数live_migration_uri是以root身份来使用的”qemu:///system”系列的URL。