OpenStack知识点总结
一:云计算
一、起源
1. 云计算这个概念首次在2006年8月的搜索引擎会议上提出,成为了继互联网、计算机后信息时代的又一种革新(互联网第三次革命)。
2. 云计算的核心是将资源协调在一起,使用户通过网络就可以获取到无限的资源并且不受时间和空间的限制,为用户提供一种全新的体验。
二、基本概念
1. 定义
1. 官方:云计算是一种按使用量付费的模式(资源服务模式),该模式可以实现随时随地、便捷按需的从可配置资源共享池中获取所需的资源。
2. 百度百科:云计算是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。
2. 特点
1. 按需部署:根据用户的需求快速配备计算能力及资源分配。
2. 资源池化:供应商的资源被池化,以多用户租用模式被不同客户使用。
3. 快速伸缩:资源可以弹性的部署和释放。
4. 可靠性高:倘若服务器故障也不影响计算与应用的正常运行。
3. 分类
1. 私有云:云计算基础设施由一个单一的组织部署和使用。
2. 公有云:云计算基础设施被部署给广泛的公众公开使用。
3. 混合云:使用标准或专有的技术组合以上两种云。
4. 服务类型
1. IaaS(基础设施即服务):提供商提供虚拟化计算资源,如虚拟机、存储、网络和操作系统。
2. PaaS(平台即服务):通过互联网为开发人员提供构建应用程序和服务的平台。
3. SaaS(软件即服务):通过互联网为用户提供按需软件付费应用程序。
三、平台分类
1. 从技术应用划分
1. 以数据存储为主的存储型云平台
2. 以数据处理为主的计算型云平台
3. 计算和存储兼顾的综合型云平台
2. 从是否收费划分
1. 开源云平台:AbiCloud、Hadoop、Eucalyptus、MongoDB、OpenStack
2. 商业化云平台:Google、IBM、Oracle、Amazon、阿里云等
四、应用
1. 存储云:云存储是一个以数据存储和管理为核心的云计算系统。用户可以将本地的资源上传至云端上,可以在任何地方连入互联网来获取云上的资源。
2. 医疗云:使用云计算来创建医疗健康服务云平台,实现了医疗资源的共享和医疗范围的扩大
3. 金融云:利用云计算的模型,将信息、金融和服务等功能分散到庞大分支机构构成的互联网“云”中,共享互联网资源,从而解决现有问题并且达到高效、低成本的目标。
4. 教育云:教育云可以将所需要的任何教育硬件资源虚拟化,然后将其传入互联网中,以向教育机构和学生老师提供一个方便快捷的平台。
五、虚拟化
1. 虚拟化技术
1. 定义:虚拟化是一个广义上的术语,是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理,优化资源的解决方案。
2. 分类
1. 桌面虚拟化:在本地计算机显示和操作远程计算机桌面,在远程计算机执行程序和储存信息。
2. 应用虚拟化:在操作系统和应用程序间建立虚拟环境。
3. 服务器虚拟化:将服务器物理资源抽象成逻辑资源形成动态管理的“资源池“”。
4. 网络虚拟化:将不同网络的硬件和软件资源结合成一个虚拟的整体。
5. 存储虚拟化:将实体存储空间分隔成不同的逻辑存储空间。
2. 云计算和虚拟化的关系
3. 虚拟化的优点
1. 提高IT资源利用率,加速应用部署,提高应用兼容性。
2. 显著减少了服务器的数量,企业不动资产和管理成本。
二:OpenStack
一、简介
1. 定义
1. 百度百科:OpenStack是一个开源的云计算管理平台项目,由NASA(美国国家航空航天局)和Rackspace合作研发并发起,以Apache许可证授权的开源代码项目。
2. 官方:OpenStack是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过web接口让最终用户部署资源。
2. 发展历程
二、核心架构
1. 物理架构图
2. 逻辑架构图
3. 概念架构图
三、核心项目
1. 共享服务组件
1. 数据库服务(database service):Mariadb及Mongodb。
2. 消息传输(Message Queues)::RabbitMQ
3. 缓存(cache):Memcached
4. 时间同步(time sync):ntp
5. 存储(storge provider):ceph,GFS,LVM,ISICI等
6. 高可用及负载均衡:pacemaker,HAproxy,keepalived,lvs
2. 核心组件
1. 认证服务(Identity Service):Keystone。提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库。
2. 镜像服务(Image Service):Glance。提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板
3. 计算服务(compute):Nova。负责维护和管理云计算计算资源,维护和管理计算和网络。
4. 网络服务(Network):Neutron。提供了对网络节点的网络拓扑管理,同时提供Neutron在Horizon的管理面板
5. Web界面服务(Dashboard):Horizon。提供了以Web的形式对所有节点的所有服务的管理
6. 块存储服务(Block Storage):Cinder。为运行实例提供稳定的数据块存储服务
7. 对象存储(Object Storage):Swift。为Glance提供镜像存储和卷备份服务
8. 测量(Metering):Ceillrmeter。提供对物理资源以及虚拟资源的监控,并记录这些数据,对该数据进行分析,在一定条件下触发相应动作
9. 部署编排(Orchestration):Heat。提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性。
10. 数据库服务(Database Service):Trove。提供可扩展和可靠的关系和非关系数据库引擎服务
四、组件详解
1. RabbitMQ
1. 概念:实现了AMQP( 高级消息队列协议 )的流行消息队列系统 ,用于在分布式系统中存储转发消息,在 易用性、扩展性、高可用性等方面表现不俗。
2. 特点
1. 开源,性能优秀,稳定性保障。
2. 提供可靠性消息投递模式、返回模式和HA模式、表达式配置及镜像队列模型
3. 集群模式丰富,语Spring AMQP完美整合,保证数据不丢失的前提做到高可靠性和可用性
3. 核心概念
4. 工作原理
1. 客户端连接到消息队列服务器,打开一个channel。
2. 客户端声明一个exchange,并设置相关属性。
3. 客户端声明一个queue,并设置相关属性。
4. 客户端使用routing key,在exchange和queue之间建立好绑定关系。
5. 客户端投递消息到exchange。
6. exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。
5. 常用操作
2. Memcached
1. 概念:Memcached 是一个开源的、高性能的分布式内存对象缓存系统。通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站访问速度,加速动态WEB应用、减轻数据库负载。
2. 缓存流程
1. 检查客户端请求的数据是否在 Memcache 中,如果存在,直接将请求的数据返回,不在对数据进行任何操作。
2. 如果请求的数据不在 Memcache 中,就去数据库查询,把从数据库中获取的数据返回给客户端,同时把数据缓存一份 Memcache 中
3. 每次更新数据库的同时更新 Memcache 中的数据库,确保数据信息一致性。
4. 当分配给 Memcache 内存空间用完后,会使用 LRU 策略加到其失效策略,失效的数据首先被替换掉,然后再替换掉最近未使用的数据。
3. Keystone
1. 作用:认证服务,提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库。
2. 核心概念
3. 工作原理
4. 工作流程(在各个组件中的作用)
4. Glance
1. 作用:镜像服务,提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板
2. 核心概念
3. 工作原理
1. Glance-api:接收REST API的请求,然后通过其他模块来完成诸如镜像的查找、获取、上传、删除等操作,默认监听端口9292。
2. Glance-registry:用于与MariaDB数据库交互,用于存储或获取镜像的元数据(metadata),默认监听端口9191。
3. Store Adapter:通过提供的存储接口来获取镜像
5. Nova(核心)
1. 作用:负责维护和管理的网络和存储,提供计算服务
2. 核心组件
3. 虚拟机创建流程
6. Horizon
1. 作用:web界面服务(Dashboard),提供了以Web的形式对所有节点的所有服务的管理
2. 区域(Region)
1. 地理上的概念,可以理解为一个独立的数据中心,每个所定义的区域有自己独立的Endpoint;
2. 区域之间是完全隔离的,但多个区域之间共享同一个Keystone和Dashboard(目前Openstack中的Dashboard还不支持多个区域);
3. 区域的设计更多侧重地理位置的概念,用户可以选择离自己更新的区域来部署自己的服务,选择不同的区域主要是考虑那个区域更靠近自己;
4. 区域的概念是由Amazon在AWS中提出,主要是解决容错能力和可靠性;
3. 可用性区域(Availability Zone)
1. AZ是在Region范围内的再次切分,例如可以把一个机架上的服务器划分为一个AZ,划分AZ是为了提高容灾能力和提供廉价的隔离服务;
2. AZ主要是通过冗余来解决可用性的问题,在Amazon的声明中,Instance不可用是指用户所有AZ中的同一个Instance都不可达才表明不可用;
3. AZ是用户可见的一个概念,并可选择,是物理隔离的,一个AZ不可用不会影响其他的AZ,用户在创建Instance的时候可以选择创建到那些AZ中;
4. Host Aggreates:一组具有共同属性的节点集合,如以CPU作为区分类型的一个属性
5. Cell
1. 概念:nova为了增加横向扩展以及分布式、大规模(地理位置级别)部署的能力,同时又不增加数据库和消息中间件的复杂度,引入了cell的概念,并引入了nova-cell服务。
2. 作用
1. 解决OpenStack的扩展性和规模瓶颈
2. 每个Cell都有自己独立的DB和AMQP,不与其他模块共用DB和AMQP,解决了大规模环境中DB和AMQP的瓶颈问题;
3. Cell实现了树形结构(通过消息路由)和分级调度(过滤算法和权重算法),Cell之间通过RPC通讯,解决了扩展性问题;
7. Cinder
1. 作用:存储服务,为运行实例提供稳定的数据块存储服务
2. 核心组件
3. 工作流程
1. 用户向 cinder-api发送创建volume的请求
2. cinder-api对请求做一些必要处理后,通过 Messaging将创建消息发送给cinder-scheduler
3. cinder-scheduler从 Messaging 获取到 cinder-api发给它的消息,然后执行调度算法,从若干计存储点中选出节点 A
4. cinder-scheduler通过 Messaging 将创建消息发送给存储节点A
5. 存储节点 A 的 cinder-volume从 Messaging 中获取到 cinder-scheduler发给它的消息,然后通过 driver 在 volume provider 上创建 volume。
三:先电云计算基础架构服务平台搭建
一、搭建云平台(单双节点)
1. 创建虚拟机并配置网络
1. 虚拟机规格(单双节点均可用)
2. 网络配置
2. 基本环境配置
3. 编辑环境变量
4. 执行脚本安装服务
1. 单节点(computer改为compute)
2. 双节点(computer改为compute)
二、脚本详解
1. 基础配置脚本:iaas-pre-host.sh

