Devstack多节点部署实验

本文为博主翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou
这是个在多物理服务器上部署openstack例子:

1 先决条件Linux&网络

1.1 最小化安装系统

你需要一个刚安装好的Linux系统。你可以直接下载最小化的Ubuntu版本,devstack会下载安装所有额外的依赖关系。同样也支持网络安装Fedora,Centos/RHEL.安装几个包用于引导程序配置。

apt-get install -y git sudo || yum install -y git sudo

1.2 网络配置

在实验中我们只需要反复的使用openstack的FlatDHCP网络控制器所以我们只需要一个单网络。不使用DHCP,要保证网络处在它自己的网段内。主机IP和前端IP池将会设在同一个网段内。如下设置了一个示例:

* 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/interfaces

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:

BOOTPROTO=static
IPADDR=192.168.42.11
NETMASK=255.255.255.0
GATEWAY=192.168.42.1

2 安装shake和bake

2.1 添加devstack用户

openstack运行需要使用非root用户该用户可以通过sudo来访问root,对于这个非root用户来说用户名没有特别的限制。在这里我们使用stack来作为用户名。每个节点都必须使用相同的用户名(uuid也尽量保持一致)来部署openstack。如果你在安装系统的时候就设置了用户那你可以直接使用它,用sudo指令进入用户。如果没有创建stack用户的话需要进系统把这个用户创建出来。

groupadd stack
useradd -g stack -s /bin/bash -d /opt/stack -m stack

在安装部署openstack的时候stack用户会修改很多系统的操作,这样我们需要stack用户拥有sudo到root并且无需输入密码的特权。

echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

从这里开始使用stack用户。登入和登出都使用stack用户。

2.2 设置ssh

在每个节点上设置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

2.3 下载devstack

找到devstack的最新版

git clone https://git.openstack.org/openstack-dev/devstack
cd devstack

到目前为止以上的操作适用于你要部署集群中的每个节点。从现在开始在集群控制节点(又名头结点)和计算节点上配置有一些差异。

2.4 配置集群控制节点

集群控制节点上跑着所有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中。

2.5 配置计算节点

计算节点只运行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

2.6 部署完之后的清理工作

现在关闭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

3 stack上增加其他功能性选项

3.1 配置其他用户

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

3.2 Swift节点

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文件中通过修改配置项来实现。

3.3 卷

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

3.4 系统日志

devstack通过使用参数ryslog可以跨节点的来收集日志。默认情况下是这个参数是关闭的,要打开的话需要在local.conf中写入SYSLOG=True.SYSLOG_HOST默认的IP地址继承了HOST_IP参数的IP地址。在计算节点设置收集日志的IP地址必须只想keystone控制节点,这样能够统一的收集日志。以下例子指出如何在计算节点添加输出日志的条目值:

SYSLOG_HOST=192.168.42.11

3.5 使用不同repo源与分支

在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

4 注意事项

4.1 重置网桥

如何重置网桥配置

sudo brctl delif br100 eth0.926
sudo ip link set dev br100 down
sudo brctl delbr br100

4.2 设置MySQL数据库密码

如果你忘记设置数据库root密码你可以遵循以下做法:

mysqladmin -u root -pnova password 'supersecret'

4.3 动态迁移

默认配置动态迁移的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。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
0 说明 0.1 备注 建立文件夹(sparkdir、hadoop、java、scala、spark) 每台机器均有/usr/sparkdir /hadoop /hadoop - 2.7 .2 /java /jdk1 .8 .0 _91 /scala /scala - 2.11 .8 /spark /spark - 1.6 .1 -bin -without -hadoop . tgz 0.2 用户组、用户管理 资源:http://www.cnblogs.com/vincedotnet/p/ 4017574
Ubuntu16.04安装Hadoop2.6+Spark1.6,并安装python开发工具Jupyter notebook,通过pyspark测试一个实例,調通整个Spark+hadoop伪分布式开发环境。 主要内容:配置root用户,配置Hadoop,Spark环境变量,Hadoop伪分布式安装并测试实例,spark安装并通过Jupter notebook进行开发实例,配置Jupter notebook兼容Python2和python3双内核共存开发。 默认已经正确安装了JDK,并设置了JAVA_HOM
摘要 MLlib(机器学习)分两种——监督学习,无监督学习。首先监督学习,类似普贝叶斯这样的分类算法。要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应。显而眼见的是,这种需求另监督学习有很大的局限性,尤其在海量数据处理时。要预先处理数据以满足算法需求得耗费大量资源与时间。此时,可以使用聚类算法这样的无监督学习,相比于分类,聚类不依赖预定义的类和类标号的训练实例。本文将聚类算法拆分开来。深刻理解其思想。 相关知识 相异度计算——聚类,见名之意,便是将数据聚集起来,但是并非是将所有

