以下内容部分是上课讲过的,另一部分我自行补充的 (^v^)

Linux

关掉防火墙和SELinux

1
2
3
4
5
6
systemctl disable firewalld && systemctl stop firewalld
# 禁用firewalld开机自启,然后关闭firewalld
setenforce 0
# 先关掉selinux
sed -i "s|SELINUX=enforcing|SELINUX=disabled|g" /etc/selinux/config
# 修改selinux配置文件永久生效

LVM扩容

1
2
3
4
5
6
7
8
9
pvcreate /dev/sdc # 创建一个新的物理卷 
pvs # 查看系统中所有的物理卷
vgs # 查看系统中所有的卷组
vgextend centos /dev/sdc # 将物理卷 /dev/sdc 添加到名为 centos 的卷组中
lvs # 查看所有逻辑卷
lvextend centos/root /dev/sdc # 将物理卷 /dev/sdc 添加到名为 centos 卷组中的 root 逻辑卷中
xfs_growfs /dev/mapper/centos-root
# 将 centos 卷组中的 root 逻辑卷的文件系统扩展到使用新添加的物理卷 /dev/sdc 的全部空间
lsblk -ip # 查看当前系统中的块设备和它们之间的关系

RAID 磁盘阵列

各RAID级别

RAID(冗余磁盘阵列)是将多个硬盘组合成一个逻辑磁盘,从而提高数据存储的效率和可靠性。常见的 RAID 等级有以下几种:

RAID 0:又称条带化,将数据分块后交替写入多个物理磁盘,以达到提高数据读写性能的目的。但该模式没有冗余备份,一旦任意一块硬盘出现故障,整个 RAID 0 即失效,所有数据都无法恢复。

RAID 1:又称镜像,使用两块相同的硬盘存储相同的数据,实现数据冗余备份。当其中一块硬盘损坏时,另一块硬盘可以继续工作,并且可以从备份中恢复数据。但是相比单个硬盘,RAID 1 存储容量只有单个硬盘的一半。

RAID 5:使用三块或更多的硬盘,其中一个硬盘用于存储校验信息,其余硬盘存储数据。在发生某个硬盘损坏时,可以通过校验信息进行数据恢复。RAID 5 除了具备数据冗余功能之外,还可以提高数据读取速度。但是在写入数据时,需要进行额外的校验计算,因此写入效率相对较低。

RAID 6:和 RAID 5 类似,不同点在于使用两个硬盘来存储校验信息,可以容忍两块硬盘的故障。RAID 6 模式虽然提供更高的可靠性,但是需要额外的存储空间用于存储冗余信息,因此存储容量和效率都要比 RAID 5 稍低。

RAID 10:又称为 RAID 1+0 或镜像条带化,将多个 RAID 1 组成一个 RAID 0 阵列。即先进行数据的镜像备份(RAID 1),再利用这些镜像数据来进行条带化(RAID 0)。RAID 10 同时具备了数据冗余和读写速度的优势,但是需要至少四块硬盘才能实现。

总之,使用哪种 RAID 等级取决于应用场景,在性能、容错能力、存储成本、存储容量、读写速度等方面需要做出权衡。

软件RAID5

1
2
3
4
5
6
7
8
fdisk /dev/sdb #磁盘分区
mdadm --create /dev/md0 --auto=yes --level=5 --raid-devices=3 /dev/sdb{5,6,7}
# 用一块硬盘的三个分区,创建raid5设备/dev/md0
mkdir /data01 # 根目录创建新目录 /data01
mkfs.xfs /dev/md0 # 格式化/dev/md0 使用xfs文件系统
mount /dev/md0 /data01 # 挂载/dev/md0 到/data01
echo "/dev/md0 /data01 xfs defaults 0 0" >> /etc/fstab
# 开机自动挂载

corntab 计划任务

语法

1
2
crontab [ -u user ] file
crontab [ -u user ] { -l | -r | -e }
1
2
3
4
5
6
7
8
*    *    *    *    *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
0 */2 * * * /sbin/service httpd restart  意思是每两个小时重启一次apache 

50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务

50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务

0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘

1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件

00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。

30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令

每天0点进行数据库全库备份

备份脚本,/root/bak.sh