2. 数据库服务脚本:iaas-install-msyql.sh

1 #!/bin/bash 2 source /etc/xiandian/openrc.sh # 加载配置文件 3 4 # ①ping控制节点最多四次并将标准和错误输出永久丢弃,如果执行失败后打印错误信息并退出 5 ping $HOST_IP -c 4 >> /dev/null 2>&1 6 if [ 0 -ne $? ]; then 7 echo -e "\033[31m Warning\nPlease make sure the network configuration is correct!\033[0m" 8 exit 1 9 fi 10 # ②配置时钟服务器 11 sed -i -e '/server/d' -e "/fudge/d" /etc/ntp.conf # 删除默认 12 sed -i -e "1i server 127.127.1.0" -e "2i fudge 127.127.1.0 stratum 10" /etc/ntp.conf # 配置时钟服务器 13 systemctl restart ntpd 14 systemctl enable ntpd 15 16 # ③安装MySQL的客户端、服务及与Python自动化(expect)交互工具,MongoDB客户端及服务,消息队列服务,缓存服务及与Python交互工具 17 yum install mariadb mariadb-server python2-PyMySQL expect mongodb-server mongodb rabbitmq-server memcached python-memcached -y 18 # 编辑配置文件,设置MySQL数据库默认引擎,数据库的编码,最大连接数 19 sed -i "/^symbolic-links/a\default-storage-engine = innodb\ninnodb_file_per_table\ncollation-server = utf8_general_ci\ninit-connect = 'SET NAMES utf8'\ncharacter-set-server = utf8\nmax_connections=10000" /etc/my.cnf 20 crudini --set /usr/lib/systemd/system/mariadb.service Service LimitNOFILE 10000 21 crudini --set /usr/lib/systemd/system/mariadb.service Service LimitNPROC 10000 22 systemctl daemon-reload # 使配置文件生效 23 systemctl enable mariadb.service 24 systemctl restart mariadb.service 25 26 #④自动化执行MySQL的安全配置向导 27 expect -c " # 自动执行脚本 28 spawn /usr/bin/mysql_secure_installation # 执行安全配置向导命令 29 expect \"Enter current password for root (enter for none):\" # 修改root密码 30 send \"\r\" 31 expect \"Set root password?\" # 设置密码 32 send \"y\r\" 33 expect \"New password:\" # 新密码 34 send \"$DB_PASS\r\" 35 expect \"Re-enter new password:\" # 确认新密码 36 send \"$DB_PASS\r\" 37 expect \"Remove anonymous users?\" # 删除匿名用户 38 send \"y\r\" 39 expect \"Disallow root login remotely?\" # 允许远程登录 40 send \"n\r\" 41 expect \"Remove test database and access to it?\" # 删除test数据库并访问 42 send \"y\r\" 43 expect \"Reload privilege tables now?\" # 刷新权限表 44 send \"y\r\" 45 expect eof # 脚本结束运行 46 " 47 48 # mongo 49 # 删除配置文件有bind_ip的行并将以smallfiles.开头和结尾的字符串替换为smallfiles=true 50 sed -i -e '/bind_ip/d' -e 's/#smallfiles.*/smallfiles=true/g' /etc/mongod.conf 51 systemctl enable mongod.service 52 systemctl restart mongod.service 53 54 # rabbitmq 55 systemctl enable rabbitmq-server.service 56 systemctl restart rabbitmq-server.service 57 rabbitmqctl add_user $RABBIT_USER $RABBIT_PASS 58 rabbitmqctl set_permissions $RABBIT_USER ".*" ".*" ".*" 59 60 # memcache 61 systemctl enable memcached.service 62 systemctl restart memcached.service
3. 身份认证服务脚本:iaas-install-keystone.sh

