0%

预检

ceph 集群采用如下的架构:

安装 Ceph 部署工具(管理节点)

添加向管理节点上添加 Ceph 仓库,然后安装 ceph-deploy 工具。

  1. 添加并启用 EPEL 仓库:

    1
    [root@admin-node ~]# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  1. 向 yum 配置文件中添加 Ceph 仓库,yum 配置文件在 /etc/yum.repos.d/ceph.repo

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@admin-node ~]# vim /etc/yum.repos.d/ceph.repo

    [ceph-noarch]
    name=Ceph noarch packages
    baseurl=https://download.ceph.com/rpm/el7/noarch
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://download.ceph.com/keys/release.asc
  2. 更新仓库并安装 ceph-deploy 工具:

    1
    2
    [root@admin-node ~]# yum update
    [root@admin-node ~]# yum install ceph-deploy

Ceph 节点安装

安装 NTP

1
2
3
4
5
6
[root@ceph_node ~]# yum install ntp ntpdate ntp-doc
[root@ceph_node ~]# ntpdate pool.ntp.org
[root@ceph_node ~]# systemctl restart ntpdate
[root@ceph_node ~]# systemctl restart ntpd
[root@ceph_node ~]# systemctl enable ntpd
[root@ceph_node ~]# systemctl enable ntpdate

安装 SSH 服务器

1
2
[root@ceph_node ~]# sudo yum install openssh-server
[root@ceph_node ~]# systemctl status sshd # 确保 SSH 服务器在所有 Ceph 节点上运行

创建一个 Ceph 部署用户

  1. 在每个 Ceph 节点上创建一个新用户(storage):

    1
    2
    [root@ceph_node ~]# useradd -d /home/storage -m storage
    [root@ceph_node ~]# passwd storage
  2. 确保用户具有 sudo 特权:

    1
    2
    [root@ceph_node ~]# echo "storage ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/storage
    [root@ceph_node ~]# sudo chmod 0440 /etc/sudoers.d/storage

开启无密码 SSH(管理节点)

  1. 生成 SSH 密钥,但是不要用 sudo 或者 root 用户。口令保留为空。

    1
    2
    3
    4
    5
    6
    7
    8
    [storage@admin-node ~]$ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/storage/.ssh/id_rsa):
    Created directory '/home/storage/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/storage/.ssh/id_rsa.
    Your public key has been saved in /home/storage/.ssh/id_rsa.pub.
  2. 复制密钥到各个 Ceph 节点。

    1
    2
    3
    [storage@admin-node ~]$ ssh-copy-id storage@controller
    [storage@admin-node ~]$ ssh-copy-id storage@compute01
    [storage@admin-node ~]$ ssh-copy-id storage@compute02

这里官方文档建议可以修改 ~/.ssh/config 文件,把用户名写进去,这样在 ceph-deploy 时就不用指定用户名,事实证明,这个方法无效,会提示拒绝访问。还是指定用户名比较好。

关闭防火墙和 SELINUX

1
2
3
4
5
[root@ceph_node ~]# systemctl stop firewalld
[root@ceph_node ~]# systemctl disable firewalld
[root@ceph_node ~]# setenforce 0
[root@ceph_node ~]# vim /etc/selinux/config
SELINUX=disabled

安装优先软件包

1
[root@ceph_node ~]# yum install yum-plugin-priorities

快速安装存储集群

先在管理节点上创建一个目录,这样,所有生成的文件都会保存在该目录下。

1
2
[storage@admin-node ~]$ mkdir my-cluster
[storage@admin-node ~]$ cd my-cluster

不要用 sudo 或者 root 用户执行 ceph-deploy 命令,因为它不会在远程主机上调用所需的 sudo 命令。

从头开始

如果在某些地方遇到麻烦,可以执行下面的命令从头开始。

1
2
3
4
[storage@admin-node ~]$ ceph-deploy --username storage purge {ceph-node} [{ceph-node}]
[storage@admin-node ~]$ ceph-deploy --username storage purgedata {ceph-node} [{ceph-node}]
[storage@admin-node ~]$ ceph-deploy forgetkeys
[storage@admin-node ~]$ rm ceph*

