8.1 OpenStack 运维命令

image0


一、OpenStack

1.1 Nova

虚拟机管理

# 所有运行nova服务的信息
$ nova service-list

# 查看虚拟机的详细信息
$ nova show <uuid>

# 查看集群节点(宿主机、组件服务)信息
$ nova host-list

# 查看当前计算节点,创建了哪些虚拟机
$ ll /var/lib/nova/instances

# List actions on a server
$ nova instance-action-list <uuid/name>

$ nova start <uuid>    # 开机
$ nova stop <uuid>     # 关机
$ nova delete <uuid>   # 删除

# 创建网段(未测试)
$ nova-manage network create --fixed_range_v4=10.0.1.0/24 --vlan=102  --project_id="tenantID"

# 创建虚拟机
$ nova boot <vm_name> \
--flavor <flavor_id> \
--security-groups default \
--nic net-id=<net_id>,v4-fixed-ip=<ip> \
--image <image_id/name> \
--config-drive True \
--min-count 2 \
--user-data [user-data-file-path] \
[--num-instances 2]
[--snapshot <snapshot_id>]
[--block-device-mapping vda=a9c7816b-0046-4aa9-9c82-cb881a969bdd:snapshot:300:delete-on-terminate --availability-zone nova:LX-OS-node13 --poll]


$ nova boot --flavor m1.tiny --image cirros  --nic net-id=6df1fa59-25a3-4f8c-8d14-ae7f7828c1a2 greenboxes

# 查看控制节点的资源信息
$ nova host-describe <compute_node>

# 关闭某节点服务
$ nova service-disable bm-compute-01 nova-compute
$ nova service-enable bm-compute-01 nova-compute

# 列出所有安全组
$ nova secgroup-list
# 列出指定安全组的规则
$ nova secgroup-list-rules <default>
$ 增加安全组规则(开放ssh)
$ nova secgroup-add-rule default tcp <22> <22> <0.0.0.0/0>

# 设置metadata
nova meta xxxxxx set ws:evacuate_interval=10

flavor管理

# 新建flavor
$ nova flavor-create [--ephemeral <ephemeral>] [--swap <swap>] [--rxtx-factor <factor>] [--is-public <is-public>]
     <name> <id> <ram> <disk> <vcpus>

# 删除flavor
$ nova flavor-delete <id>

# 查看flavor信息
$ nova flavor-show <name|id>

# 添加/修改flavor.extra_specs信息
$ nova flavor-key <flavor id/name> set <key=value>

# 重置/删除flavor.extra_specs信息
$ nova flavor-key <flavor id/name> unset <key>

aggregate管理

# 查看所有aggregate的列表,并不包含metadata
$ nova aggregate-list

# 往aggregate添加host
$ nova aggregate-add-host <aggregate id>  <compute host>
# 创建aggregage分组
$ nova aggregate-create <aggregate name>

# 删除aggregate空分组,如果aggregate的host不为空,需要先使用aggregate-remove-host 清空host
$ nova aggregate-delete <aggregate id/name>
# 在aggregate中移除主机
$ nova aggregate-remove-host <aggregate id/name> <compute host>

# 查看某aggregate分组的详细信息,逐渐丢弃,请使用aggregate-show
$ nova aggregate-details <aggregate id/name>
$ nova aggregate-show <aggregate id/name>

# 往aggregate 里添加/更新 metadata 信息
$ nova aggregate-set-metadata  <aggregate id/name> <key=value> [<key=value> ...]

# 更新aggregate的name或者availability-zone
$ nova aggregate-update [--name NAME] [--availability-zone <availability-zone>] <aggregate id>

1.2 Neutron

# 重启neutron-service
$ service neutron-server restart

# 启动linuxbridge服务
$ service neutron-linuxbridge-agent restart

# 创建网络
$ neutron net-create --provider:physical_network phynet1 --provider:network_type flat private

# 创建子网 全
$neutron subnet-create --name public\
 --allocation-pool start=172.20.20.100,end=172.20.20.199 \
 --gateway 172.20.20.200 \
 --enable_dhcp=False \
 --dns-nameserver 114.114.114.114 \
 public 172.20.20.0/24

# 创建子网,更多选项可以查看 neutron subnet-create -h
neutron subnet-create --name private --allocation-pool start=192.168.2.200,end=192.168.2.230 --gateway 192.168.2.253 --dns-nameserver 114.114.114.114 --disable-dhcp public 192.168.2.0/24

# 查看网络
$ neutron net-show <net_name>

# 查看子网
$ neutron subnet-show <subnet_name>

# 查看网络列表
$ neutron net-list

# 查看端口占用情况
$ neutron port-list

# 指定 mac 创建port
neutron port-create <network> --tenant-id 100001 --fixed-ip ip_address=192.168.0.22 --mac-address fa:16:3e:3a:e8:1b

nova interface-attach b0cc47bc-25c3-48ca-a4fd-5523326b515a --port-id 8bcba4eb-ade0-403d-8f13-45ed70936f03

# 关闭port安全组
neutron port-update --no-security-groups --port-security-enabled=False

1.3 Glance

glance镜像存放:/var/lib/image

# 官方地址
https://docs.openstack.org/project-install-guide/baremetal/draft/configure-glance-images.html

# 上传镜像 (具体看哪glance help image-create)
$ glance image-create --name centos6.5-old --visibility public --disk-format qcow2 --container-format bare --property ws:predownload=True --file /home/

1.4 keystone

# -------------------------------token--------------------------------
# 生成token
$ openstack token issue


# -------------------------------domain--------------------------------
# 创建domain
$ openstack domain create [--description "add new domain"] <domain-name>

# 查看domain
$ openstack domain show <domain-name>
$ openstack domain list

# 删除domain,删除前必须置为disable状态
$ openstack domain set --disable <domain-name>
$ openstack domain delete <domain-name>

# 更改domain属性:名字,描述,状态
$ openstack domain set [-h] [--name <name>] [--description <description>]
                            [--enable | --disable]
                            <domain>
# -------------------------------project--------------------------------
# 查看租户列表/信息
$ openstack project list
$ openstack project show <id/project-name>

# 创建租户
$ openstack project create [--domain <domain>] [--description <description>] <project-name>

# 删除租户,可以无需指定domain,默认default
$ openstack project delete <project-name>
$ openstack project delete [--domain <domain>] <project> [<project> ...]

# 设置租户属性
$ openstack project set [--name <name>] [--domain <domain>]
                        [--description <description>]
                        [--enable | --disable] [--property <key=value>]
                        <project>


# -------------------------------user--------------------------------

# 查看/删除/增加用户列表
$ openstack user list
$ openstack user delete <id/name>
$ openstack user create <name>

# 修改当前用户密码
$ openstack user password set [--password <new-password>] [--original-password <original-password>]

# 设置用户属性:租户,domain,名字,密码,远程密码?,Email,描述信息,是否可用
openstack user set  [--name <name>] [--project <project>]
                    [--project-domain <project-domain>]
                    [--password <password>] [--password-prompt]
                    [--email <email-address>]
                    [--description <description>] [--enable | --disable]
                    <user>


# 查看用户具体信息
$ openstack user show <id/name>


# -------------------------------role--------------------------------

# 查看角色列表
$ openstack role list

# 增加/删除/查看角色
$ openstack role create <name>
$ openstack role delete <name>
$ openstack role show <id/name>

# 设置角色的属性:只有两个属性domain和name
$ openstack role set [--domain <domain>] [--name <name>] <role>

# 查看角色-用户-租户的对应关系表
$ openstack role assignment list

# 增加/删除角色-用户-租户的对应关系表,具体查看帮助文件
$ openstack role add -h
$ openstack role remove -h

二、KVM/QEMU


1.2 virsh命令

# 查看虚拟机的网卡信息
$ virsh domiflist VM1

# kvm 添加硬盘
qemu-img create -f qcow2 git-openstack.qcow2 100G
virsh attach-disk <vm_name> <path qcow2> vdb --cache=none --subdriver=qcow2
virsh detach-disk <vm_name> /data/test02_add01.qcow2

# 暂停/恢复
virsh suspend <vm_name>
virsh resume <vm_name>

# 开机自启
virsh autostart <vm_name>
virsh list --autostart

# 修改虚拟机密码,需要虚拟机内部安装 qga:qemu-guest-agent
virsh set-user-password instance-00000444 root "root12#$"

热增加网卡:virsh attach-device ws_controller01 ./tmp.xml --persistent --live

<interface type='bridge'>
     <source bridge='br0-ovs'/>
     <virtualport type='openvswitch'>
     </virtualport>
     <target dev='vnet4'/>
     <model type='virtio'/>
     <alias name='net1'/>
</interface>

热去除带宽限速

$ virsh domiftune ws_controller01 vnet4 --inbound 0,0,0 --outbound 0,0,0 --config --live

压缩镜像

# 压缩镜像
virt-sparsify –compress ${ori_img_path} ${dest_img_path}

# 解决 tmp 目录空间不足的情况,仅对当前终端有效
mkdir /data/tmp
chmod 1777 /data/tmp/
export TEMP=/data/tmp
export TMPDIR=/data/tmp

# 解决 tmp 目录空间不足的情况,对所有终端有效
echo 'export TEMP=/data/tmp' >> /etc/profile
echo 'export TMPDIR=/data/tmp' >> /etc/profile
source /etc/profile

在线查看虚拟机的messages日志

virt-log -d ws_controller01

1.2 LVM管理

# 查看计算节点VG信息
$ vgdisplay

# 查看虚拟机磁盘信息
$ lvs <instance_uuid>

# 删除LV
$ lvremove /dev/ssd-volume/* -y

# 查看可用块设备列表
$ lsblk

# 将pv从vg移除
$ vgreduce --removemissing --force hdd-volumes

# 添加 pv 到 vg 中
$ vgextend hdd-volumes /dev/sda

三、集群相关


3.1 MariaDB

# 查看MariaDB集群数量
$ mysql -e 'show status like "wsrep_%"' -ppasswd|grep wsrep_cluster_size|awk '{ print $2 }'

# 查看该节点MariaDB是否启动
$ mariadbClusterCheck

3.2 RabbitMQ

先在一台节点启动 service rabbitmq-server restart

启动后,会生成 /var/lib/rabbitmq/.erlang.cookie 文件,为了实现节点间的通信加密,需要将这个文件拷贝至其他两个节点。拷贝时,注意生意授予权限。

chown rabbitmq.rabbitmq /var/lib/rabbitmq/.erlang.cookie

然后启动一下后面两台的服务。

service rabbitmq-server restart

以上都准备好了,现在好开始构建集群了。

分别在后面两个节点执行如下操作。

rabbitmqctl stop_app

rabbitmqctl join_cluster --ram rabbit@ws_controller01(ws_controller01为节点1的hostname)

rabbitmqctl start_app

执行完成后,可以查看一下集群状态。

rabbitmqctl cluster_status

有了集群后,如果要(openstack)使用,还要创建一下用户

rabbitmqctl add_user openstack openstack12#$
rabbitmqctl set_permissions -p / openstack ".*" ".*" ".*"
rabbitmqctl set_user_tags openstack administrator
# 指定节点执行命令
rabbitmq -n rabbit@ws_controller02 [command]

3.3 pacemaker

pkill -9 pacemaker;service pacemaker restart

image1