4. 镜像服务脚本:iaas-install-glance.sh

5. 计算服务脚本:iaas-install-nova-{controller,comput}.sh

1 #!/bin/bash 2 #### 加载脚本配置文件和keystone的admin配置文件 3 source /etc/xiandian/openrc.sh 4 source /etc/keystone/admin-openrc.sh 5 6 #### 创建nova和nova_api用户并授予本地和远程登录权限 7 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS nova ;" 8 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '$NOVA_DBPASS' ;" 9 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '$NOVA_DBPASS' ;" 10 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS nova_api ;" 11 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '$NOVA_DBPASS' ;" 12 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '$NOVA_DBPASS' ;" 13 14 #### 创建nova用户并授予admin权限,创建计算服务,创建处理外部、内部和admin访问端口 15 openstack user create --domain $DOMAIN_NAME --password $NOVA_PASS nova 16 openstack role add --project service --user nova admin 17 openstack service create --name nova --description "OpenStack Compute" compute 18 openstack endpoint create --region RegionOne compute public http://$HOST_NAME:8774/v2.1/%\(tenant_id\)s 19 openstack endpoint create --region RegionOne compute internal http://$HOST_NAME:8774/v2.1/%\(tenant_id\)s 20 openstack endpoint create --region RegionOne compute admin http://$HOST_NAME:8774/v2.1/%\(tenant_id\)s 21 22 #### 安装nova的核心组件 23 yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler 24 25 #### 配置计算服务 26 # 配置数据库连接 27 crudini --set /etc/nova/nova.conf database connection mysql+pymysql://nova:$NOVA_DBPASS@$HOST_NAME/nova 28 crudini --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:$NOVA_DBPASS@$HOST_NAME/nova_api 29 # 配置默认服务信息 30 crudini --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata # 停止使用EC2 API 31 crudini --set /etc/nova/nova.conf DEFAULT rpc_backend rabbit # 配置rpc_backend为rabbit 32 crudini --set /etc/nova/nova.conf DEFAULT auth_strategy keystone # 配置认证方式为keystone 33 crudini --set /etc/nova/nova.conf DEFAULT my_ip $HOST_IP # 配置管理ip为主机地址 34 crudini --set /etc/nova/nova.conf DEFAULT use_neutron True # 定义nova支持neutron网络服务组件 35 crudini --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver # 关闭nova计算服务组件的防火墙功能 36 crudini --set /etc/nova/nova.conf DEFAULT metadata_listen 0.0.0.0 # 定义metadata监听所有IP地址 37 crudini --set /etc/nova/nova.conf DEFAULT metadata_listen_port 8775 # 定义metadata监听8775端口 38 # 配置消息队列服务 39 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_host $HOST_NAME # 消息队列的主机名 40 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER # 消息队列得用户 41 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_password $RABBIT_PASS # 消息队列的密码 42 # 配置keystone认证 43 crudini --set /etc/nova/nova.conf keystone_authtoken auth_uri http://$HOST_NAME:5000 # 普通用户访问端口 44 crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://$HOST_NAME:35357 # 管理员访问端口 45 crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers $HOST_NAME:11211 # 缓存服务端口 46 crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password 47 crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name $DOMAIN_NAME # 租户 48 crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name $DOMAIN_NAME # 用户 49 crudini --set /etc/nova/nova.conf keystone_authtoken project_name service # 服务租户 50 crudini --set /etc/nova/nova.conf keystone_authtoken username nova # 用户名 51 crudini --set /etc/nova/nova.conf keystone_authtoken password $NOVA_PASS # 密码 52 # 配置VNC(虚拟网络控制台) 53 crudini --set /etc/nova/nova.conf vnc vncserver_listen $HOST_IP # 使用主机地址为管理地址 54 crudini --set /etc/nova/nova.conf vnc vncserver_proxyclient_address $HOST_IP # 使用主机地址为数据网络IP地址 55 # 配置glance镜像服务地址 56 crudini --set /etc/nova/nova.conf glance api_servers http://$HOST_NAME:9292 57 # 配置lock(文件锁)的文件路径 58 crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp 59 60 #### 将nova和nova_api的信息同步到数据库 61 su -s /bin/sh -c "nova-manage api_db sync" nova 62 su -s /bin/sh -c "nova-manage db sync" nova 63 64 #### 清空iptables的规则列并保存 65 iptables -F 66 iptables -X 67 iptables -Z 68 /usr/libexec/iptables/iptables.init save 69 70 #### 开启nova的相关服务 71 systemctl enable openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service 72 systemctl start openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service 73 74 :