创建集群

  1. 创建集群。先初始化监控节点。

    1
    [storage@admin-node my-cluster]$ ceph-deploy --username storage new controller

    查看输出 ls 你可以看到一个 Ceph 配置文件 ceph.conf 一个监控密钥环 ceph.mon.keyring 还有一个日志文件。

    1
    2
    [storage@admin-node my-cluster]$ ls
    ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
  2. 安装 Ceph 软件包。

    1
    [storage@admin-node my-cluster]$ ceph-deploy --username storage install controller compute01 compute02
  3. 配置初始 monitor 并收集密钥环。

    1
    [storage@admin-node my-cluster]$ ceph-deploy mon create-initial

    官方文档说会有以下输出:

    • ceph.client.admin.keyring
    • ceph.bootstrap-mgr.keyring
    • ceph.bootstrap-osd.keyring
    • ceph.bootstrap-mds.keyring
    • ceph.bootstrap-rgw.keyring
    • ceph.bootstrap-rbd.keyring

    但是我的输出是下面的:

    1
    2
    3
    4
    [storage@admin-node my-cluster]$ ls
    ceph.bootstrap-mds.keyring ceph.client.admin.keyring
    ceph.bootstrap-osd.keyring
    ceph.bootstrap-rgw.keyring
  4. 复制配置文件和管理密钥到管理节点和 Ceph 节点,这样你就可以使用 ceph CLI ,而不用每次都需要指定 monitor 的地址和 ceph.client.admin.keyring 。

    1
    [storage@admin-node my-cluster]$ ceph-deploy --username storage admin controller compute01 compute02
  5. 添加三个 OSD。经过试验新版本的 Ceph OSD 进程只能装在空硬盘上,安装在目录上和分区上会失败。(据说之前的版本不需要,我装的 J 版本,10.2.10,但我试验了 H 版本,最终失败了,所以就选择在虚拟机里部署。)安装在空分区上经过如下步骤:

    1
    2
    [storage@admin-node my-cluster]$ ceph-deploy --username storage osd prepare controller:/dev/sda3 compute01:/dev/sda3 compute02:/dev/sda3
    [storage@admin-node my-cluster]$ ceph-deploy --username storage osd activate controller:/dev/sda3 compute01:/dev/sda3 compute02:/dev/sda3

    报错:

    1
    2
    3
    4
    5
    6
    [controller][WARNIN] ceph_disk.main.Error: Error: ['ceph-osd', '--cluster', 'ceph', '--mkfs', '--mkkey', '-i', u'2', '--monmap', '/var/lib/ceph/tmp/mnt.uidkdf/activate.monmap', '--osd-data', '/var/lib/ceph/tmp/mnt.uidkdf', '--osd-journal', '/var/lib/ceph/tmp/mnt.uidkdf/journal', '--osd-uuid', u'ade546d3-e1fa-4dd4-b5a5-f9fb8f145841', '--keyring', '/var/lib/ceph/tmp/mnt.uidkdf/keyring', '--setuser', 'ceph', '--setgroup', 'ceph'] failed : 2017-10-23 11:02:08.694483 7f69e5898800 -1 filestore(/var/lib/ceph/tmp/mnt.uidkdf) mkjournal error creating journal on /var/lib/ceph/tmp/mnt.uidkdf/journal: (13) Permission denied
    [controller][WARNIN] 2017-10-23 11:02:08.694495 7f69e5898800 -1 OSD::mkfs: ObjectStore::mkfs failed with error -13
    [controller][WARNIN] 2017-10-23 11:02:08.694536 7f69e5898800 -1 ** ERROR: error creating empty object store in /var/lib/ceph/tmp/mnt.uidkdf: (13) Permission denied
    [controller][WARNIN]
    [controller][ERROR ] RuntimeError: command returned non-zero exit status: 1
    [ceph_deploy][ERROR ] RuntimeError: Failed to execute command: /usr/sbin/ceph-disk -v activate --mark-init systemd --mount /dev/sda3
  6. 由于我的物理机只有一块硬盘,最终不得不选择在虚拟机中部署集群。在虚拟机中添加了一块硬盘,部署 OSD:

    注意,以下是我在虚拟机中重新按照之前的步骤部署的。主机名分别设置为 node1,node2,node3

    1
    ceph-deploy osd create node1:vdb node2:vdb node3:vdb

    节点分区情况如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@node1 ~]# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sr0 11:0 1 1024M 0 rom
    vda 252:0 0 9G 0 disk
    ├─vda1 252:1 0 1G 0 part /boot
    └─vda2 252:2 0 8G 0 part
    ├─centos_admin--node-root 253:0 0 7.1G 0 lvm /
    └─centos_admin--node-swap 253:1 0 924M 0 lvm [SWAP]
    vdb 252:16 0 300G 0 disk
    ├─vdb1 252:17 0 295G 0 part /var/lib/ceph/osd/ceph-0
    └─vdb2 252:18 0 5G 0 part
  7. 检查集群的健康状态。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@node1 ~]# ceph health
    HEALTH_OK
    [root@node1 ~]# ceph -s
    cluster e8b7ae85-8d03-4160-becc-10df8f385c59
    health HEALTH_OK
    monmap e1: 1 mons at {node1=192.168.0.211:6789/0}
    election epoch 4, quorum 0 node1
    osdmap e23: 3 osds: 3 up, 3 in
    flags sortbitwise,require_jewel_osds
    pgmap v48: 64 pgs, 1 pools, 0 bytes data, 0 objects
    101 MB used, 884 GB / 884 GB avail
    64 active+clean