1
2
#!/bin/bash
mysqldump -uUsername -pPassw0rd --all-database > /mysql_bak/mysql_bak_all_$(date +%F).sql

corntab 设置脚本/root/corn-set.sh

1
2
3
#!/bin/bash
echo "00 00 * * * /root/bak.sh" > /root/cornfile
corntab -u root /root/cornfile

Linux 路由转发

1
2
3
# 静态路由,添加目的网络,子网掩码,网关
route add -net 192.168.40.0 netmask 255.255.255.0 gw 192.168.30.1
route add -net 192.168.30.0 netmask 255.255.255.0 gw 192.168.40.1

进程、端口查看

进程号获取

有以下两种方法,每一个程序跑起来后系统都会分配一个进程号,所以还可以用来查看某个程序是否以及启动

1
2
3
pidof process_name # process_name 进程名

ps -ef | grep -v grep | grep process_name | awk '{print $2}' | xargs

查看某个端口是否存在

直接用netstat

1
netstat -tulnp | grep port_number # port_number 端口号

新工具:nc, 应该称之为netcat,下面只看看3306端口是否存在

1
2
3
4
5
6
nc -vz 127.0.0.1 3306 
# -z 只扫描监听的守护进程,不想他们发送任何数据,不能和-l共用
# -v 生成更详细的输出

# 输出结果
Connection to 127.0.0.1 3306 port [tcp/mysql] succeeded!

服务启动、关闭、检查状态 等

1
2
3
4
5
6
systemctl enable xxx # 开机自启
systemctl start xxx # 启动
systemctl stop xxx # 关闭
systemctl restart xxx # 重启
systemctl disable xxx # 禁用开机自启
systemctl status xxx # 检查运行状态

shell script

Linux三剑客

Linux三剑客是指grep、awk和sed这三个命令,它们常用于文本处理和数据分析等领域。以下是它们的常用方法:

grep:用于在文件中查找指定的字符串,常用选项有-i(忽略大小写)、-c(只显示匹配行数)、-v(反向查找)、r(递归搜索)等。
例如,在当前目录下查找包含”hello”字符串的文件:

1
>grep "hello" *

awk:用于处理文本文件中的数据,可以按照某些规则对文本进行格式化、提取和统计等操作。常用选项有-F(指定分隔符)、-f(从文件读取脚本)、-v(定义变量)等。
例如,统计文件中每一列的和:

1
>awk '{sum += $1} END {print sum}' file.txt

sed:用于对文本进行替换、插入、删除等操作。常用选项有-i(直接修改文件)、-e(执行多个编辑命令)、-n(不输出模式空间内容)等。
例如,在文件中将“Hello”替换为“Hi”:

1
>sed -i 's/Hello/Hi/g' file.txt

以上是Linux三剑客的常用方法,它们在文本处理和数据分析等领域非常实用,也是Linux系统管理员和开发人员必备的工具之一。

更多用法,见其他脚本,不知道参数,请问那个男人man awk