6. 网络服务脚本
1. 控制节点(单节点)

1 #!/bin/bash 2 #### 生效(加载)脚本配置文件和keystone的admin配置文件 3 source /etc/xiandian/openrc.sh 4 source /etc/keystone/admin-openrc.sh 5 6 #### 创建neutron用户并授予本地和远程登录权限 7 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS neutron ;" 8 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '$NEUTRON_DBPASS' ;" 9 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '$NEUTRON_DBPASS' ;" 10 11 #### 创建neutron用户并授予admin权限,创建网络服务,创建处理外部、内部和admin访问端口 12 openstack user create --domain $DOMAIN_NAME --password $NEUTRON_PASS neutron 13 openstack role add --project service --user neutron admin 14 openstack service create --name neutron --description "OpenStack Networking" network 15 openstack endpoint create --region RegionOne network public http://$HOST_NAME:9696 16 openstack endpoint create --region RegionOne network internal http://$HOST_NAME:9696 17 openstack endpoint create --region RegionOne network admin http://$HOST_NAME:9696 18 19 #### 安装neutron的核心组件 20 yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables openstack-neutron-openvswitch openstack-neutron-lbaas python-neutron-lbaas haproxy openstack-neutron-fwaas 21 22 #### 配置网络服务 23 # 配置数据库连接 24 crudini --set /etc/neutron/neutron.conf database connection mysql://neutron:$NEUTRON_DBPASS@$HOST_NAME/neutron 25 # 配置消息队列服务 26 crudini --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit 27 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_host $HOST_NAME 28 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER 29 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_password $RABBIT_PASS 30 # 配置插件信息 31 crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2 # 核心插件 32 crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins router # 服务插件路由 33 crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips True # 允许包含多个ip 34 # 配置keystone认证服务 35 crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone 36 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_uri http://$HOST_NAME:5000 37 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://$HOST_NAME:35357 38 crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers $HOST_NAME:11211 39 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type password 40 crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name $DOMAIN_NAME 41 crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name $DOMAIN_NAME 42 crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name service 43 crudini --set /etc/neutron/neutron.conf keystone_authtoken username neutron 44 crudini --set /etc/neutron/neutron.conf keystone_authtoken password $NEUTRON_PASS 45 # 配置nova计算服务 46 crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes True 47 crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes True 48 crudini --set /etc/neutron/neutron.conf nova auth_url http://$HOST_NAME:35357 49 crudini --set /etc/neutron/neutron.conf nova auth_type password 50 crudini --set /etc/neutron/neutron.conf nova project_domain_name $DOMAIN_NAME 51 crudini --set /etc/neutron/neutron.conf nova user_domain_name $DOMAIN_NAME 52 crudini --set /etc/neutron/neutron.conf nova region_name RegionOne 53 crudini --set /etc/neutron/neutron.conf nova project_name service 54 crudini --set /etc/neutron/neutron.conf nova username nova 55 crudini --set /etc/neutron/neutron.conf nova password $NOVA_PASS 56 crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp 57 # 配置ml2(Ml2插件是一种同意OpenStack网络同一时候地利用多种二层网络技术的框架) 58 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,vlan,gre,vxlan,local # 配置类型驱动(管理多种网络类型) 59 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types 60 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers openvswitch,l2population # 配置机制驱动 61 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security 62 # 配置安全组 63 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset True # 开启ip设置 64 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_security_group true # 开启安全组 65 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup firewall_driver iptables_hybrid # 开启防火墙 66 # 配置接口驱动和外部网络 67 crudini --set /etc/neutron/l3_agent.ini DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver 68 crudini --set /etc/neutron/l3_agent.ini DEFAULT external_network_bridge 69 # 配置dhcp 70 crudini --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver 71 crudini --set /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver neutron.agent.linux.dhcp.Dnsmasq 72 crudini --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata True 73 # 配置openvswitch 74 crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini agent l2_population True 75 crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini agent prevent_arp_spoofing True 76 crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs integration_bridge br-int 77 crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup firewall_driver iptables_hybrid 78 # 配置metadata 79 crudini --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_ip $HOST_IP 80 crudini --set /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret $METADATA_SECRET 81 crudini --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_port 8775 82 # 配置nova 83 crudini --set /etc/nova/nova.conf DEFAULT auto_assign_floating_ip True 84 crudini --set /etc/nova/nova.conf DEFAULT metadata_listen 0.0.0.0 85 crudini --set /etc/nova/nova.conf DEFAULT metadata_listen_port 8775 86 crudini --set /etc/nova/nova.conf DEFAULT scheduler_default_filters 'AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter' 87 crudini --set /etc/nova/nova.conf DEFAULT compute_driver libvirt.LibvirtDriver 88 crudini --set /etc/nova/nova.conf neutron url http://$HOST_NAME:9696 89 crudini --set /etc/nova/nova.conf neutron auth_url http://$HOST_NAME:35357 90 crudini --set /etc/nova/nova.conf neutron auth_type password 91 crudini --set /etc/nova/nova.conf neutron project_domain_name $DOMAIN_NAME 92 crudini --set /etc/nova/nova.conf neutron user_domain_name $DOMAIN_NAME 93 crudini --set /etc/nova/nova.conf neutron region_name RegionOne 94 crudini --set /etc/nova/nova.conf neutron project_name service 95 crudini --set /etc/nova/nova.conf neutron username neutron 96 crudini --set /etc/nova/nova.conf neutron password $NEUTRON_PASS 97 crudini --set /etc/nova/nova.conf neutron service_metadata_proxy True 98 crudini --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret $METADATA_SECRET 99 100 #### 配置内核转发 101 echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf 102 echo "net.ipv4.conf.default.rp_filter=0" >> /etc/sysctl.conf 103 echo 'net.ipv4.conf.all.rp_filter=0' >> /etc/sysctl.conf 104 sysctl -p 105 106 #### 创建链接并同步数据库 107 ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini 108 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 109 110 #### 开启服务 111 systemctl restart openvswitch 112 systemctl enable openvswitch 113 ovs-vsctl add-br br-int #添加网桥 114 systemctl restart openstack-nova-api.service 115 systemctl enable neutron-server.service neutron-openvswitch-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service 116 systemctl restart neutron-server.service neutron-openvswitch-agent neutron-dhcp-agent.service neutron-metadata-agent.service 117 systemctl enable neutron-l3-agent.service 118 systemctl restart neutron-l3-agent.service