LVM 结构图

空白磁盘的 LVM 配置

1、parted 查看磁盘的未分区空间

2、fdisk 对空白磁盘进行分区(也可使用 parted 命令分区)

3、fdisk 将 systemID 修改为LVM标记(8e)

4、partprobe 更新系统分区表

5、pvcreat 将 Linux 分区处理成物理卷 PV

6、vgcreate 将 PV 处理成 VG,或者 vgextend,将某个物理卷添加进 VG

7、lvcreate 将卷组分成若干个逻辑卷 LV

8、mkfs.xfs 将 LV 格式化,挂载格式化后的 LV 到文件系统

管理文件系统空间

增大空间

  1. umount 先卸载逻辑卷
  2. 通过 vgextend,lvextend 增大 LV 空间
  3. 再使用 resize2fs 将逻辑卷容量增加
  4. mount 重新挂载

减小空间

  1. umount 卸载逻辑卷
  2. 使用 resize2fs 将逻辑卷容量减小
  3. vgreduce,lvreduce 减小 LV
  4. mount 重新挂载

LVM 管理命令

物理卷(PV)管理

1
2
3
4
pvcreate 创建物理卷 # pvcreate /dev/sda6
pvremove 删除物理卷
pvscan 查看物理卷信息
pvdisplay 查看各个物理卷的详细参数

卷组(VG)管理

1
2
3
4
5
6
vgcreate 创建卷组
vgscan 查看卷组信息
vgdisplay 查看卷组详细参数
vgreduce 缩小卷组,把某个物理卷删除
vgextend 扩展卷组,把某个物理卷添加到卷组
vgremove 删除卷组

逻辑卷(LV)管理

1
2
3
4
5
6
7
lvcreate 创建逻辑卷
lvscan 查看逻辑卷信息
lvdisplay 查看逻辑卷具体参数
lvextend 增大逻辑卷大小
lvreduce 减小逻辑卷大小
lvremove 删除逻辑卷
lvs 查看逻辑卷属性信息

快照管理

创建快照

创建快照需要注意:

  1. VG 中需要预留存放快照本身的空间,不能全部被占满。
  2. 快照所在的 VG 必须与被备份的 LV 相同,也就是说,快照存放的位置必须与被照卷存放在同一个 VG 上。否则快照会失败。

为根分区创建快照:

1
2
3
[root@controller ~]# lvcreate -L 10G -s -n root_orign_backup /dev/centos_controller/root 
Using default stripesize 64.00 KiB.
Logical volume "root_orign_backup" created.

恢复快照

要恢复快照,我们首先需要卸载文件系统。注意,要卸载被恢复的文件系统。

只想检查挂载点是否卸载成功,可以使用下面的命令。

1
df -h

卸载之后恢复快照:

1
# lvconvert --merge /dev/centos_controller/root_orign_backup

在合并完成后,快照卷将被自动移除。

自动扩展

要自动扩展快照,我们可以通过修改配置文件来进行。对于手动扩展,我们可以使用lvextend。

1
# vim /etc/lvm/lvm.conf

搜索单词 autoextend。

修改此处的100为75,这样自动扩展的起始点就是75,而自动扩展百分比为20,它将自动扩容百分之20。

一些磁盘管理命令

lsblk:查看分区情况

1
2
3
4
5
6
7
8
9
[root@controller ~]# lsblk 
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 153.4G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 115.6G 0 part
│ ├─centos_controller-root 253:0 0 100G 0 lvm /
│ ├─centos_controller-swap 253:1 0 5.6G 0 lvm [SWAP]
│ └─centos_controller-home 253:2 0 10G 0 lvm /home
└─sda3 8:3 0 36.8G 0 part

df -h:查看可用空间

1
2
3
4
5
6
7
8
9
10
[root@controller ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos_controller-root 100G 1022M 99G 1% /
devtmpfs 2.7G 0 2.7G 0% /dev
tmpfs 2.7G 0 2.7G 0% /dev/shm
tmpfs 2.7G 8.6M 2.7G 1% /run
tmpfs 2.7G 0 2.7G 0% /sys/fs/cgroup
/dev/sda1 1014M 143M 872M 15% /boot
/dev/mapper/centos_controller-home 10G 33M 10G 1% /home
tmpfs 551M 0 551M 0% /run/user/0

fdisk:分区命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@controller ~]# fdisk -l