Kubernetes1.3新特性 - 2016-07-20 14:07:33

本次分析的kubernetes版本号:v1.3.0。 scheduler模块 新增了kube-api-content-type参数,表示scheduler模块发送给api-server的请求类型,默认值是“application/vnd.kubernetes.protobuf”。 新增了hard-pod-affinity-symmetric-weight参数,表示POD调度规则亲和力的权重,取值范围从0到100。 新增了failure-domains参数,这是一个字符串参数,表示POD调度时亲和力参数。在
kafka学习之路(二)——提高 消息发送流程 因为Kafka 内在就是 分布式的 ,一个Kafka 集群通常包括多个代理。 为了均衡负载,将话题分成多个分区 , 每个代理存储一或多个分区 。 多个生产者和消费者能够同时生产和获取消息 。     过程: 1.Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里面 2.kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关
(上图 2016微软全球合作伙伴大会吸引了144个国家的云解决方案商参会 ) ​2016年7月14日,历时三天的微软全球合作伙伴大会WPC 2016在加拿大多伦多落下帷幕,来自全球144个国家的16,000名软件开发商(ISV)、系统集成商(SI)、增值分销商(VAR)以及新一代云服务商(CSP)等汇聚一堂,他们也是全球最活跃、最顶尖的云计算生态代表。 在本次合作伙伴大会上,微软发布了合作伙伴“红宝书”——《当代微软合作伙伴系列:解决方案商如何在云世纪成功》。这本与IDC合作的书,历时4年完成,每年耗资上

Hadoop使用学习笔记(1) - 2016-07-19 18:07:38

Hadoop使用学习笔记 1.Hadoop安装与基本概念 Hadoop发行版本地址 1.1环境配置需求 本文是用的Hadoop版本是最新的2.7.2发行版。 本文分两个机器环境,分别是研发环境和测试环境: 本地环境配置(配置较好,用于压测): 操作系统: LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0
本文主要描述了朴素贝叶斯分类方法,包括模型导出和学习描述。实例部分总结了《machine learning in action》一书中展示的一个该方法用于句子感情色彩分类的程序。 1 方法概述 学习(参数估计) 实现:朴素贝叶斯下的文本分类 模型概述 朴素贝叶斯方法,是指 朴素:特征条件独立 贝叶斯:基于贝叶斯定理 根据贝叶斯定理,对一个分类问题,给定样本特征x,样本属于类别y的概率是 p ( y | x ) = p ( x | y ) p ( y ) p ( x ) 。 。 。 。 。 。 ( 1 )
更新记录 2017-07-18 初稿 MapReduce简介 在Hadoop MapReduce中,框架会确保reduce收到的输入数据是根据key排序过的。数据从Mapper输出到Reducer接收,是一个很复杂的过程,框架处理了所有问题,并提供了很多配置项及扩展点。一个MapReduce的大致数据流如下图: 更详细的MapReduce介绍参考 Hadoop MapReduce原理与实例 。 Mapper的输出排序、然后传送到Reducer的过程,称为shuffle。本文详细地解析shuffle过程,深

Spark的广播和累加器的使用 - 2016-07-18 14:07:48

一、广播变量和累加器 1.1 广播变量: 广播变量允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量。广播变量可被用于有效地给每个节点一个大输入数据集的副本。Spark还尝试使用高效地广播算法来分发变量,进而减少通信的开销。 Spark的动作通过一系列的步骤执行,这些步骤由分布式的洗牌操作分开。Spark自动地广播每个步骤每个任务需要的通用数据。这些广播数据被序列化地缓存,在运行任务之前被反序列化出来。这意味着当我们需要在多个阶段的任务之间使用相同的数据,或者以反序列化形式缓存数据是十分