1 #!/bin/bash 2 #### 生效脚本配置文件和keystone的admin配置文件 3 source /etc/xiandian/openrc.sh 4 source /etc/keystone/admin-openrc.sh 5 6 #### 配置neutron的负载均衡 7 crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins router,lbaas,firewall 8 crudini --set /etc/neutron/neutron_lbaas.conf service_providers service_provider LOADBALANCER:Haproxy:neutron_lbaas.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default 9 crudini --set /etc/neutron/lbaas_agent.ini DEFAULT device_driver neutron_lbaas.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver 10 crudini --set /etc/neutron/lbaas_agent.ini DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver 11 crudini --set /etc/neutron/lbaas_agent.ini haproxy user_group haproxy 12 #### 配置neutron的防火墙服务 13 crudini --set /etc/neutron/neutron.conf service_providers FIREWALL:Iptables:neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver:default 14 crudini --set /etc/neutron/fwaas_driver.ini fwaas driver neutron_fwaas.services.firewall.drivers.linux.iptables_fwaas.IptablesFwaasDriver 15 crudini --set /etc/neutron/fwaas_driver.ini fwaas enabled True 16 #### 设置租户的网络类型和私有网络提供的标识范围 17 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types gre 18 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_gre tunnel_id_ranges 1:1000 19 20 #### 添加一个br-ex网桥并将其添加到第二块网卡 21 ovs-vsctl add-br br-ex 22 ovs-vsctl add-port br-ex $INTERFACE_NAME 23 24 #### 使用标准输出和输入覆盖第二块网卡的内容 25 cat > /etc/sysconfig/network-scripts/ifcfg-$INTERFACE_NAME <<EOF 26 DEVICE=$INTERFACE_NAME # 网卡名称 27 TYPE=Ethernet # 网络类型 28 BOOTPROTO=none # 禁用dhcp 29 ONBOOT=yes # 开机自启设备 30 EOF 31 systemctl restart network 32 33 #### 将bridge网络转为openvswitch 34 crudini --set /etc/neutron/l3_agent.ini DEFAULT external_network_bridge br-ex 35 crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings physnet1:br-ex 36 crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini agent tunnel_types gre 37 crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs local_ip $HOST_IP 38 crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs enable_tunneling True 39 crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings external:br-ex 40 41 neutron-db-manage --service lbaas upgrade head 42 neutron-db-manage --subproject neutron-fwaas upgrade head 43 #### 开启neutron服务 44 systemctl restart neutron-server 45 systemctl restart neutron-l3-agent neutron-openvswitch-agent 46 #### 开启neutron负载均衡服务 47 systemctl restart neutron-lbaas-agent 48 systemctl enabled neutron-lbaas-agent
2. 计算节点