Disk /dev/sda: 164.7 GB, 164696555520 bytes, 321672960 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0000bfc8

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 244592639 121246720 8e Linux LVM
/dev/sda3 244592640 321672959 38540160 8e Linux LVM

Disk /dev/mapper/centos_controller-root: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos_controller-swap: 6039 MB, 6039797760 bytes, 11796480 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos_controller-home: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

parted:与fdisk类似

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@controller ~]# parted
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help
align-check TYPE N check partition N for TYPE(min|opt) alignment
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END make a partition
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular partition
quit exit program
rescue START END rescue a lost partition near START and END
rm NUMBER delete partition NUMBER
select DEVICE choose the device to edit
disk_set FLAG STATE change the FLAG on selected device
disk_toggle [FLAG] toggle the state of FLAG on selected device
set NUMBER FLAG STATE change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER
unit UNIT set the default unit to UNIT
version display the version number and copyright information of GNU Parted

环境

安装系统

最小化安装一个操作系统,这里选择 CentOS 7。

安装 git:

1
yum install -y git

网络

controller:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# vim /etc/sysconfig/network-scripts/ifcfg-enp4s0

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp4s0"
UUID="ccf32c18-b4a6-40b8-ae09-06dc4148d42f"
DEVICE="enp4s0"
ONBOOT="yes"
IPADDR="192.168.0.201"
PREFIX="24"
GATEWAY="192.168.0.1"
DNS1="210.41.224.33"
DNS2="192.168.5.1"
IPV6_PRIVACY="no"

compute01:

1
IPADDR="192.168.0.202"

compute02:

1
IPADDR="192.168.0.202"

安装 shake 和 bake

添加 DevStack 用户

每个节点都要使用同样的名字。

1
useradd -s /bin/bash -d /opt/stack -m stack

stack 用户会对系统造成很大的改变,需要无密码的 sudo 权限:

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

现在开始使用 stack 用户,退出并以 stack 登录:

1
su - stack

设置 SSH

在每个节点上设置 stack 用户具有 ssh 权限:

1
2
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 脚本

下载最新版本的 devstack:

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

到目前为止,所有的步骤都适用于所有节点。从现在开始,控制节点和计算节点之间会有一些不同。

配置控制节点

控制节点运行 OpenStack 所有的服务,在 devstack 下创建 local.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[stack@contorller devstack]$ vim local.conf

[[local|localrc]]
HOST_IP=192.168.0.211
FLAT_INTERFACE=ens33
FIXED_RANGE=10.4.128.0/20
FIXED_NETWORK_SIZE=4096
FLOATING_RANGE=192.168.0.220/29
MULTI_HOST=1
LOGFILE=/opt/stack/logs/stack.sh.log
ADMIN_PASSWORD=root
DATABASE_PASSWORD=root
RABBIT_PASSWORD=root
SERVICE_PASSWORD=root

在多节点配置中,私有子网的前十个 IP 通常保留,运行完 stack.sh 脚本之后运行:

1
for i in `seq 2 10`; do /opt/stack/nova/bin/nova-manage fixed reserve 10.4.128.$i; done

开始安装:

1
./stack.sh

配置计算节点

计算节点只运行工作服务,对其他的机器,创建 local.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[[local|localrc]]
HOST_IP=192.168.0.212 # change this per compute node
FLAT_INTERFACE=ens33
FIXED_RANGE=10.4.128.0/20
FIXED_NETWORK_SIZE=4096
FLOATING_RANGE=192.168.0.220/29
MULTI_HOST=1
LOGFILE=/opt/stack/logs/stack.sh.log
ADMIN_PASSWORD=root
DATABASE_PASSWORD=root
RABBIT_PASSWORD=root
SERVICE_PASSWORD=root
DATABASE_TYPE=mysql
SERVICE_HOST=192.168.0.211
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
GLANCE_HOSTPORT=$SERVICE_HOST:9292
ENABLED_SERVICES=n-cpu,q-agt,n-api-meta,c-vol,placement-client
NOVA_VNC_ENABLED=True
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
VNCSERVER_LISTEN=$HOST_IP
VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN

开始安装:

1
./stack.sh

当每个计算节点都安装完毕之后,验证它的输出:

1
nova service-list --binary nova-compute

当计算节点的服务出现之后,控制节点上运行:

1
./tools/discover_hosts.sh

来发现服务。

最终安装失败。

