1. OpenStack 架构与理论
1.1 云计算架构四层模型
- 基础设施层
- 云平台层
- 业务应用层
- 业务管理层
1.2 云计算三种服务模型
| 模型 | 说明 |
|---|---|
| IaaS | 基础架构即服务 |
| PaaS | 平台即服务 |
| SaaS | 软件即服务 |
1.3 OpenStack 核心组件
| 组件 | 服务类型 | 说明 |
|---|---|---|
| Keystone | Identity Service | 认证服务 |
| Glance | Image Service | 镜像服务 |
| Nova | Compute | 计算服务 |
| Neutron | Networking | 网络服务 |
| Horizon | Dashboard | Web 前端服务 |
| Swift | Object Storage | 对象存储服务 |
| Cinder | Block Storage | 块存储服务 |
| Ceilometer | Telemetry | 监控服务 |
| Heat | Orchestration | 编排服务 |
| Trove | Database Service | 数据库服务 |
1.4 Neutron 网络
Linux bridge 与 Open vSwitch 两种 plugin 对比:
- Open vSwitch:SDN 集中管控、更多网络特性支持
- Linux bridge:稳定性好、大规模网络部署更优
VxLAN(虚拟扩展局域网)类型网络是常用的 Overlay 网络方案。
1.5 Keystone Bootstrap 自动创建内容
- Default Domain — 默认域
- Admin Project — 管理员项目
- Admin User — 管理员用户
- Admin Role — 管理员角色
- Member Role — 成员角色
- Reader Role — 只读角色
- Keystone Service — 身份服务
- Identity Endpoint — 身份端点
2. OpenStack 基础搭建(脚本方式)
2.1 环境要求
- 双节点(controller + compute)
- 每节点:4vCPU、8G 内存、双网卡(内/外)、双磁盘各 60G
- 基于
chinaskills-iaas-v2.0.3.iso
2.2 搭建步骤
# 1. 修改主机名hostnamectl set-hostname controller # 控制节点hostnamectl set-hostname compute # 计算节点
# 2. 关闭防火墙和 SELinuxsystemctl stop firewalld && systemctl disable firewalldsetenforce 0sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 3. 配置 /etc/hostsecho "controller_IP controller" >> /etc/hostsecho "compute_IP compute" >> /etc/hosts
# 4. 配置离线 YUM 仓库并搭建 FTP# /etc/yum.repos.d/local.repoyum clean all && yum makecacheyum install -y vsftpdsystemctl start vsftpd && systemctl enable vsftpd
# 5. 计算节点配置磁盘(两个 9G 分区)fdisk /dev/vdb
# 6. 安装 iaas 脚本包yum install -y openstack-iaas
# 7. 配置 openrc 并执行预处理bash iaas-pre-host.shreboot2.3 Controller 节点安装顺序
iaas-install-mysql.shiaas-install-keystone.shiaas-install-glance.shiaas-install-placement.shiaas-install-nova-controller.shiaas-install-neutron-controller.shiaas-install-dashboard.shiaas-install-cinder-controller.shiaas-install-swift-controller.sh2.4 Compute 节点安装顺序
iaas-install-nova-compute.shiaas-install-neutron-compute.shiaas-install-cinder-compute.shiaas-install-swift-compute.sh3. OpenStack Rocky 版手动搭建
想要更快跑起来,可以参考 [[posts/openstack-rdo-allinone/index.md]],使用 Packstack 一键部署单节点版本。本章是逐组件手动部署,适合理解 OpenStack 的内部分工。 部署完成后做 Python 运维开发见 [[posts/openstack-python-ops/index.md]]。
3.1 NTP 时间同步
Controller 节点:
yum install chrony -yvi /etc/chrony.conf# server 0.centos.pool.ntp.org iburst# allow 192.168.22.0/24systemctl enable chronyd && systemctl start chronydchronyc sourcesCompute 节点:
vi /etc/chrony.conf# server controller iburstsystemctl enable chronyd && systemctl start chronyd3.2 配置 YUM 仓库
yum install centos-release-openstack-rocky -yyum upgrade -yyum install python-openstackclient -yyum install openstack-selinux -y3.3 MySQL 数据库(Controller)
yum install mariadb mariadb-server python2-PyMySQL -yvi /etc/my.cnf.d/openstack.cnf[mysqld]bind-address = 本机IPdefault-storage-engine = innodbinnodb_file_per_table = onmax_connections = 4096collation-server = utf8_general_cicharacter-set-server = utf8systemctl enable mariadb && systemctl start mariadbmysql_secure_installation # 回车-Y密码-Y-Y-Y-Ymysql -uroot -p密码 -e "grant all privileges on *.* to 'root'@'%' identified by '密码';flush privileges;"3.4 RabbitMQ 消息队列(Controller)
yum install rabbitmq-server -ysystemctl enable rabbitmq-server && systemctl start rabbitmq-serverrabbitmqctl add_user openstack 密码rabbitmqctl set_permissions openstack ".*" ".*" ".*"rabbitmq-plugins enable rabbitmq_managementsystemctl restart rabbitmq-server# 浏览器访问 IP:15672,guest/guest 登录后修改 openstack 用户属性3.5 Memcached 缓存(Controller)
yum install memcached python-memcached -yvi /etc/sysconfig/memcached# OPTIONS="-l 127.0.0.1,::1,controller"systemctl enable memcached && systemctl start memcached3.6 Etcd(Controller)
yum install etcd -yvi /etc/etcd/etcd.confETCD_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"systemctl enable etcd && systemctl start etcd3.7 Keystone 认证服务(Controller)
yum install openstack-keystone httpd mod_wsgi -yvi /etc/keystone/keystone.conf[database]connection = mysql+pymysql://keystone:密码@controller/keystone[token]provider = fernet# 创建数据库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" keystonekeystone-manage fernet_setup --keystone-user keystone --keystone-group keystonekeystone-manage credential_setup --keystone-user keystone --keystone-group keystone
# Bootstrapkeystone-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
# 配置 Apacheln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/vi /etc/httpd/conf/httpd.conf # ServerName controllersystemctl enable httpd && systemctl start httpd
# 创建环境变量脚本vi openrcexport OS_PROJECT_DOMAIN_NAME=Defaultexport OS_USER_DOMAIN_NAME=Defaultexport OS_PROJECT_NAME=adminexport OS_USERNAME=adminexport OS_PASSWORD=密码export OS_AUTH_URL=http://controller:5000/v3export OS_IDENTITY_API_VERSION=3export OS_IMAGE_API_VERSION=2
source openrcopenstack user listopenstack project create --domain default --description "Service Project" service3.8 Glance 镜像服务(Controller)
openstack service create --name glance --description "OpenStack Image" imageopenstack user create --domain default --password 密码 glanceopenstack role add --project service --user glance adminopenstack endpoint create --region RegionOne image public http://controller:9292openstack endpoint create --region RegionOne image internal http://controller:9292openstack endpoint create --region RegionOne image admin http://controller:9292yum install openstack-glance -y配置 /etc/glance/glance-api.conf 和 /etc/glance/glance-registry.conf(数据库连接、Keystone 认证、存储路径)。
# 创建数据库并初始化su -s /bin/sh -c "glance-manage db_sync" glancesystemctl enable openstack-glance-api openstack-glance-registrysystemctl 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 --publicopenstack image list3.9 Nova 计算服务
Controller 节点:
# 创建服务、用户、端点openstack service create --name nova --description "OpenStack Compute" computeopenstack user create --domain default --password 密码 novaopenstack role add --project service --user nova adminopenstack endpoint create --region RegionOne compute public http://controller:8774/v2.1openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
# Placementopenstack service create --name placement --description "Placement API" placementopenstack user create --domain default --password 密码 placementopenstack role add --project service --user placement adminopenstack endpoint create --region RegionOne placement public http://controller:8778openstack endpoint create --region RegionOne placement internal http://controller:8778openstack 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)。
# 初始化数据库su -s /bin/sh -c "nova-manage api_db sync" novasu -s /bin/sh -c "nova-manage cell_v2 map_cell0" novasu -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" novasu -s /bin/sh -c "nova-manage db sync" nova
# 配置 Placement httpdvi /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-novncproxysystemctl start openstack-nova-api openstack-nova-scheduler \ openstack-nova-conductor openstack-nova-novncproxyCompute 节点:
yum install openstack-nova-compute -y# 配置 /etc/nova/nova.conf(类似 Controller,但 my_ip 为本机 IP)systemctl enable libvirtd openstack-nova-computesystemctl start libvirtd openstack-nova-computesu -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" novaopenstack compute service list3.10 Neutron 网络服务(Open vSwitch)
Controller 节点:
openstack service create --name neutron --description "OpenStack Networking" networkopenstack user create --domain default --password 密码 neutronopenstack role add --project service --user neutron adminopenstack endpoint create --region RegionOne network public http://controller:9696openstack endpoint create --region RegionOne network internal http://controller:9696openstack 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
# Open vSwitchsystemctl enable openvswitch && systemctl start openvswitchovs-vsctl add-br br-providerovs-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-apisystemctl enable neutron-server neutron-openvswitch-agent \ neutron-dhcp-agent neutron-metadata-agent neutron-l3-agentsystemctl start neutron-server neutron-openvswitch-agent \ neutron-dhcp-agent neutron-metadata-agent neutron-l3-agentCompute 节点:
yum install openstack-neutron-openvswitch ipset -y# 配置 /etc/neutron/neutron.conf 和 openvswitch_agent.inisystemctl enable openvswitch && systemctl start openvswitchsystemctl restart openstack-nova-computesystemctl enable neutron-openvswitch-agent && systemctl start neutron-openvswitch-agentopenstack network agent list3.11 Horizon Dashboard(Controller)
yum install openstack-dashboard -yvi /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_HOSTOPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = TrueOPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"systemctl restart httpd memcached# 访问 http://controller/dashboard4. OpenStack Train 版手动搭建
参考:https://blog.csdn.net/m0_37239002/article/details/131824107
Train 版与 Rocky 版搭建流程基本一致,以下仅列出差异部分。
4.1 YUM 源差异
yum install centos-release-openstack-train -yyum upgrade -yyum install python-openstackclient -yyum install openstack-selinux -y4.2 Keystone 差异
Train 版需手动创建 wsgi-keystone.conf 完整虚拟主机配置:
vi /etc/httpd/conf.d/wsgi-keystone.confListen 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:
vi /etc/glance/glance-registry.conf[database]connection = mysql+pymysql://glance:密码@controller/glance
[keystone_authtoken]www_authenticate_uri = http://controller:5000auth_url = http://controller:5000memcached_servers = controller:11211auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultproject_name = serviceusername = glancepassword = 密码
[paste_deploy]flavor = keystonesu -s /bin/sh -c "glance-manage db_sync" glancesystemctl enable openstack-glance-api openstack-glance-registrysystemctl start openstack-glance-api openstack-glance-registry4.4 Nova 差异
Train 版 Placement 使用独立数据库:
# 创建 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 '密码';"# 初始化 Placement 数据库su -s /bin/sh -c "placement-manage db_sync" placement4.5 其他组件
其余组件(Neutron、Horizon、Cinder、Swift)配置与 Rocky 版基本一致,替换版本号即可。
5. OpenStack 基础命令速查
5.1 Keystone 身份管理
# 域openstack domain create mydomain
# 项目openstack project create --domain mydomain myprojectopenstack project list
# 用户openstack user create --domain mydomain --password 123 --email myuser@lab.example.com myuseropenstack user list
# 组openstack group create --domain mydomain mygroupopenstack group add user mygroup myuser
# 角色openstack role add --project myproject --user myuser memberopenstack role add --project myproject --user myuser admin
# Tokenopenstack token issueopenstack catalog list5.2 Glance 镜像管理
# 上传镜像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 listopenstack image delete 镜像名5.3 Nova 计算管理
# 实例类型openstack flavor create --id auto --vcpus 4 --ram 4096 --disk 30 m1.testopenstack flavor list
# 创建云主机openstack server create --image cirros --flavor m1.test --network ext-net testopenstack server list5.4 Neutron 网络管理
# 外部网络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-vlan5.5 Swift 对象存储
swift post fileswift upload file cirros-0.3.4-x86_64-disk.imgswift upload -S 10000000 examcontainer cirros.img # 分段上传(每段 10M)5.6 Cinder 块存储
openstack volume type create lvmcinder type-key lvm set volume_backend_name=LVMcinder create --volume-type lvm --name lvm_test 1
# 扩容pvcreate /dev/vdb5vgextend cinder-volumes /dev/vdb55.7 Manila 共享存储
manila type-create default_share_type falsemanila create NFS 2 --name share01manila access-allow share01 ip 172.129.20.0/24 --access-level rw5.8 安全组
openstack security group create --description "Custom security group" group_webopenstack security group rule create --ingress --ethertype IPv4 --protocol tcp --dst-port 80:80 group_webopenstack security group rule create --ingress --ethertype IPv4 --protocol tcp --dst-port 22:22 group_webopenstack security group rule create --ingress --protocol icmp group_web5.9 Heat 编排
heat_template_version: 2018-08-31resources: nova_flavor: type: OS::Nova::Flavor properties: name: m2.flavor disk: 20 is_public: True ram: 1024 vcpus: 1 flavorid: 1234openstack stack create -t create_flavor.yaml test5.10 REST API 调用
# 获取 Tokencurl -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 name6. OpenStack 运维案例
6.1 NFS 作为 Glance 存储后端
# NFS 服务端hostnamectl set-hostname nfs-servermkdir /mnt/testecho "/mnt/test 10.24.200.0/24(rw,no_root_squash,no_all_squash,sync)" >> /etc/exportsexportfs -rsystemctl 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 存储
# glance-api.conf[DEFAULT]show_multiple_locations = True[glance_store]stores = file,http,cinder
# cinder.conf[DEFAULT]glance_api_version = 2allowed_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-cinderglance location-add <imageID> --url cinder://<volumeID>6.3 RabbitMQ 服务优化
# 系统级echo "fs.file-max=10240" >> /etc/sysctl.conf && sysctl -p
# 用户级echo "openstack soft nofile 10240" >> /etc/security/limits.confecho "openstack hard nofile 10240" >> /etc/security/limits.conf
# 进程级vi /usr/lib/systemd/system/rabbitmq-server.service# [Service] 下添加 LimitNOFILE=10240systemctl daemon-reload && systemctl restart rabbitmq-server6.4 镜像压缩与转换
# 压缩 qcow2qemu-img convert -c -O qcow2 source.qcow2 compressed.qcow2
# qcow2 转 rawqemu-img convert -f qcow2 -O raw source.qcow2 output.raw6.5 镜像权限共享
# 共享镜像给租户glance member-create <image_id> <project_id>glance member-update <image_id> <project_id> accepted
# 切换用户验证export OS_PROJECT_NAME=deyAexport OS_USERNAME=userAexport OS_PASSWORD=123456glance image-list6.6 对接堡垒机(JumpServer)
# 部署 JumpServertar -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 系统调优
句柄调优:
ulimit -necho "* soft nofile 65535" >> /etc/security/limits.confecho "* hard nofile 65535" >> /etc/security/limits.conflogoutulimit -nI/O 调度优化:
echo mq-deadline > /sys/block/vda/queue/schedulercat /sys/block/vda/queue/scheduler# [mq-deadline] kyber noneNova 调度策略优化:
vi /etc/nova/nova.confvif_plugging_is_fatal=falsesystemctl restart openstack-nova-*7. 私有云竞赛真题精选
7.1 数据库调优
vi /etc/my.cnflower_case_table_names = 1innodb_buffer_pool_size = 4Ginnodb_log_buffer_size = 64Minnodb_log_file_size = 256Minnodb_log_files_in_group = 27.2 Memcached 调优
vi /etc/sysconfig/memcachedMAXCONN="2048"CACHESIZE="512"hash_algorithm=md57.3 Keystone 用户创建
source /etc/keystone/admin-openrc.shopenstack domain create 21Demoopenstack project create --domain 21Demo Engineeringopenstack project create --domain 21Demo Productionopenstack group create --domain 21Demo Devopsopenstack user create --domain 21Demo --password 000000 --email Robert@lab.example.com Robertopenstack group add user Devops Robertopenstack role add --project Engineering --user Robert memberopenstack role add --project Engineering --user Robert admin7.4 Python 自动化脚本
使用 requests 库调用 OpenStack REST API 创建镜像和用户:
import requests, json
# 获取 Tokenurl = 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-31resources: nova_flavor: type: OS::Nova::Flavor properties: name: m2.flavor disk: 20 is_public: True ram: 1024 vcpus: 1 flavorid: 12348. Ceph 集群存储
8.1 环境准备
# 三节点:ceph-node1, ceph-node2, ceph-node3hostnamectl set-hostname ceph-node1fdisk /dev/vdb172.128.11.15 ceph-node1172.128.11.26 ceph-node2172.128.11.64 ceph-node38.2 安装 Ceph
tar -zxvf ceph-14.2.22.tar.gz -C /optmv /etc/yum.repos.d/* /media/
cat > /etc/yum.repos.d/ceph.repo << EOF[ceph]name=cephbaseurl=file:///opt/cephgpgcheck=0enabled=1EOF
yum install ceph-deploy -ymkdir /etc/ceph && cd /etc/ceph8.3 初始化集群
ceph-deploy new ceph-node1ceph-deploy install ceph-node1 ceph-node2 ceph-node3 --no-adjust-reposceph -vceph-deploy mon create-initial
# 创建 OSDceph-deploy osd create --data /dev/vdb1 ceph-node1ceph-deploy osd create --data /dev/vdb1 ceph-node2ceph-deploy osd create --data /dev/vdb1 ceph-node3
# 创建 Managerceph-deploy mgr create ceph-node1 ceph-node2 ceph-node3
ceph -sceph config set mon auth_allow_insecure_global_id_reclaim falseceph-deploy admin ceph-node{1,2,3}chmod +r /etc/ceph/ceph.client.admin.keyring
--no-adjust-repos参数防止系统自动安装 epel-release 源,此处全使用本地安装。
8.4 Ceph 运维命令
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 # 列表 PGceph osd lspools # 列表存储池ceph osd tree # 检查 OSD 的 CRUSHceph auth list # 列表认证密钥9. Redis 集群部署与优化
9.1 一主二从部署
三节点准备:
# redis1, redis2, redis3hostnamectl set-hostname redis1
curl -O http://mirrors.douxuedu.com/competition/redis-3.2.12.tar.gztar -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=redisbaseurl=file:///opt/redisgpgcheck=0enabled=1EOF
yum clean all && yum repolistyum install -y redissystemctl start redis && systemctl enable redisredis1(主节点)配置:
vi /etc/redis.conf# bind 127.0.0.1protected-mode nodaemonize yesrequirepass "123456"masterauth "123456"appendonly yesredis2/redis3(从节点)配置:
# bind 127.0.0.1protected-mode nodaemonize yesrequirepass "123456"slaveof 主redis库ip 6379masterauth "123456"appendonly yes验证集群状态:
redis-cli -h 192.168.200.21 -p 6379 -a 123456 info replicationredis-cli -h 192.168.200.22 -p 6379 -a 123456 info replicationredis-cli -h 192.168.200.23 -p 6379 -a 123456 info replication9.2 哨兵模式配置
vi /etc/redis-sentinel.confprotected-mode nosentinel monitor mymaster 主redis库ip 6379 2sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 15000sentinel parallel-syncs mymaster 2sentinel auth-pass mymaster 123456systemctl restart redis-sentinelsystemctl enable redis-sentinel查看哨兵信息:
redis-cli -h 192.168.200.21 -p 26379 INFO Sentinelredis-cli -h 192.168.200.22 -p 26379 INFO Sentinelredis-cli -h 192.168.200.23 -p 26379 INFO Sentinel9.3 哨兵模式验证
# 停止主节点systemctl stop redis
# 在从节点查看,应自动切换为主节点redis-cli -h 192.168.200.22 -p 6379 -a 123456 info replicationredis-cli -h 192.168.200.23 -p 6379 -a 123456 info replication
# 恢复后变为从节点systemctl restart redissystemctl restart redis-sentinelredis-cli -h 192.168.200.21 -p 6379 -a 123456 info replication10. 私有云组件速查表
| 组件 | 说明 |
|---|---|
| MySQL/MariaDB | 关系型数据库,存储和管理数据 |
| RabbitMQ | 消息队列,异步消息处理和分布式通信 |
| Memcached | 内存缓存,提高性能、减轻数据库压力 |
| Etcd | 键值存储,共享配置和服务发现 |
| Keystone | 认证服务,身份验证和授权 |
| Glance | 镜像服务,管理虚拟机镜像 |
| Nova | 计算服务,管理虚拟机生命周期 |
| Neutron | 网络服务,虚拟网络管理 |
| Horizon | Dashboard,Web 管理界面 |
| Cinder | 块存储,持久化存储 |
| Swift | 对象存储,非结构化数据存储 |
| Heat | 编排服务,自动化部署 |
| Placement | 资源追踪,主机资源管理 |
| Ceph | 分布式存储,提供块/文件/对象存储 |
| Redis | 内存数据库/缓存,支持主从复制和哨兵模式 |