7. web界面服务:iaas-install-dashboard.sh

8. 块存储服务脚本:iaas-install-cinder-{controller,compute}.sh


9. 对象存储服务:iaas-install-swift-{controller,compute}.sh

1 #!/bin/bash 2 #### 加载脚本配置文件和keystone的admin环境变量配置文件,安装swift的核心组件 3 source /etc/xiandian/openrc.sh 4 source /etc/keystone/admin-openrc.sh 5 yum install openstack-swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached -y 6 7 8 #### 创建swift用户并授予admin权限,创建对象存储服务,创建处理外部、内部和admin访问端口 9 openstack user create --domain $DOMAIN_NAME --password $SWIFT_PASS swift 10 openstack role add --project service --user swift admin 11 openstack service create --name swift --description "OpenStack Object Storage" object-store 12 openstack endpoint create --region RegionOne object-store public http://$HOST_NAME:8080/v1/AUTH_%\(tenant_id\)s 13 openstack endpoint create --region RegionOne object-store internal http://$HOST_NAME:8080/v1/AUTH_%\(tenant_id\)s 14 openstack endpoint create --region RegionOne object-store admin http://$HOST_NAME:8080/v1 15 16 #### 使用标准输入和输出编写swift的代理服务配置文件 17 cat <<EOF > /etc/swift/proxy-server.conf 18 # 配置默认信息 19 [DEFAULT] 20 bind_port = 8080 # 配置对象存储服务组件使用的端口 21 swift_dir = /etc/swift # 配置对象存储服务组件使用的路径 22 user = swift # 配置对象存储服务使用的用户 23 # 配置安装管道 24 [pipeline:main] 25 pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server # 启用相应的模块 26 # 配置代理服务 27 [app:proxy-server] 28 use = egg:swift#proxy # 使用方法 29 account_autocreate = True # 开启自动创建账户 30 # 配置临时用户角色 31 [filter:tempauth] 32 use = egg:swift#tempauth # 使用方法 33 user_admin_admin = admin .admin .reseller_admin # 管理员角色 34 user_test_tester = testing .admin # 普通用户角色 35 user_test2_tester2 = testing2 .admin 36 user_test_tester3 = testing3 37 user_test5_tester5 = testing5 service 38 # 配置访问端口 39 [filter:authtoken] 40 paste.filter_factory = keystonemiddleware.auth_token:filter_factory # Paste过滤器 "authtoken" 添加到Paste管道的适当位置, 完成在OpenStack服务上部署Keystone中间件 41 auth_uri = http://$HOST_NAME:5000 # 普通用户访问端口 42 auth_url = http://$HOST_NAME:35357 # 管理员访问端口 43 memcached_servers = $HOST_NAME:11211 # 缓存服务访问端口 44 auth_type = password 45 project_domain_name = $DOMAIN_NAME # 域 46 user_domain_name = $DOMAIN_NAME # 域 47 project_name = service # 租户 48 username = swift # 用户 49 password = $SWIFT_PASS # 密码 50 delay_auth_decision = True 51 # 配置keystone中间件 52 [filter:keystoneauth] 53 use = egg:swift#keystoneauth # 使用方法 54 operator_roles = admin,user # 用户角色 55 # 配置安全验证 56 [filter:healthcheck] 57 use = egg:swift#healthcheck、 58 # 配置缓存 59 [filter:cache] 60 memcache_servers = $HOST_NAME:11211 61 use = egg:swift#memcache 62 # 配置速率限制 63 [filter:ratelimit] 64 use = egg:swift#ratelimit 65 # 配置域的重新映射 66 [filter:domain_remap] 67 use = egg:swift#domain_remap 68 [filter:catch_errors] 69 use = egg:swift#catch_errors 70 # 配置显示名 71 [filter:cname_lookup] 72 use = egg:swift#cname_lookup 73 # 配置静态网页 74 [filter:staticweb] 75 use = egg:swift#staticweb 76 # 配置临时URL 77 [filter:tempurl] 78 use = egg:swift#tempurl 79 # 配置表单提交方式 80 [filter:formpost] 81 use = egg:swift#formpost 82 # 配置用户名校验 83 [filter:name_check] 84 use = egg:swift#name_check 85 # 配置端口显示 86 [filter:list-endpoints] 87 use = egg:swift#list_endpoints 88 # 配置代理日志 89 [filter:proxy-logging] 90 use = egg:swift#proxy_logging 91 # 配置块 92 [filter:bulk] 93 use = egg:swift#bulk 94 [filter:slo] 95 use = egg:swift#slo 96 [filter:dlo] 97 use = egg:swift#dlo 98 # 容器配额 99 [filter:container-quotas] 100 use = egg:swift#container_quotas 101 # 用户配额 102 [filter:account-quotas] 103 use = egg:swift#account_quotas 104 # 配置系统卫士 105 [filter:gatekeeper] 106 use = egg:swift#gatekeeper 107 # 配置容器同步 108 [filter:container_sync] 109 use = egg:swift#container_sync 110 [filter:xprofile] 111 use = egg:swift#xprofile 112 [filter:versioned_writes] 113 use = egg:swift#versioned_writes 114 EOF 115 116 #### swift操作 117 pushd /etc/swift # 创建目录栈,将当前目录压入栈中(栈顶) 118 # 用户环操作 119 swift-ring-builder account.builder create 18 1 1 # 创建18个分区、1个副本和1频率的用户环构造器文件 120 swift-ring-builder account.builder add --region 1 --zone 1 --ip $STORAGE_LOCAL_NET_IP --port 6002 --device $OBJECT_DISK --weight 100 # 将$OBJECT_DISK设备添加到用户环 121 swift-ring-builder account.builder # 构建用户环 122 swift-ring-builder account.builder rebalance # 重新平衡环,通过重新分配分区最近没有被重新分配的分区 123 # 容器环操作 124 swift-ring-builder container.builder create 10 1 1 # 创建10个分区、副本和频率是1的容器环构造文件 125 swift-ring-builder container.builder add --region 1 --zone 1 --ip $STORAGE_LOCAL_NET_IP --port 6001 --device $OBJECT_DISK --weight 100 # 将$OBJECT_DISK设备添加到容器环 126 swift-ring-builder container.builder # 构架容器环 127 swift-ring-builder container.builder rebalance # 重新平衡环 128 # 对象环操作 129 swift-ring-builder object.builder create 10 1 1 # 创建10个分区、副本和频率是1的对象环构造文件 130 swift-ring-builder object.builder add --region 1 --zone 1 --ip $STORAGE_LOCAL_NET_IP --port 6000 --device $OBJECT_DISK --weight 100 # 将$OBJECT_DISK设备添加到容器环 131 swift-ring-builder object.builder # 构建对象环 132 swift-ring-builder object.builder rebalance # 重新平衡环 133 134 popd # 将栈顶的目录弹出,与pushd相反 135 136 #### 使用标准输入输出编写swift的配置文件 137 #--------------- 138 cat << EOF > /etc/swift/swift.conf、 139 # 配置存储路径 140 [swift-hash] 141 swift_hash_path_suffix = changeme # 配置hash路劲的后缀 142 swift_hash_path_prefix = changeme # 配置hash路径的前缀 143 # 配置存储策略 144 [storage-policy:0] 145 name = Policy-0 # 配置默认存储策略的名字 146 default = yes # 开启默认存储策略 147 aliases = yellow, orange # 别名的颜色 148 [swift-constraints] 149 EOF 150 151 #### 修改权限,开启swift的代理和缓存服务 152 chown -R root:swift /etc/swift 153 systemctl enable openstack-swift-proxy.service memcached.service 154 systemctl restart openstack-swift-proxy.service memcached.service