egrep -v ‘^(#|$)’ /etc/keystone/keystone.conf_bak_2023-05-01 > /etc/keystone/keystone.conf

这里面 '^(#|$)' ,^ 表示反选, #表示注释行, $表示空行

EOF处理文件内容

直接覆盖

1
2
3
4
5
6
cat >/root/test<<-EOF
123
EOF

cat /root/test
123

文件追加内容

1
2
3
4
5
6
7
cat >>/root/test<<-EOF
456
EOF

cat /root/test
123
456

shell脚本中 >> 是追加 > 是覆盖源文件

ntp 时间同步

server 192.168.200.10
client 192.168.200.20

ntp服务器

1
2
3
4
5
#!/bin/bash
yum -y install ntp
sed -i "s|#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap|restrict 192.168.200.0 mask 255.255.255.0 nomodify notrap|g" /etc/ntp.conf
# 到/etc/ntp.conf 文件里面把此行取消注释,并改好允许访问的网段,子网掩码
systemctl enable ntpd && systemctl start ntpd && systemctl status ntpd

ntp客户端

1
2
3
4
5
6
7
8
#!/bin/bash
yum -y install ntp
sed -i '/^server/s/^/#/' /etc/ntp.conf
# 将配置文件原有的ntp服务器,注释掉
sed -i "/^#server/i server 192.168.200.10 iburst" /etc/ntp.conf
# 在ntp服务器注释行上方插入 server 192.168.200.10 iburst
systemctl enable ntpd && systemctl start ntpd && systemctl status ntpd

KVM

依赖包

1
2
3
4
5
yum -y install qemu* libvirt* virt* # KVM的依赖
yum -y install bridge-utils # 网桥的组件

# qemu是一种Linux里面的模拟器,可以模拟很多的处理器架构,是一种强行模拟的工具,
# 所谓的kvm虚拟机是,qemu+kvm,二者结合的产物,qemu进行模拟,kvm来让虚拟机的性能更强,当不能开启嵌套虚拟化(虚拟机套娃)时,没有kvm支持,此时只能qemu硬算,所以虽然能开虚拟机,但性能会很差

网桥配置

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
#!/bin/bash
yum -y install bridge-utils #安装网桥组件包

IPADDR=$(ifconfig ens33 | awk '{if (NR==2) print $2}') #获取网卡ens33 IP地址
NETMASK=$(ifconfig ens33 | awk '{if (NR==2) print $4}') #获取子网掩码
GATEWAY=$(route -n | awk '{if (NR==3) print $2}') #获取网关
DNS1=$(egrep -v '^(#|$)' /etc/resolv.conf | awk '{if(NR==1) print $2}') #获取DNS服务器地址

cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33_bak_$(date +%F) #备份配置文件
sed -i "s|BOOTPROTO=dhcp|BOOTPROTO=none|g" /etc/sysconfig/network-scripts/ifcfg-ens33
echo "BRIDGE=br0" >> /etc/sysconfig/network-scripts/ifcfg-ens33
cat >/etc/sysconfig/network-scripts/ifcfg-br0<<-EOF
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=${IPADDR}
NETMASK=${NETMASK}
GATEWAY=${GATEWAY}
DNS1=${DNS1}
EOF

systemctl restart network # 重启网络
ping -c 1 ${GATEWAY} # 测试外网通信

docker

docker install 脚本

前提是关掉防火墙,SELinux

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
yum remove docker docker-client docker-client-latest docker-common \
docker-latest docker-latest-logrotate \
docker-logrotate docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum clean all && yum makecache fast
yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
if [ "$?" != "0" ];then
echo "Docker Install Error."
exit 1
fi

[ ! -d /etc/docker ] && mkdir /etc/docker
more <<EOF >/etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF

systemctl enable docker && systemctl start docker

拉取镜像

1
docker pull mariadb:latest

列出镜像

1
docker images

批量删除容器

1
docker rm $(docker ps -a | awk '{if (NR>1) print $1}' | xargs)
  • 这条命令 $() 里面的会先执行;
    • docker ps -a 会不管容器的死活,都列出来;
    • 得到的输出通过管道符 | 作为后面awk的输入
    • '{if (NR>1) print $1}'NRawk 代表行号的变量,相应的NF作为列号,这里表示是输出行号大于1的第一列,目的是去掉docker ps -a无用的输出只留下CONTAINER ID
    • xargs 是将awk的输出由一列转换成一行
  • $()内命令执行完成后,此时这个没名字的隐形变量,便有了值
    • docker rm 的后面此时可以理解为写了一堆容器ID ,也就是docker rm这个命令要删除的容器

后台启动容器,然后进入容器

我自己的本地docker, shell是zsh, 提示符➜ ~是我自己设的,不要奇怪
golang容器为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 启动 后台运行容器
➜ ~ docker run -itd golang
Unable to find image 'golang:latest' locally
latest: Pulling from library/golang
0e29546d541c: Already exists
9b829c73b52b: Already exists
cb5b7ae36172: Already exists
6494e4811622: Already exists
6e1d20a8313e: Pull complete
593823f101dc: Pull complete
1b4aae56cdbe: Pull complete
Digest: sha256:c72fa9afc50b3303e8044cf28fb358b48032a548e1825819420fd40155a131cb
Status: Downloaded newer image for golang:latest
4c7826ffa37754cdb78289820932e00c23c4bc6299ee744cb826ed857c6c88dd
# 进入容器内部
➜ ~ docker exec -it $(docker ps | grep golang | awk '{print $1}') /bin/bash
root@4c7826ffa377:/go# ls
bin src
root@4c7826ffa377:/go# ls /
bin dev go lib media opt root sbin sys usr
boot etc home lib64 mnt proc run srv tmp var
root@4c7826ffa377:/go# exit

保存容器镜像,导入本地镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
# 保存时 -o 指定保存的文件名, 也可以写成/opt/golang.tar, 这样就保存到了/opt, 而不是执行命令时所在目录
➜ ~ docker save -o golang.tar golang:latest
# 删除镜像
➜ ~ docker rmi golang:latest
Untagged: golang:latest
Untagged: golang@sha256:c72fa9afc50b3303e8044cf28fb358b48032a548e1825819420fd40155a131cb
Deleted: sha256:276895edf9673267f47528e8a99401f2d2947f6c9c00490f773d5ed8f559bef2
Deleted: sha256:f9925574d34663c6f0f2135512cd1e7b94490279982657a6a40fb0693ce9df41
Deleted: sha256:5ba934ce54ed16893dd8cae2c36bdcc25f9cb1a4d51dba9cbedda4b4f1bbf53f
Deleted: sha256:3a9da346a75c7c4cdacacd945f87d73b964a07007c4e5e8f9435c367176ceeb9
# 重新导入本地的镜像,golang.tar
➜ ~ docker import golang.tar
sha256:49be9fd5efe6db218e87809ccd1bd7022bf90e9e26673ef517d6f7fa4d1a497d

mysql

用户操作

创建用户

先解释一下,openstack,创建数据库的操作, 下面是我综合实验写的sql脚本

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
31
32
33
SET GLOBAL validate_password_policy=0;
SET GLOBAL validate_password_length=4;
FLUSH PRIVILEGES;
# 这里临时修改了密码强度限制,长度限制,再重启后,会失效,但对这种一次性的很合适

CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'Ccu2023';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'Ccu2023';
# 创建数据库就不说了,这里建了两个用户 'keystone' ,允许本地访问(localhost)、远程访问(%),密码都是Ccu2023 ,然后给了这个用户完整的全部的用于操作keystone数据库的权限,以下同理

CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'Ccu2023';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'Ccu2023';

CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'Ccu2023';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'Ccu2023';

CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'Ccu2023';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'Ccu2023';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'Ccu2023';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'Ccu2023';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'Ccu2023';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'Ccu2023';

CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'Ccu2023';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'Ccu2023';

FLUSH PRIVILEGES;

那么正常创建用户,赋予权限该当如何?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql -u root -p
# 创建新用户
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
# 这将创建一个用户名为“newuser”的新用户,并设置其密码为“password”。请注意,这里的localhost表示该用户只能从本地主机访问MySQL服务器。如果要允许从远程主机访问该用户,请将localhost替换为远程主机的IP地址或主机名; 如果替换成% 那就是允许所有远程主机访问

# 授予用户权限
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
# 这将授予用户“newuser”在所有数据库和表上的所有权限。如果您只想授予用户特定数据库或表的权限,则可以将星号替换为相应的数据库和表名。例如:

GRANT SELECT, INSERT ON mydatabase.* TO 'newuser'@'localhost';
# 这将授予用户“newuser”在名称为“mydatabase”的数据库中插入和选择数据的权限。

#刷新权限
FLUSH PRIVILEGES;
#这将刷新MySQL服务器中的权限缓存,以确保新的权限立即生效。

删除所有用户除了root用户:

1
2
mysql -u root -p
mysql> DELETE FROM mysql.user WHERE user != 'root';

删除所有用户包括root用户(危险):

1
mysql> DELETE FROM mysql.user WHERE 1;

备份操作

1
2
3
4
5
# Username 数据库用户名
# Passw0rd 数据库密码
mysqldump -uUsername -pPassw0rd dbname > /mysql_bak/mysql_bak_dbname_$(date +%F).sql # 单库备份
mysqldump -uUsername -pPassw0rd --all-database > /mysql_bak/mysql_bak_all_$(date +%F).sql # 全库备份
mysqldump -uUsername -pPassw0rd --database db1 db2 > /mysql_bak/mysql_bak_dbs_$(date +%F).sql # 多库备份

直接导入已存在的sql文件到数据库

直接连接数据库mysql/mariadb

1
mysql -uroot -p'password' -e "source xxx.sql;"

宿主机使用容器内数据库

1
2
3
#!/bin/bash
CONTAINER_ID=$(docker ps | grep mariadb:latest | awk '{print $1}')
docker exec -itd ${CONTAINER_ID} mysql -uroot -p'Ccu2023' -e "source xxx.sql;"

openstack

rabbitmq-server 消息队列

安装, 启动

1
2
yum -y install rabbitmq-server
systemctl enable rabbitmq-server && systemctl start rabbitmq-server && systemctl status rabbitmq-server

添加用户

1
rabbitmqctl add_user username password

赋予用户管理权限

1
rabbitmqctl set_permissions username ".*" ".*" ".*"

opensatck *** create

创建用户

1
2
openstack user create --domain default --password-prompt glance
# 使用的默认域,用户名glance

角色添加到用户和项目

1
2
openstack role add --project service --user glance admin
# 添加到了service项目,admin用户

创建域

1
2
openstack domain create --description "An Example Domain" example
# 创建了一个example的域

创建项目

1
2
# 默认域里面创建了个项目service
openstack project create --domain default --description "Service Project" service

创建服务和API端点

1
2
3
4
openstack service create --name glance --description "OpenStack Image" image
openstack endpoint create --region RegionOne image public http://controller:9292
openstack endpoint create --region RegionOne image internal http://controller:9292
openstack endpoint create --region RegionOne image admin http://controller:9292

openstack 查询

查询所有用户:

1
openstack user list

查询所有角色:

1
opensatck role list

查询所有域:

1
openstack domain list

查询所有虚拟机实例:

1
openstack server list

查询所有网络:

1
openstack network list

查询所有镜像:

1
openstack image list

查询指定虚拟机实例的详细信息:

1
openstack server show <instance name or id>

查询指定网络的详细信息:

1
openstack network show <network name or id>

最小安装,理论

最小化安装所能涉及到的端口以及服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
基础服务 
22 ssh
3306 mysql/mariadb
5672 25672 rabbitmq
11211 memcached

keystone
35357 admin
5000 user

glance
9191 glance-registry
9292 glance-api

neutron
9696 neutron

nova
6080 nova novncproxy
8774 8775 nova-api

cinder # 上课没讲到
8776 cinder-api

认证服务keystone

初始化密钥

1
2
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

填充数据库,看日志

1
2
/bin/sh -c "keystone-manage db_sync" keystone
tail -f /var/log/keystone/keystone.log

keystone bootstarp

vi bootstarp.sh

1
2
3
4
5
6
#!/bin/bash
keystone-manage bootstrap --bootstrap-password Ccu2023 \
--bootstrap-admin-url http://controller:5000/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
1
2
chmod +x bootstarp.sh
source bootstarp.sh

admin-openrc.sh

vi admin-openrc.sh

1
2
3
4
5
6
7
8
#!/bin/bash
export OS_USERNAME=admin
export OS_PASSWORD=Ccu2023
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
1
2
3
chmod +x admin-openrc.sh
source admin-openrc.sh
# 每次重启,都要执行这个,否则命令行界面的openstack客户端没有权限操作

镜像服务glance

填充数据库

1
/bin/sh -c "glance-manage db_sync" glance

放置服务placement

填充数据库

1
/bin/sh -c "placement-manage db sync" placement

验证服务

1
2
3
#重启httpd,载入placement, 验证服务:
systemctl restart httpd
placement-status upgrade check

计算服务nova

填充数据库

1
2
3
4
5
6
7
/bin/sh -c "nova-manage api_db sync" nova
/bin/sh -c "nova-manage cell_v2 map_cell0" nova
/bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" no
va
/bin/sh -c "nova-manage db sync" nova
/bin/sh -c "nova-manage cell_v2 list_cells" nova
#此过程中,使用tail -f /var/log/nova/nova-manage.log,对同步进度进行监控

网络服务neuton

填充数据库

1
2
3
4
# 同步之前要,创建/etc/neutron/plugin.ini指向 ML2 插件配置文件的软连接
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
/bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

面板 dashboard