3559 字
18 分钟
OpenStack 私有云学习手册

1. OpenStack 架构与理论#

1.1 云计算架构四层模型#

  1. 基础设施层
  2. 云平台层
  3. 业务应用层
  4. 业务管理层

1.2 云计算三种服务模型#

模型说明
IaaS基础架构即服务
PaaS平台即服务
SaaS软件即服务

1.3 OpenStack 核心组件#

组件服务类型说明
KeystoneIdentity Service认证服务
GlanceImage Service镜像服务
NovaCompute计算服务
NeutronNetworking网络服务
HorizonDashboardWeb 前端服务
SwiftObject Storage对象存储服务
CinderBlock Storage块存储服务
CeilometerTelemetry监控服务
HeatOrchestration编排服务
TroveDatabase Service数据库服务

1.4 Neutron 网络#

Linux bridge 与 Open vSwitch 两种 plugin 对比:

  • Open vSwitch:SDN 集中管控、更多网络特性支持
  • Linux bridge:稳定性好、大规模网络部署更优

VxLAN(虚拟扩展局域网)类型网络是常用的 Overlay 网络方案。

1.5 Keystone Bootstrap 自动创建内容#

  1. Default Domain — 默认域
  2. Admin Project — 管理员项目
  3. Admin User — 管理员用户
  4. Admin Role — 管理员角色
  5. Member Role — 成员角色
  6. Reader Role — 只读角色
  7. Keystone Service — 身份服务
  8. Identity Endpoint — 身份端点

2. OpenStack 基础搭建(脚本方式)#

2.1 环境要求#

  • 双节点(controller + compute)
  • 每节点:4vCPU、8G 内存、双网卡(内/外)、双磁盘各 60G
  • 基于 chinaskills-iaas-v2.0.3.iso

2.2 搭建步骤#

Terminal window
# 1. 修改主机名
hostnamectl set-hostname controller # 控制节点
hostnamectl set-hostname compute # 计算节点
# 2. 关闭防火墙和 SELinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 3. 配置 /etc/hosts
echo "controller_IP controller" >> /etc/hosts
echo "compute_IP compute" >> /etc/hosts
# 4. 配置离线 YUM 仓库并搭建 FTP
# /etc/yum.repos.d/local.repo
yum clean all && yum makecache
yum install -y vsftpd
systemctl start vsftpd && systemctl enable vsftpd
# 5. 计算节点配置磁盘(两个 9G 分区)
fdisk /dev/vdb
# 6. 安装 iaas 脚本包
yum install -y openstack-iaas
# 7. 配置 openrc 并执行预处理
bash iaas-pre-host.sh
reboot

2.3 Controller 节点安装顺序#

Terminal window
iaas-install-mysql.sh
iaas-install-keystone.sh
iaas-install-glance.sh
iaas-install-placement.sh
iaas-install-nova-controller.sh
iaas-install-neutron-controller.sh
iaas-install-dashboard.sh
iaas-install-cinder-controller.sh
iaas-install-swift-controller.sh

2.4 Compute 节点安装顺序#

Terminal window
iaas-install-nova-compute.sh
iaas-install-neutron-compute.sh
iaas-install-cinder-compute.sh
iaas-install-swift-compute.sh

3. OpenStack Rocky 版手动搭建#

想要更快跑起来,可以参考 [[posts/openstack-rdo-allinone/index.md]],使用 Packstack 一键部署单节点版本。本章是逐组件手动部署,适合理解 OpenStack 的内部分工。 部署完成后做 Python 运维开发见 [[posts/openstack-python-ops/index.md]]。

参考:https://blog.csdn.net/HYXRX/article/details/113876162

3.1 NTP 时间同步#

Controller 节点:

Terminal window
yum install chrony -y
vi /etc/chrony.conf
# server 0.centos.pool.ntp.org iburst
# allow 192.168.22.0/24
systemctl enable chronyd && systemctl start chronyd
chronyc sources

Compute 节点:

Terminal window
vi /etc/chrony.conf
# server controller iburst
systemctl enable chronyd && systemctl start chronyd

3.2 配置 YUM 仓库#

Terminal window
yum install centos-release-openstack-rocky -y
yum upgrade -y
yum install python-openstackclient -y
yum install openstack-selinux -y

3.3 MySQL 数据库(Controller)#

Terminal window
yum install mariadb mariadb-server python2-PyMySQL -y
vi /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 本机IP
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
Terminal window
systemctl enable mariadb && systemctl start mariadb
mysql_secure_installation # 回车-Y密码-Y-Y-Y-Y
mysql -uroot -p密码 -e "grant all privileges on *.* to 'root'@'%' identified by '密码';flush privileges;"

3.4 RabbitMQ 消息队列(Controller)#

Terminal window
yum install rabbitmq-server -y
systemctl enable rabbitmq-server && systemctl start rabbitmq-server
rabbitmqctl add_user openstack 密码
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
rabbitmq-plugins enable rabbitmq_management
systemctl restart rabbitmq-server
# 浏览器访问 IP:15672,guest/guest 登录后修改 openstack 用户属性

3.5 Memcached 缓存(Controller)#

Terminal window
yum install memcached python-memcached -y
vi /etc/sysconfig/memcached
# OPTIONS="-l 127.0.0.1,::1,controller"
systemctl enable memcached && systemctl start memcached

3.6 Etcd(Controller)#

Terminal window
yum install etcd -y
vi /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://Controller_IP:2380"
ETCD_LISTEN_CLIENT_URLS="http://Controller_IP:2379"
ETCD_NAME="controller"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://Controller_IP:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://Controller_IP:2379"
ETCD_INITIAL_CLUSTER="controller=http://Controller_IP:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
Terminal window
systemctl enable etcd && systemctl start etcd

3.7 Keystone 认证服务(Controller)#

Terminal window
yum install openstack-keystone httpd mod_wsgi -y
vi /etc/keystone/keystone.conf
[database]
connection = mysql+pymysql://keystone:密码@controller/keystone
[token]
provider = fernet
Terminal window
# 创建数据库
mysql -uroot -p密码 -e "CREATE DATABASE keystone;"
mysql -uroot -p密码 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '密码';"
mysql -uroot -p密码 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '密码';"
# 初始化
su -s /bin/sh -c "keystone-manage db_sync" keystone
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
# Bootstrap
keystone-manage bootstrap --bootstrap-password 密码 \
--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
# 配置 Apache
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
vi /etc/httpd/conf/httpd.conf # ServerName controller
systemctl enable httpd && systemctl start httpd
# 创建环境变量脚本
vi openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=密码
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
source openrc
openstack user list
openstack project create --domain default --description "Service Project" service

3.8 Glance 镜像服务(Controller)#

Terminal window
openstack service create --name glance --description "OpenStack Image" image
openstack user create --domain default --password 密码 glance
openstack role add --project service --user glance admin
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
yum install openstack-glance -y

配置 /etc/glance/glance-api.conf/etc/glance/glance-registry.conf(数据库连接、Keystone 认证、存储路径)。

Terminal window
# 创建数据库并初始化
su -s /bin/sh -c "glance-manage db_sync" glance
systemctl enable openstack-glance-api openstack-glance-registry
systemctl start openstack-glance-api openstack-glance-registry
# 上传镜像
openstack image create "cirros" --file cirros-0.4.0-x86_64-disk.img \
--disk-format qcow2 --container-format bare --public
openstack image list

3.9 Nova 计算服务#

Controller 节点:

Terminal window
# 创建服务、用户、端点
openstack service create --name nova --description "OpenStack Compute" compute
openstack user create --domain default --password 密码 nova
openstack role add --project service --user nova admin
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
# Placement
openstack service create --name placement --description "Placement API" placement
openstack user create --domain default --password 密码 placement
openstack role add --project service --user placement admin
openstack endpoint create --region RegionOne placement public http://controller:8778
openstack endpoint create --region RegionOne placement internal http://controller:8778
openstack endpoint create --region RegionOne placement admin http://controller:8778
yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler openstack-nova-placement-api -y

配置 /etc/nova/nova.conf(数据库、RabbitMQ、Keystone、VNC、Glance、Placement)。

Terminal window
# 初始化数据库
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
su -s /bin/sh -c "nova-manage db sync" nova
# 配置 Placement httpd
vi /etc/httpd/conf.d/00-nova-placement-api.conf # 添加 Listen 8778 虚拟主机
systemctl restart httpd
systemctl enable openstack-nova-api openstack-nova-scheduler \
openstack-nova-conductor openstack-nova-novncproxy
systemctl start openstack-nova-api openstack-nova-scheduler \
openstack-nova-conductor openstack-nova-novncproxy

Compute 节点:

Terminal window
yum install openstack-nova-compute -y
# 配置 /etc/nova/nova.conf(类似 Controller,但 my_ip 为本机 IP)
systemctl enable libvirtd openstack-nova-compute
systemctl start libvirtd openstack-nova-compute
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
openstack compute service list

3.10 Neutron 网络服务(Open vSwitch)#

Controller 节点:

Terminal window
openstack service create --name neutron --description "OpenStack Networking" network
openstack user create --domain default --password 密码 neutron
openstack role add --project service --user neutron admin
openstack endpoint create --region RegionOne network public http://controller:9696
openstack endpoint create --region RegionOne network internal http://controller:9696
openstack endpoint create --region RegionOne network admin http://controller:9696
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch -y

配置文件:

  • /etc/neutron/neutron.conf — 核心配置
  • /etc/neutron/plugins/ml2/ml2_conf.ini — ML2 插件(flat,vlan,vxlan)
  • /etc/neutron/plugins/ml2/openvswitch_agent.ini — OvS Agent
  • /etc/neutron/l3_agent.ini — L3 Agent
  • /etc/neutron/dhcp_agent.ini — DHCP Agent
  • /etc/neutron/metadata_agent.ini — Metadata Agent
Terminal window
# Open vSwitch
systemctl enable openvswitch && systemctl start openvswitch
ovs-vsctl add-br br-provider
ovs-vsctl add-port br-provider ens224
# 初始化数据库
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
# 启动服务
systemctl restart openstack-nova-api
systemctl enable neutron-server neutron-openvswitch-agent \
neutron-dhcp-agent neutron-metadata-agent neutron-l3-agent
systemctl start neutron-server neutron-openvswitch-agent \
neutron-dhcp-agent neutron-metadata-agent neutron-l3-agent

Compute 节点:

Terminal window
yum install openstack-neutron-openvswitch ipset -y
# 配置 /etc/neutron/neutron.conf 和 openvswitch_agent.ini
systemctl enable openvswitch && systemctl start openvswitch
systemctl restart openstack-nova-compute
systemctl enable neutron-openvswitch-agent && systemctl start neutron-openvswitch-agent
openstack network agent list

3.11 Horizon Dashboard(Controller)#

Terminal window
yum install openstack-dashboard -y
vi /etc/openstack-dashboard/local_settings

关键配置:

OPENSTACK_HOST = "controller"
ALLOWED_HOSTS = ['*']
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'controller:11211'}}
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
Terminal window
systemctl restart httpd memcached
# 访问 http://controller/dashboard

4. OpenStack Train 版手动搭建#

参考:https://blog.csdn.net/m0_37239002/article/details/131824107

Train 版与 Rocky 版搭建流程基本一致,以下仅列出差异部分。

4.1 YUM 源差异#

Terminal window
yum install centos-release-openstack-train -y
yum upgrade -y
yum install python-openstackclient -y
yum install openstack-selinux -y

4.2 Keystone 差异#

Train 版需手动创建 wsgi-keystone.conf 完整虚拟主机配置:

Terminal window
vi /etc/httpd/conf.d/wsgi-keystone.conf
Listen 5000
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /usr/bin/keystone-wsgi-public
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
<Directory /usr/bin>
Require all granted
</Directory>
</VirtualHost>

4.3 Glance 差异#

Train 版需额外配置 glance-registry.conf

Terminal window
vi /etc/glance/glance-registry.conf
[database]
connection = mysql+pymysql://glance:密码@controller/glance
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = 密码
[paste_deploy]
flavor = keystone
Terminal window
su -s /bin/sh -c "glance-manage db_sync" glance
systemctl enable openstack-glance-api openstack-glance-registry
systemctl start openstack-glance-api openstack-glance-registry

4.4 Nova 差异#

Train 版 Placement 使用独立数据库:

Terminal window
# 创建 Placement 数据库
mysql -uroot -p密码 -e "CREATE DATABASE placement;"
mysql -uroot -p密码 -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY '密码';"
mysql -uroot -p密码 -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY '密码';"
Terminal window
# 初始化 Placement 数据库
su -s /bin/sh -c "placement-manage db_sync" placement

4.5 其他组件#

其余组件(Neutron、Horizon、Cinder、Swift)配置与 Rocky 版基本一致,替换版本号即可。


5. OpenStack 基础命令速查#

5.1 Keystone 身份管理#

Terminal window
# 域
openstack domain create mydomain
# 项目
openstack project create --domain mydomain myproject
openstack project list
# 用户
openstack user create --domain mydomain --password 123 --email myuser@lab.example.com myuser
openstack user list
# 组
openstack group create --domain mydomain mygroup
openstack group add user mygroup myuser
# 角色
openstack role add --project myproject --user myuser member
openstack role add --project myproject --user myuser admin
# Token
openstack token issue
openstack catalog list

5.2 Glance 镜像管理#

Terminal window
# 上传镜像
openstack image create --disk-format qcow2 --container-format bare \
--file cirros-0.3.4-x86_64-disk.img cirros-test
# 设置启动要求
openstack image create --container-format bare --disk-format qcow2 \
--min-disk 10 --min-ram 1024 --file cirros.img cirros
# 查看/删除
openstack image list
openstack image delete 镜像名

5.3 Nova 计算管理#

Terminal window
# 实例类型
openstack flavor create --id auto --vcpus 4 --ram 4096 --disk 30 m1.test
openstack flavor list
# 创建云主机
openstack server create --image cirros --flavor m1.test --network ext-net test
openstack server list

5.4 Neutron 网络管理#

Terminal window
# 外部网络
openstack network create --external ext-net
# 子网
openstack subnet create --ip-version 4 --gateway 10.10.10.1 \
--allocation-pool start=10.10.10.10,end=10.10.10.100 \
--network ext-net --subnet-range 10.10.10.0/24 ext-subnet
# VLAN 网络
openstack network create --provider-network-type vlan \
--provider-physical-network provider --provider-segment 200 network-vlan

5.5 Swift 对象存储#

Terminal window
swift post file
swift upload file cirros-0.3.4-x86_64-disk.img
swift upload -S 10000000 examcontainer cirros.img # 分段上传(每段 10M)

5.6 Cinder 块存储#

Terminal window
openstack volume type create lvm
cinder type-key lvm set volume_backend_name=LVM
cinder create --volume-type lvm --name lvm_test 1
# 扩容
pvcreate /dev/vdb5
vgextend cinder-volumes /dev/vdb5

5.7 Manila 共享存储#

Terminal window
manila type-create default_share_type false
manila create NFS 2 --name share01
manila access-allow share01 ip 172.129.20.0/24 --access-level rw

5.8 安全组#

Terminal window
openstack security group create --description "Custom security group" group_web
openstack security group rule create --ingress --ethertype IPv4 --protocol tcp --dst-port 80:80 group_web
openstack security group rule create --ingress --ethertype IPv4 --protocol tcp --dst-port 22:22 group_web
openstack security group rule create --ingress --protocol icmp group_web

5.9 Heat 编排#

create_flavor.yaml
heat_template_version: 2018-08-31
resources:
nova_flavor:
type: OS::Nova::Flavor
properties:
name: m2.flavor
disk: 20
is_public: True
ram: 1024
vcpus: 1
flavorid: 1234
Terminal window
openstack stack create -t create_flavor.yaml test

5.10 REST API 调用#

Terminal window
# 获取 Token
curl -i -X POST http://controller:5000/v3/auth/tokens \
-H "Content-type: application/json" \
-d '{"auth": {"identity": {"methods":["password"],"password": {"user": {"domain": {"name": "default"},"name": "admin","password": "000000"}}},"scope": {"project": {"domain": {"name": "default"},"name": "admin"}}}}' \
| grep X-Subject-Token
# 使用 Token 查询用户
curl http://controller:5000/v3/users?domain_id=default \
-H "X-Auth-Token: <token>" | python -m json.tool | grep name

6. OpenStack 运维案例#

6.1 NFS 作为 Glance 存储后端#

Terminal window
# NFS 服务端
hostnamectl set-hostname nfs-server
mkdir /mnt/test
echo "/mnt/test 10.24.200.0/24(rw,no_root_squash,no_all_squash,sync)" >> /etc/exports
exportfs -r
systemctl start rpcbind nfs
# Controller 挂载
mount -t nfs NFS_IP:/mnt/test /var/lib/glance/images/
chown glance:glance /var/lib/glance/images/

6.2 Glance 对接 Cinder 存储#

Terminal window
# glance-api.conf
[DEFAULT]
show_multiple_locations = True
[glance_store]
stores = file,http,cinder
# cinder.conf
[DEFAULT]
glance_api_version = 2
allowed_direct_url_schemes = cinder
[lvm]
image_upload_use_internal_tenant = True
systemctl restart openstack-glance-* openstack-cinder-*
openstack volume create --bootable --image cirros --size 1 cirros-cinder
glance location-add <imageID> --url cinder://<volumeID>

6.3 RabbitMQ 服务优化#

Terminal window
# 系统级
echo "fs.file-max=10240" >> /etc/sysctl.conf && sysctl -p
# 用户级
echo "openstack soft nofile 10240" >> /etc/security/limits.conf
echo "openstack hard nofile 10240" >> /etc/security/limits.conf
# 进程级
vi /usr/lib/systemd/system/rabbitmq-server.service
# [Service] 下添加 LimitNOFILE=10240
systemctl daemon-reload && systemctl restart rabbitmq-server

6.4 镜像压缩与转换#

Terminal window
# 压缩 qcow2
qemu-img convert -c -O qcow2 source.qcow2 compressed.qcow2
# qcow2 转 raw
qemu-img convert -f qcow2 -O raw source.qcow2 output.raw

6.5 镜像权限共享#

Terminal window
# 共享镜像给租户
glance member-create <image_id> <project_id>
glance member-update <image_id> <project_id> accepted
# 切换用户验证
export OS_PROJECT_NAME=deyA
export OS_USERNAME=userA
export OS_PASSWORD=123456
glance image-list

6.6 对接堡垒机(JumpServer)#

Terminal window
# 部署 JumpServer
tar -zxvf jumpserver.tar.gz -C /opt/
# 配置 YUM 源、安装 Docker、加载镜像
docker-compose up -d
# Web 界面配置
# 1. 资产管理 → 管理用户(root/Abc@1234)
# 2. 系统用户(SSH/root)
# 3. 资产列表(添加 controller)
# 4. 权限管理 → 资产授权
# 5. Web 终端连接

6.7 系统调优#

句柄调优:

Terminal window
ulimit -n
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
logout
ulimit -n

I/O 调度优化:

Terminal window
echo mq-deadline > /sys/block/vda/queue/scheduler
cat /sys/block/vda/queue/scheduler
# [mq-deadline] kyber none

Nova 调度策略优化:

Terminal window
vi /etc/nova/nova.conf
vif_plugging_is_fatal=false
Terminal window
systemctl restart openstack-nova-*

7. 私有云竞赛真题精选#

7.1 数据库调优#

Terminal window
vi /etc/my.cnf
lower_case_table_names = 1
innodb_buffer_pool_size = 4G
innodb_log_buffer_size = 64M
innodb_log_file_size = 256M
innodb_log_files_in_group = 2

7.2 Memcached 调优#

Terminal window
vi /etc/sysconfig/memcached
MAXCONN="2048"
CACHESIZE="512"
hash_algorithm=md5

7.3 Keystone 用户创建#

Terminal window
source /etc/keystone/admin-openrc.sh
openstack domain create 21Demo
openstack project create --domain 21Demo Engineering
openstack project create --domain 21Demo Production
openstack group create --domain 21Demo Devops
openstack user create --domain 21Demo --password 000000 --email Robert@lab.example.com Robert
openstack group add user Devops Robert
openstack role add --project Engineering --user Robert member
openstack role add --project Engineering --user Robert admin

7.4 Python 自动化脚本#

使用 requests 库调用 OpenStack REST API 创建镜像和用户:

import requests, json
# 获取 Token
url = f"http://{controller_ip}:5000/v3/auth/tokens"
body = {"auth": {"identity": {"methods": ["password"], "password": {"user": {"domain": {"name": "Default"}, "name": "admin", "password": "000000"}}}, "scope": {"project": {"domain": {"name": "Default"}, "name": "admin"}}}}
Token = requests.post(url, data=json.dumps(body), headers={"Content-Type": "application/json"}).headers['X-Subject-Token']
# 创建镜像
headers = {"X-Auth-Token": Token}
requests.post(f"http://{controller_ip}:9292/v2/images", data=json.dumps({"container_format": "bare", "disk_format": "qcow2", "name": "cirros001"}), headers=headers)
# 上传镜像文件
headers['Content-Type'] = "application/octet-stream"
requests.put(f"http://{controller_ip}:9292/v2/images/{image_id}/file", data=open("cirros.img", "rb").read(), headers=headers)

7.5 Heat 编排模板#

heat_template_version: 2018-08-31
resources:
nova_flavor:
type: OS::Nova::Flavor
properties:
name: m2.flavor
disk: 20
is_public: True
ram: 1024
vcpus: 1
flavorid: 1234

8. Ceph 集群存储#

8.1 环境准备#

Terminal window
# 三节点:ceph-node1, ceph-node2, ceph-node3
hostnamectl set-hostname ceph-node1
fdisk /dev/vdb
/etc/hosts
172.128.11.15 ceph-node1
172.128.11.26 ceph-node2
172.128.11.64 ceph-node3

8.2 安装 Ceph#