1 #!/bin/bash 2 #### 基本配置 3 source /etc/xiandian/openrc.sh # 加载配置文件 4 yum install xfsprogs rsync openstack-swift-account openstack-swift-container openstack-swift-object -y # 安装swift服务组件 5 mkfs.xfs -i size=1024 -f /dev/$OBJECT_DISK # 格式化分区 6 sed -i '/nodiratime/d' /etc/fstab # 删除旧挂载 7 echo "/dev/$OBJECT_DISK /swift/node xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab # 设置永久挂载 8 mkdir -p /swift/node # 创建挂载目录 9 mount /dev/$OBJECT_DISK /swift/node # 挂载 10 scp $HOST_NAME:/etc/swift/*.ring.gz /etc/swift/ # 同步环到集群到当前节点 11 12 #### 配置同步服务器 13 cat <<EOF > /etc/rsyncd.conf 14 pid file = /var/run/rsyncd.pid # 进程号文件路径 15 log file = /var/log/rsyncd.log # 日志文件路劲 16 uid = swift # 用户号 17 gid = swift # 组号 18 address = 127.0.0.1 # 本机地址 19 # 用户配置 20 [account] 21 path = /swift/node # 路劲 22 read only = false # 是否只读 23 write only = no # 是否只写 24 list = yes # 是否可以查看 25 incoming chmod = 0644 # 进入权限 26 outgoing chmod = 0644 # 出去权限 27 max connections = 25 # 最大连接数 28 lock file = /var/lock/account.lock # 锁文件路劲 29 # 容器配置 30 [container] 31 path = /swift/node 32 read only = false 33 write only = no 34 list = yes 35 incoming chmod = 0644 36 outgoing chmod = 0644 37 max connections = 25 38 lock file = /var/lock/container.lock 39 # 对象配置 40 [object] 41 path = /swift/node 42 read only = false 43 write only = no 44 list = yes 45 incoming chmod = 0644 46 outgoing chmod = 0644 47 max connections = 25 48 lock file = /var/lock/object.lock 49 # 服务配置 50 [swift_server] 51 path = /etc/swift 52 read only = true 53 write only = no 54 list = yes 55 incoming chmod = 0644 56 outgoing chmod = 0644 57 max connections = 5 58 lock file = /var/lock/swift_server.lock 59 EOF 60 # 开启同步服务 61 systemctl enable rsyncd.service 62 systemctl restart rsyncd.service 63 64 #### 配置账户服务 65 cat <<EOF > /etc/swift/account-server.conf 66 [DEFAULT] 67 bind_port = 6002 # 访问端口 68 user = swift # 用户 69 swift_dir = /etc/swift # 访问路劲 70 devices = /swift/node # 设备路径 71 mount_check = false 72 [pipeline:main] 73 pipeline = healthcheck recon account-server 74 [app:account-server] 75 use = egg:swift#account 76 [filter:healthcheck] 77 use = egg:swift#healthcheck 78 [filter:recon] 79 use = egg:swift#recon 80 recon_cache_path = /var/cache/swift 81 [account-replicator] 82 [account-auditor] 83 [account-reaper] 84 [filter:xprofile] 85 use = egg:swift#xprofile 86 EOF 87 88 #### 配置容器服务 89 cat <<EOF > /etc/swift/container-server.conf 90 [DEFAULT] 91 bind_port = 6001 92 user = swift 93 swift_dir = /etc/swift 94 devices = /swift/node 95 mount_check = false 96 [pipeline:main] 97 pipeline = healthcheck recon container-server 98 [app:container-server] 99 use = egg:swift#container 100 [filter:healthcheck] 101 use = egg:swift#healthcheck 102 [filter:recon] 103 use = egg:swift#recon 104 recon_cache_path = /var/cache/swift 105 [container-replicator] 106 [container-updater] 107 [container-auditor] 108 [container-sync] 109 [filter:xprofile] 110 use = egg:swift#xprofile 111 EOF 112 113 #### 配置对象服务 114 cat <<EOF > /etc/swift/object-server.conf 115 [DEFAULT] 116 bind_port = 6000 117 user = swift 118 swift_dir = /etc/swift 119 devices = /swift/node 120 mount_check = false 121 [pipeline:main] 122 pipeline = healthcheck recon object-server 123 [app:object-server] 124 use = egg:swift#object 125 [filter:healthcheck] 126 use = egg:swift#healthcheck 127 [filter:recon] 128 use = egg:swift#recon 129 recon_cache_path = /var/cache/swift 130 recon_lock_path = /var/lock 131 [object-replicator] 132 [object-reconstructor] 133 [object-updater] 134 [object-auditor] 135 [filter:xprofile] 136 use = egg:swift#xprofile 137 EOF 138 139 #### 配置swift 140 cat <<EOF > /etc/swift/swift.conf 141 # 配置存储路劲 142 [swift-hash] 143 swift_hash_path_suffix = changeme # 配置hash路径的后缀 144 swift_hash_path_prefix = changeme # 配置hash路劲的前缀 145 # 配置存储策略 146 [storage-policy:0] 147 name = Policy-0 148 default = yes 149 aliases = yellow, orange 150 [swift-constraints] 151 EOF 152 153 #### 修改目录访问权限 154 chown -R swift:swift /swift/node 155 mkdir -p /var/cache/swift 156 chown -R root:swift /var/cache/swift 157 chmod -R 775 /var/cache/swift 158 chown -R root:swift /etc/swift 159 160 #### 开启swift的账户、容器和对象服务 161 systemctl enable openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service 162 systemctl restart openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service 163 systemctl enable openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service 164 systemctl restart openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service 165 systemctl enable openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service 166 systemctl restart openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service
__EOF__

本文链接:https://www.cnblogs.com/mh20131118/p/12261589.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix