!!📢說明!!
- 🚫 1,請勿轉載本文相關內容到中國大陸任何媒體社交平臺. .
- 📢 2,所有實驗均運行與Arch Linux系統之上,並非Windows,但和Windows步驟是一樣的. .
- 📢 3,實驗中使用Vmware-Workstation虛擬化軟體,軟件來源自互聯網. .
- 📢 3,實驗中用到的所有軟體,均會採用最新版本,遵循Arch理念. .
🔧實驗準備.
- 🔧 準備好 基本實驗環境搭建..
實驗環境
👀 實驗環境.
| 設備名稱 | 主機名稱 | 接口對應關係 | IPV4地址 | 虛擬網卡網段 |
|---|---|---|---|---|
| 虛擬機1 | controller | eth0->vmnet21 eth1->vmnet25 | 192.168.21.21 10.10.21.21 | vmnet21: 192.168.21.0/24 |
| 虛擬機2 | compute | eth0->vmnet21 eth1->vmnet25 | 192.168.21.25 10.10.21.25 | vmnet25: 10.10.21.25.0/24 |
之後所有都有這張表格,所以請記住,你在哪,你是誰,你在幹什麼.
RUN
Yum 源配置[0.2 分]
在我們的準備工作中已經配置好了光盤yum源,所以,接下來的操作將很簡單.




controller主機執行.
yum makecache #建立軟體包緩存.
yum search httpd #搜索apache軟體包.
yum install -y httpd #安裝apache.
ln -sf /mnt/cdrom/ /var/www/html/xx #連接CD-ROM至網站目錄.
compute主機執行.
cat << "EOF" >/etc/yum.repos.d/controller_http.repo
[controller-http]
name=controller http repo
baseurl=http://controller/xx
gpgcheck=0
enabled=1
EOF
yum clean all &&yum makecache #清除所有軟體緩存,建立新的軟體緩存.配置无秘钥 ssh[0.2 分]


所有主機執行.
ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa -N '' -q拷貝ssh公鑰到雙方虛擬機.
controller主機執行.
ssh-copy-id root@computecompute主機執行.
ssh-copy-id root@controller基础安装[0.2 分]
10.43.3.222 將提供yum源服務,時間不應該浪費在找東西上.


所有主機執行.
cat << "EOF" >/etc/yum.repos.d/iaas-repo.repo #添加iaas-repo軟件倉庫.
[iaas-repo]
name=iaas http repo
baseurl=http://10.43.3.222:521/iaas-repo/
gpgcheck=0
enabled=1
scp /etc/yum.repos.d/iaas-repo.repo root@compute:/etc/yum.repos.d/ #配置compute節點iaas-repo源.
yum clean all &&yum makecache #清除軟體包緩存,建立新的軟體緩存.
所有主機執行.
yum clean all &&yum makecache #清除軟體包緩存,建立新的軟體緩存.
yum search openstack-iaas #搜索openstack-iaas軟體包.
yum install -y openstack-iaas #安裝openstack-iaas軟體.
配置openrc.sh文件以及環境變量.
sed -i 's/^#//g' /etc/openstack/openrc.sh #去掉/etc/openstack/openrc.sh文件所有開頭的^符號.編輯openrc.sh文件,Controller主機執行.
#--------------------system Config--------------------##
#Controller Server Manager IP. example:x.x.x.x
HOST_IP=192.168.21.21
#Controller HOST Password. example:000000
HOST_PASS=000000
#Controller Server hostname. example:controller
HOST_NAME=controller
#Compute Node Manager IP. example:x.x.x.x
HOST_IP_NODE=192.168.21.25 #compute節點ip.
#Compute HOST Password. example:000000
HOST_PASS_NODE=whoami #compute節點root密碼.
#Compute Node hostname. example:compute
HOST_NAME_NODE=compute
#--------------------Chrony Config-------------------##
#Controller network segment IP. example:x.x.0.0/16(x.x.x.0/24)
network_segment_IP=192.168.21.0/24 #controller節點和compute節點的網段.
#--------------------Rabbit Config ------------------##
#user for rabbit. example:openstack
RABBIT_USER=openstack
#Password for rabbit user .example:000000
RABBIT_PASS=000000
#--------------------MySQL Config---------------------##
#Password for MySQL root user . exmaple:000000
DB_PASS=000000
#--------------------Keystone Config------------------##
#Password for Keystore admin user. exmaple:000000
DOMAIN_NAME=demo
ADMIN_PASS=000000
DEMO_PASS=000000
#Password for Mysql keystore user. exmaple:000000
KEYSTONE_DBPASS=000000
#--------------------Glance Config--------------------##
#Password for Mysql glance user. exmaple:000000
GLANCE_DBPASS=000000
#Password for Keystore glance user. exmaple:000000
GLANCE_PASS=000000
#--------------------Placement Config----------------------##
#Password for Mysql placement user. exmaple:000000
PLACEMENT_DBPASS=000000
#Password for Keystore placement user. exmaple:000000
PLACEMENT_PASS=000000
#--------------------Nova Config----------------------##
#Password for Mysql nova user. exmaple:000000
NOVA_DBPASS=000000
#Password for Keystore nova user. exmaple:000000
NOVA_PASS=000000
#--------------------Neutron Config-------------------##
#Password for Mysql neutron user. exmaple:000000
NEUTRON_DBPASS=000000
#Password for Keystore neutron user. exmaple:000000
NEUTRON_PASS=000000
#metadata secret for neutron. exmaple:000000
METADATA_SECRET=000000
#External Network Interface. example:eth1
INTERFACE_NAME=eth1 #第二個網絡接口的名稱.
#External Network The Physical Adapter. example:provider
Physical_NAME=provider
#First Vlan ID in VLAN RANGE for VLAN Network. exmaple:101
minvlan=1
#Last Vlan ID in VLAN RANGE for VLAN Network. example:200
maxvlan=1000
#--------------------Cinder Config--------------------##
#Password for Mysql cinder user. exmaple:000000
CINDER_DBPASS=000000
#Password for Keystore cinder user. exmaple:000000
CINDER_PASS=000000
#Cinder Block Disk. example:md126p3
BLOCK_DISK=sdb1 #compute節點的第2塊磁盤的第一個分區.
#--------------------Swift Config---------------------##
#Password for Keystore swift user. exmaple:000000
SWIFT_PASS=000000
#The NODE Object Disk for Swift. example:md126p4.
OBJECT_DISK=sdb2 #compute節點的第2塊磁盤的第二個分區.
#The NODE IP for Swift Storage Network. example:x.x.x.x.
STORAGE_LOCAL_NET_IP=192.168.21.25 #compute節點的第二個卡的網段.
#--------------------Trove Config----------------------##
#Password for Mysql trove user. exmaple:000000
TROVE_DBPASS=000000
#Password for Keystore trove user. exmaple:000000
TROVE_PASS=000000
#--------------------Heat Config----------------------##
#Password for Mysql heat user. exmaple:000000
HEAT_DBPASS=000000
#Password for Keystore heat user. exmaple:000000
HEAT_PASS=000000
#--------------------Ceilometer Config----------------##
#Password for Gnocchi ceilometer user. exmaple:000000
CEILOMETER_DBPASS=000000
#Password for Keystore ceilometer user. exmaple:000000
CEILOMETER_PASS=000000
#--------------------AODH Config----------------##
#Password for Mysql AODH user. exmaple:000000
AODH_DBPASS=000000
#Password for Keystore AODH user. exmaple:000000
AODH_PASS=000000
#--------------------ZUN Config----------------##
#Password for Mysql ZUN user. exmaple:000000
ZUN_DBPASS=000000
#Password for Keystore ZUN user. exmaple:000000
ZUN_PASS=000000
#Password for Keystore KURYR user. exmaple:000000
KURYR_PASS=000000
#--------------------OCTAVIA Config----------------##
#Password for Mysql OCTAVIA user. exmaple:000000
OCTAVIA_DBPASS=000000
#Password for Keystore OCTAVIA user. exmaple:000000
OCTAVIA_PASS=000000
#--------------------Manila Config----------------##
#Password for Mysql Manila user. exmaple:000000
MANILA_DBPASS=000000
#Password for Keystore Manila user. exmaple:000000
MANILA_PASS=000000
#The NODE Object Disk for Manila. example:md126p5.
SHARE_DISK=sdb3 #compute節點的共享磁盤,第而塊磁盤的第三個分區.
#--------------------Cloudkitty Config----------------##
#Password for Mysql Cloudkitty user. exmaple:000000
CLOUDKITTY_DBPASS=000000
#Password for Keystore Cloudkitty user. exmaple:000000
CLOUDKITTY_PASS=000000
#--------------------Barbican Config----------------##
#Password for Mysql Barbican user. exmaple:000000
BARBICAN_DBPASS=000000
#Password for Keystore Barbican user. exmaple:000000
BARBICAN_PASS=000000
將配置好的openrc.sh文件scp到compute節點,Controller主機執行.
scp /etc/openstack/openrc.sh root@compute:/etc/openstack/openrc.sh 編輯openrc.sh文件的快捷方式.
sed -i 's/PASS=/PASS=000000/g' /etc/openstack/openrc.shcompute節點添加磁盤並分區,compute主機執行.











compute節點fdisk流程.
fdisk -l
fdisk /dev/sdb
g #轉換磁盤爲GPT格式.
n #建立分區.
#回車,選擇默認的起始地址.
1 #第1個分區.
+30G #增加30G空間.
n #建立分區.
#回車,選擇默認的起始地址.
2 #第2個分區.
#回車,選擇默認的起始地址.
+30G #增加30G空間.
n #建立分區.
3 #第3個分區.
#回車,選擇默認的起始地址.
+30G #增加30G空間.
w #保存更改.题目5数据库安装与调优 [0.5 分]
在接下來的操作中我們需要修改一些腳本,因爲iaas-pre-host.sh腳本中有我們之前搞過的東西,
我們精準預判了它的預判!



所有主機執行.
iaas-pre-host.sh #執行iaas-pre-host.sh腳本,<>
systemctl reboot #重啓.controller主機執行.
iaas-install-mysql.sh
systemctl status mariadb.service rabbitmq-server.service memcached.service #查看mariadb memcache rabbitmq 服務狀態.1.设置数据库支持大小写;

controller主機執行.
lower_case_table_names=1
sed -i '/\[mysqld\]/a\lower_case_table_names=1' /etc/my.cnf #快捷方法.2.设置数据库缓存 innodb 表的索引,数据,插入数据时的缓冲为 4G;

controller主機執行.
innodb_buffer_pool_size=4G
sed -i '/\[mysqld\]/a\innodb_log_buffer_size=4G' /etc/my.cnf #快捷方法.3.设置数据库的 log buffer 为 64MB;

睡覺不著的時候常常想,那些走過的路,自己的決定,如果可以重來,會不會做出不同的選擇.
結果越發的睡不着了,於是我不再想着自己的事情,我用力想着別人的事情,便很快入睡了.
不要糾結這個配置了64MB顯示4G的問題.
controller主機執行.
innodb_log_buffer_size=64M
sed -i '/\[mysqld\]/a\innodb_log_buffer_size=64M' /etc/my.cnf #快捷方法.4.设置数据库的 redo log 大小为 256MB;

controller主機執行.
innodb_log_file_size=256M
sed -i '/\[mysqld\]/a\innodb_log_file_size=256M' /etc/my.cnf #快捷方法.5.设置数据库的 redo log 文件组为 2。

controller主機執行.
innodb_log_files_in_group=2
sed -i '/\[mysqld\]/a\innodb_log_files_in_group=2' /etc/my.cnf #快捷方法.
6.修改 Memcached 的相关配置,将内存占用大小设置为 512MB,调整最大连接数参数为2048



controller主機執行.
vim /usr/lib/systemd/system/memcached.service #編輯memcached服務單元
ExecStart=/usr/bin/memcached -p ${PORT} -u ${USER} -m 512 -c 2048 $OPTIONS #修改ExecStart
controller主機執行.
#重新載入systemd的服務單元,重啓memcached服務並查看memcached服務狀態.
systemctl daemon-reload &&systemctl restart memcached.service &&systemctl status memcached.service7.调整 Memcached 的数据摘要算法(hash)为 md5;

controller主機執行.
vim /usr/lib/systemd/system/memcached.service #編輯memcached服務單元
ExecStart=/usr/bin/memcached -p ${PORT} -u ${USER} -m 512 -c 2048 -I 1m $OPTIONS #修改ExecStart
controller主機執行.
#重新載入systemd的服務單元,重啓memcached服務並查看memcached服務狀態.
systemctl daemon-reload &&systemctl restart memcached.service &&systemctl status memcached.serviceKeystone 服务安装与使用[0.5 分]
在控制节点上安装 Keystone 服务.

controller主機執行.
iaas-install-keystone.sh #安裝Keystone服務.
. /etc/keystone/admin-openrc.sh #生效keystone環境變量.
openstack token issue #獲取keystone toke信息.创建 OpenStack 域 210Demo

controller主機執行.
. /etc/keystone/admin-openrc.sh #生效keystone環境變量.
openstack domain create --description "210Demo Domain" 210Demo #創建 openstack 域 210Demo创建项目:在域210Demo中创建Engineering和Production项目.

controller主機執行.
#在域210Demo中创建Engineering项目
openstack project create --domain 210Demo --description "Engineering Project" Engineering
#在域210Demo中创建Production项目.
openstack project create --domain 210Demo --description "Production Project" Production 创建组:在域210Demo中创建Devops组.

controller主機執行.
openstack group create --domain 210Demo Devops #在域210Demo中创建Devops组.添加用户:在组Devops中添加Robert用户并指定其角色.

controller主機執行.
#创建一个名为Robert的用户,(密碼000000),并将其添加到Engineering项目中.
openstack user create --domain 210Demo --project Engineering --password-prompt Robert
controller主機執行.
openstack role add --project Engineering --user Robert member #分配member角色.
openstack role add --project Engineering --user Robert admin #分配admin角色.配置email 地址为 Robert@lab.example.com

controller主機執行.
#配置email 地址为 Robert@lab.example.com
openstack user set --email Robert@lab.example.com Robert
openstack user show Robert #查看Robert用戶信息.George用户是Engineering项目的用户(member),email:George@lab.example.com

controller主機執行.
openstack user create --domain 210Demo --project Engineering --password-prompt --email George@lab.example.com George
controller主機執行.
#爲用戶George在項目Engineering中添加member角色,並使用member角色的id去添加.
openstack role add --project Engineering --user George $(openstack role show member -c id -f value)
#查看項目信息.
openstack project show Engineering
#查看用戶信息.
openstack user show GeorgeWilliam用户是Production项目的用户(member)与管理员(admin),email:William@lab.example.com

controller主機執行.
#建立William用户email: William@lab.example.com.
openstack user create --domain 210Demo --project Production --password-prompt --email William@lab.example.com William

controller主機執行.
#将其添加到 Production 项目中作为管理员和成员.
openstack role add --project Production --user William $(openstack role show admin -c id -f value)
openstack role add --project Production --user William $(openstack role show member -c id -f value)John用户是Production项目的用户(member),email:John@lab.example.com
controller主機執行.
#建立John用户,email: John@lab.example.com.
openstack user create --domain 210Demo --project Production --password-prompt --email John@lab.example.com John
#将其添加到 Production 项目中作为成员
openstack role add --project Production --user John $(openstack role show member -c id -f value)Glance 安装与使用[0.5 分]
在控制节点上安装 Glance 服务。上传镜像至平台,并设置镜像启动的要求参数.

controller主機執行.
iaas-install-glance.sh上传镜像并重名为 deploy-vmlinuz



controller主機執行.
yum -y install wget #安装wget.
#下载coreos_production_pxe.vmlinuz 镜像.
wget http://10.43.3.222:523/coreos_production_pxe.vmlinuz
controller主機執行.
#上传镜像.
openstack image create deploy-vmlinuz --container-format aki < coreos_production_pxe.vmlinuzNova 安装与优化[0.5 分]
在控制节点和计算节点上分别安装 Nova 服务.

controller主機執行(请按照顺序执行).
iaas-install-placement.sh
iaas-install-nova-controller.sh
compute主機執行(请按照顺序执行).
iaas-install-nova-compute.sh修改调度器规则采用缓存调度器,缓存主机信息,提升调度时间。

controller主機執行.
vim /etc/nova/nova.conf #編輯配置文件,修改4501行爲
driver=caching_schedulerNeutron 安装[0.2 分]
在控制和计算节点上正确安装 Neutron 服务。

controller主機執行(请按照顺序执行).
iaas-install-neutron-controller.sh
compute主機執行(请按照顺序执行).
iaas-install-neutron-compute.shDashboard 安装[0.5 分]


controller主機執行.
iaas-install-dashboard.sh将Dashboard中的Django数据修改为存储在文件中

controller主機執行.
#快捷命令.
sed -i 's/backends.cache/backends.file/g' /etc/openstack-dashboard/local_settings使得登录 Dashboard 平台的时候不需要输入域名

controller主機執行.
vim /etc/openstack-dashboard/local_settings # 修改爲
ALLOWED_HOSTS = ['*', '192.168.21.21', 'controller']
Swift 安装[0.5 分]
在控制节点和计算节点上分别安装 Swift 服务.

controller主機執行.
iaas-install-swift-controller.sh
compute主機執行.
iaas-install-swift-compute.sh创建一个名叫examcontainer的容器.

controller主機執行.
swift post examcontainer #创建容器.
openstack container list #查看創建的容器.上傳cirros鏡像到examcontainer容器.


controller主機執行.
#下載鏡像.
wget http://10.43.3.222:523/cirros-0.3.4-x86_64-disk.img
controller主機執行.
#上傳到examcontainer容器中,分段存放,每一段大小为 10M
swift upload -S 10M examcontainer cirros-0.3.4-x86_64-disk.imgCinder 创建硬盘[0.5 分]
在控制节点和计算节点分别安装 Cinder 服务.

controller主機執行.
iaas-install-cinder-controller.sh在進行接下來的操作前,請讓我們聽首歌,一曲<<千千闋歌>>獻給大家.


compute主機執行.
fdisk /dev/sdb
n #新建分區.
#回車,選擇默認的起始地址.
+5G #增加5G容量.
p #查看分區情況.
w #保存修改.
接下來我們執行iaas-install-cinder-compute.sh腳本
compute主機執行.
iaas-install-cinder-compute.sh对块存储进行扩容操作

vgextend cinder-volumes /dev/sdb4
vgs配置主机禁 ping [0.5 分]

controller主機執行.
#配置內核參數禁止ping
echo 'net.ipv4.icmp_echo_ignore_all = 1' >>/etc/sysctl.conf
sysctl -p #生效內核參數配置.