Terminal window
tar -zxvf ceph-14.2.22.tar.gz -C /opt
mv /etc/yum.repos.d/* /media/
cat > /etc/yum.repos.d/ceph.repo << EOF
[ceph]
name=ceph
baseurl=file:///opt/ceph
gpgcheck=0
enabled=1
EOF
yum install ceph-deploy -y
mkdir /etc/ceph && cd /etc/ceph

8.3 初始化集群#

Terminal window
ceph-deploy new ceph-node1
ceph-deploy install ceph-node1 ceph-node2 ceph-node3 --no-adjust-repos
ceph -v
ceph-deploy mon create-initial
# 创建 OSD
ceph-deploy osd create --data /dev/vdb1 ceph-node1
ceph-deploy osd create --data /dev/vdb1 ceph-node2
ceph-deploy osd create --data /dev/vdb1 ceph-node3
# 创建 Manager
ceph-deploy mgr create ceph-node1 ceph-node2 ceph-node3
ceph -s
ceph config set mon auth_allow_insecure_global_id_reclaim false
ceph-deploy admin ceph-node{1,2,3}
chmod +r /etc/ceph/ceph.client.admin.keyring

--no-adjust-repos 参数防止系统自动安装 epel-release 源,此处全使用本地安装。

8.4 Ceph 运维命令#

Terminal window
ceph status # 检查安装状态
ceph w # 观察健康状况
ceph quorum_status --format json-pretty # 检查 Monitor 仲裁状态
ceph mon dump # 导出 Monitor 信息
ceph df # 检查使用状态
ceph mon stat # Monitor 状态
ceph osd stat # OSD 状态
ceph pg stat # PG 状态
ceph pg dump # 列表 PG
ceph osd lspools # 列表存储池
ceph osd tree # 检查 OSD 的 CRUSH
ceph auth list # 列表认证密钥

9. Redis 集群部署与优化#

9.1 一主二从部署#

三节点准备:

Terminal window
# redis1, redis2, redis3
hostnamectl set-hostname redis1
curl -O http://mirrors.douxuedu.com/competition/redis-3.2.12.tar.gz
tar -xf redis-3.2.12.tar.gz -C /opt/
mv /etc/yum.repos.d/* /media/
cat > /etc/yum.repos.d/redis.repo << EOF
[redis]
name=redis
baseurl=file:///opt/redis
gpgcheck=0
enabled=1
EOF
yum clean all && yum repolist
yum install -y redis
systemctl start redis && systemctl enable redis

redis1(主节点)配置:

Terminal window
vi /etc/redis.conf
# bind 127.0.0.1
protected-mode no
daemonize yes
requirepass "123456"
masterauth "123456"
appendonly yes

redis2/redis3(从节点)配置:

# bind 127.0.0.1
protected-mode no
daemonize yes
requirepass "123456"
slaveof 主redis库ip 6379
masterauth "123456"
appendonly yes

验证集群状态:

Terminal window
redis-cli -h 192.168.200.21 -p 6379 -a 123456 info replication
redis-cli -h 192.168.200.22 -p 6379 -a 123456 info replication
redis-cli -h 192.168.200.23 -p 6379 -a 123456 info replication

9.2 哨兵模式配置#

Terminal window
vi /etc/redis-sentinel.conf
protected-mode no
sentinel monitor mymaster 主redis库ip 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
sentinel parallel-syncs mymaster 2
sentinel auth-pass mymaster 123456
Terminal window
systemctl restart redis-sentinel
systemctl enable redis-sentinel

查看哨兵信息:

Terminal window
redis-cli -h 192.168.200.21 -p 26379 INFO Sentinel
redis-cli -h 192.168.200.22 -p 26379 INFO Sentinel
redis-cli -h 192.168.200.23 -p 26379 INFO Sentinel

9.3 哨兵模式验证#

Terminal window
# 停止主节点
systemctl stop redis
# 在从节点查看,应自动切换为主节点
redis-cli -h 192.168.200.22 -p 6379 -a 123456 info replication
redis-cli -h 192.168.200.23 -p 6379 -a 123456 info replication
# 恢复后变为从节点
systemctl restart redis
systemctl restart redis-sentinel
redis-cli -h 192.168.200.21 -p 6379 -a 123456 info replication

10. 私有云组件速查表#

组件说明
MySQL/MariaDB关系型数据库,存储和管理数据
RabbitMQ消息队列,异步消息处理和分布式通信
Memcached内存缓存,提高性能、减轻数据库压力
Etcd键值存储,共享配置和服务发现
Keystone认证服务,身份验证和授权
Glance镜像服务,管理虚拟机镜像
Nova计算服务,管理虚拟机生命周期
Neutron网络服务,虚拟网络管理
HorizonDashboard,Web 管理界面
Cinder块存储,持久化存储
Swift对象存储,非结构化数据存储
Heat编排服务,自动化部署
Placement资源追踪,主机资源管理
Ceph分布式存储,提供块/文件/对象存储
Redis内存数据库/缓存,支持主从复制和哨兵模式
OpenStack 私有云学习手册
https://blog.xeu.asia/posts/openstack-guide/
作者
Xeu
发布于
2024-06-18
许可协议
CC BY-NC-SA 4.0