Ubuntu server 安装及配置

安装注意事项

使用 ubuntu-16.04.3-server-amd64 来进行安装,如果是虚拟化环境,需要启用嵌套虚拟化的选项。

安装语言最好选择英文,不然会报错,提示说“无法安装busybox-initramfs”。

因为在虚拟机中安装,组件安装要勾选上 Virtual Machine host、OpenSSH server 两个选项。

配置

系统中自带了 vim、screen 等,不必重新安装。

  1. 修改 IP 地址
1
2
3
4
5
6
7
$ sudo vim /etc/network/interfaces

auto ens33
iface ens33 inet static
address 192.168.0.141
netmask 255.255.255.0
gateway 192.168.0.1
  1. 修改 DNS 配置
1
2
3
4
$ sudo vim /etc/resolvconf/resolv.conf.d/base

nameserver 210.41.224.33
nameserver 192.168.5.1
  1. 修改安装源

此步骤是为了提高安装速度,非必要。

多次安装不成功,均网速的问题。安装的过程,需要考虑从三类位置下载软件:

  • OpenStack
  • Ubuntu
  • Python

OpenStack:一直没有找到合适稳定的镜像站点。

Ubuntu:

1
2
3
4
5
6
7
$ sudo vim /etc/apt/sources.list

在文件头部添加
deb mirror://mirrors.ubuntu.com/mirrors.txt xenial main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt xenial-updates main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt xenial-backports main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt xenial-security main restricted universe multiverse

Python:测试了一下豆瓣 pip 镜像站点速度比较快。

1
2
3
4
5
6
$ sudo mkdir /root/.pip/
$ sudo vim /root/.pip/pip.conf

添加如下内容
[global]
index-url = https://pypi.douban.com/simple
  1. 执行更新
1
2
$ sudo apt-get update
$ sudo apt-get upgrade

安装 OpenStack

添加 stack 用户

1
2
3
$ sudo useradd -s /bin/bash -d /opt/stack -m stack # -s:指定shell -d:指定家目录 -m:创建目录
$ echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
$ sudo su - stack # 切换到 stack 用户

下载 devstack 脚本

1
2
3
4
5
6
$ sudo pwd
/opt/stack

$ time git clone https://git.openstack.org/openstack-dev/devstack -b stable/ocata
备份脚本
$ tar zcf devstack20170531.tar.gz devstack

创建配置文件 local.conf

1
2
3
4
5
6
7
8
9
10
$ id
$ cd devstack
$ vi local.conf

[[local|localrc]]
ADMIN_PASSWORD=root
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
secret 是初始密码,可以根据需要设置自已的密码。

开始安装

以 stack 的身份执行以下命令

1
$ time ./stack.sh 

结果如下:

日志位置

日志一般存放在 /var/log/...

日志格式

OpenStack 的日志格式都是统一的,如下:

<时间戳><日志等级><代码模块><日志内容><源代码位置>

  • 时间戳

    日志记录的时间,包括 年 月 日 时 分 秒 毫秒

  • 日志等级

    有INFO WARNING ERROR DEBUG等

  • 代码模块

    当前运行的模块

  • Request ID

    日志会记录连续不同的操作,为了便于区分和增加可读性,每个操作都被分配唯一的Request ID,便于查找日志内容 这是日志的主体,记录当前正在执行的操作和结果等重要信息

  • 源代码位置

    日志代码的位置,包括方法名称,源代码文件的目录位置和行号。这一项不是所有日志都有

1
2015-12-10 20:46:49.566 DEBUG nova.virt.libvirt.config [req-5c973fff-e9ba-4317-bfd9-76678cc96584 None None] Generated XML ('<cpu>\n  <arch>x86_64</arch>\n  <model>Westmere</model>\n  <vendor>Intel</vendor>\n  <topology sockets="2" cores="3" threads="1"/>\n  <feature name="avx"/>\n  <feature name="ds"/>\n  <feature name="ht"/>\n  <feature name="hypervisor"/>\n  <feature name="osxsave"/>\n  <feature name="pclmuldq"/>\n  <feature name="rdtscp"/>\n  <feature name="ss"/>\n  <feature name="vme"/>\n  <feature name="xsave"/>\n</cpu>\n',) to_xml /opt/stack/nova/nova/virt/libvirt/config.py:82

这条日志我们可以得知:

  1. 代码模块是 nova.virt.libvirt.config,由此可知应该是 Hypervisor Libvirt 相关的操作
  2. 日志内容是生成 XML
  3. 如果要跟踪源代码,可以到 /opt/stack/nova/nova/virt/libvirt/config.py 的 82 行,方法是 to_xml