Openstack實驗筆記
制作人:全心全意
Openstack:提供可靠的雲部署方案及良好的擴展性
Openstack簡單的說就是雲操作系統,或者說是雲管理平台,自身並不提供雲服務,只是提供部署和管理平台
架構圖:
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/Mf6rnJXoRGXLpebCzPTUfETy68mVidyW.VTA2AbQxE0!/b/dDUBAAAAAAAA&bo=swFuAQAAAAARB.0!&rf=viewer_4
Keystone作為Openstack的核心模塊,為Nova(計算),Glance(鏡像),Swift(對象存儲),Cinder(塊存儲),Neutron(網絡)以及Horizon(Dashboard)提供認證服務
Glance:openstack的鏡像服務組件,主要提供了一個虛擬機鏡像文件的存儲、查詢和檢索服務,通過提供一個虛擬磁盤映像目錄和存儲庫,為Nova的虛擬機提供鏡像服務,現在有v1和v2兩個版本
物理硬件配置(最低)
控制節點:
1-2個cpu
8G內存
2個網卡
計算節點:
2-4個cpu
8G內存
2個網卡
塊節點:
1-2個cpu
4G內存
1個網卡
最少2個磁盤
對象節點:
1-2個cpu
4G內存
1個網卡
最少2個磁盤
網絡拓撲圖:(實驗中,管理、存儲和本地網絡合並)
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/r30ELjijnHAaYX*RMZe4vhwVNcix4zUb2pNnovlYZ7E!/b/dL8AAAAAAAAA&bo=xgKqAQAAAAADB00!&rf=viewer_4
安裝
控制節點:quan 172.16.1.211 172.16.1.221
計算節點:quan1 172.16.1.212 172.16.1.222
存儲節點:storage 172.16.1.213 172.16.1.223
對象存儲節點1:object01 172.16.1.214 172.16.1.224
對象存儲節點2:object02 172.16.1.215 172.16.1.225
准備工作:
關閉防火牆
關閉selinux
關閉NetworkManager
安裝ntp服務:
yum -y install chrony(所有主機)
修改配置文件:允許網段中的主機訪問
allow 172.16.1.0/24
systemctl enable chronyd.service
systemctl start chronyd.service
其它節點:
vi /etc/chrony.conf
server quan iburst
#注意:使用原始的centos網絡源
yum install epel-release
yum install centos-release-openstack-queens
yum install openstack-selinux
yum install python-openstackclient
安裝數據庫
控制(quan)節點安裝數據庫
yum install -y mariadb mariadb-server python2-PyMySQL
vi /etc/my.cnf.d/openstack.cnf
bind-address=172.16.1.211
default-storage-engine=innodb
innodb_file_per_table=on
max_connections=4096
collation-server=utf8_general_ci
character-set-server=utf8
啟動數據庫,並設置開機啟動
systemctl enable mariadb.service && systemctl start mariadb.service
初始化數據庫
mysql_secure_installation
控制節點(quan)安裝消息隊列(端口:5672)
yum install rabbitmq-server -y
服務啟動,並設置開機啟動
systemctl enable rabbitmq-server.service && systemctl start rabbitmq-server.service
添加openstack用戶
rabbitmqctl add openstack openstack
為openstack用戶添加讀寫權限
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
控制節點(quan)安裝memcached緩存(端口:11211)
yum -y install memcached python-memcached
vi /etc/sysconfig/memcached
OPTIONS="-l 127.0.0.1,::1,quan"
服務啟動,並設置開機啟動
systemctl enable memcached.service && systemctl start memcached.service
控制節點(quan)安裝etcd服務(key-value存儲系統)
yum -y install etcd
vi /etc/etcd/etcd.conf
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://quan:2380"
ETCD_LISTEN_CLIENT_URLS="http://quan:2379"
ETCD_NAME="quan"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://quan:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://quan:2379"
ETCD_INITIAL_CLUSTER="quan=http://quan:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
服務啟動,並設置開機啟動
systemctl enable etcd.service && systemctl start etcd.service
Keystone組件
Keystone作為Openstack的核心模塊,為Nova(計算),Glance(鏡像),Swift(對象存儲),Cinder(塊存儲),Neutron(網絡)以及Horizon(Dashboard)提供認證服務
基本概念:
User:用戶,代表可以通過keystone進行訪問的人或程序。User通過認證信息(credentials,如密碼,API Keys等)進行驗證。
Tenant:租戶,各個服務中的一些可以訪問的資源集合。例如,在Nova中一個tenant可以是一些機器,在Swift和Glance中一個tenant可以是一些鏡像存儲,在Neutron中一個tenant可以是一些網絡資源。Users默認的總是綁定到某些tenant上。
Role:角色,Roles代表一組用戶可以訪問的資源權限,例如Nova中的虛擬機、Glance中的鏡像。Users可以被添加到任意一個全局的或租戶的角色中。在全局的role中,用戶的role權限作用於所有的租戶,即可以對所有的租戶執行role規定的權限,在租戶內的role中,用戶僅能在當前租戶內執行role規定的權限。
Service:服務,如Nove、Glance、Swift。根據User、Tenant和Role三個概念,一個服務可以確定當前用戶是否具有訪問其資源的權限,但是當一個user嘗試着訪問其租戶內的service時,他必須知道這個service是否存在以及如何訪問這個service,這里通常使用一些不同的名稱表示不同的服務。
Endpoint:端點,可以理解為是一個服務暴露出的訪問點
Token:訪問資源的鑰匙。通過Keystone驗證后的返回值,在之后與其它服務器交互中只需要攜帶Token值即可,每個Token都有一個有效期。
各概念之間的關系
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/PJAecZuZ1C44VKDjcsKLYotu5KOz3RNZwumR07nBIug!/b/dDUBAAAAAAAA&bo=BAIsAQAAAAADBwk!&rf=viewer_4
1、租戶下,管理者一堆用戶(人,或程序)
2、每個用戶都有自己的credentials(憑證)用戶名+密碼或者用戶名+API key,或其它憑證
3、用戶在訪問其他資源(計算、存儲)之前,需要用自己的credential去請求keystone服務,獲得驗證信息(主要是Token信息)和服務信息(服務目錄和它們的endpoint)
4、用戶拿着Token信息,就可以去訪問資源了
keystone在Openstack中的工作流程圖
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/ptROtuhyzh7Mq3vSVz3Ut1TtGDXuBbYf*WbN8UZdWDE!/b/dLgAAAAAAAAA&bo=igIRAgAAAAADB7k!&rf=viewer_4
搭建keystone
創建數據庫
mysql -uroot -popenstack
create database keystone;
grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'openstack';
grant all privileges on keystone.* to 'keystone'@'%' identified by 'openstack';
安裝
yum -y install openstack-keystone httpd mod_wsgi
vi /etc/keystone/keystone.conf
[database]
connection = mysql+pymysql://keystone:openstack@quan/keystone #數據庫連接 用戶名:密碼@主機名/數據庫名
[token]
provider=fernet
初始化keystone數據庫
su -s /bin/sh -c "keystone-manage db_sync" keystone
初始化femet密鑰存儲庫
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
創建keystone的服務端口(會在endpoint中生成數據)
keystone-manage bootstrap --bootstrap-password openstack --bootstrap-admin-url http://quan:35357/v3/ --bootstrap_internal-url http://quan:5000/v3/ --bootstrap-public-url http://quan:5000/v3/ --bootstrap-region-id RegionOne
配置http服務
vi /etc/httpd/conf/httpd.conf
ServerName quan
創建軟鏈接
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
服務啟動,並設置開機啟動
systemctl enable httpd.service && systemctl start httpd.service
創建管理員賬號
vim admin-openrc
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://quan:35357/v3
export OS_IDENTITY_API_VERSION=3
導入管理員賬號
source admin-openrc
創建域/項目/用戶/和角色
創建項目
openstack project create --domain default --description "Service Project" service
openstack project create --domain default --description "Demo Project" demo
創建用戶(demo),並指定其密碼
openstack user create --domain default --password-prompt demo
創建角色(user)
openstack role create user
將demo添加的user角色中
openstack role add --project demo --user demo user
驗證
解除之前的環境變量
unset OS_AUTH_URL OS_PASSWORD
執行下面的命令,輸入admin的密碼
openstack --os-auth-url http://quan:35357/v3 \
--os-project-domain-name Default \
--os-user-domain-name Default \
--os-project-name admin \
--os-username admin token issue
執行下面的命令,輸入demo用戶的密碼
openstack --os-auth-url http://quan:5000/v3 \
--os-project-domain-name Default \
--os-user-domain-name Default \
--os-project-name demo \
--os-username demo token issue
創建openstack客戶端腳本環境
創建管理員賬號
vim admin-openrc
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://quan:35357/v3
export OS_IDENTITY_API_VERSION=3 #指定認證服務版本
export OS_IMAGE_API_VERSION=2 #指定鏡像服務版本
創建demo用戶賬號
vim demo-openrc
export OS_USERNAME=demo
export OS_PASSWORD=openstack
export OS_PROJECT_NAME=demo
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://quan:35357/v3
export OS_IDENTITY_API_VERSION=3 #指定認證服務版本
export OS_IMAGE_API_VERSION=2 #指定鏡像服務版本
導入管理員賬號
source admin-openrc
驗證管理員
openstack token issue
導入demo用戶
source demo-openrc
驗證demo用戶
openstack token issue
glance組件
Glance:openstack的鏡像服務組件,主要提供了一個虛擬機鏡像文件的存儲、查詢和檢索服務,通過提供一個虛擬磁盤映像目錄和存儲庫,為Nova的虛擬機提供鏡像服務,現在有v1和v2兩個版本
Glance的架構圖:
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/mkXPMrNM9RL.NizLwc22Vm*FHkAc2NWh9668JHk4zS0!/b/dLYAAAAAAAAA&bo=RQHZAAAAAAADB78!&rf=viewer_4
鏡像服務組件
Glance-api:是一個對外的API接口,能夠接受外部的API鏡像請求。默認端口是9292
glance-registry:用於存儲、處理、獲取Image Metadate。默認端口的9191
glance-db:在Openstack中使用MySQL來支撐,用於存放Image Metadate。通過glance-registry保存在MySQL Database
Image Store:用於存儲鏡像文件。通過Strore Backend后端存儲接口來與glance-api聯系。通過這個接口,glance可以從Image Store獲取鏡像文件再交由Nove用於創建虛擬機
Glance通過Store Adapter(存儲適配器)支持多種Image Store方案,支持swift、file system、s3、sheepdog、rbd、cinder等。
Glance支持的Image格式
raw:非結構化的鏡像格式
vhd:一種通用的虛擬機磁盤格式,可用於Vmware、Xen、VirtualBox等
vmdk:Vmware的虛擬機磁盤格式
vdi:VirtualBox、QEMU等支持的虛擬機磁盤格式
qcow2:一種支持QEMU並且可以動態擴展的磁盤格式(默認使用)
aki:Amazon Kernel鏡像
ari:Amazon Ramdisk鏡像
ami:Amazon虛擬機鏡像
Glance的訪問權限
public:公共的,可以被所有的Tenant使用
Private:私有的/項目的,只能被Image Owner所在的Tenant使用
Shared:共享的,一個非公共的Image可以共享給指定的Tenant,通過member-*操作來實現
Protected:受保護的,不能被刪除
狀態類型
Queued:沒有上傳Image數據,只存有該鏡像的元數據
Saving:正在上傳Image
Active:正常狀態
Deleted/pending_delete:已刪除/等待刪除的Image
Killed:Image元數據不正確,等待被刪除
搭建glance
創建數據庫
mysql -uroot -popenstack
create database glance;
grant all privileges on glance.* to 'glance'@'localhost' identified by 'openstack';
grant all privileges on glance.* to 'glance'@'%' identified by 'openstack';
創建glance用戶,並在service項目中添加管理員角色
source admin_openrc
openstack user create --domain default --password-prompt glance #輸入其密碼
openstack role add --project service --user glance admin
openstack user list #可查看創建的用戶
創建glance服務
openstack service create --name glance --description "OpenStack Image" image
openstack endpoint create --region RegionOne image public http://quan:9292
openstack endpoint create --region RegionOne image internal http://quan:9292
openstack endpoint create --region RegionOne image admin http://quan:9292
安裝相關包並配置
yum -y install openstack-glance
vi /etc/glance/glance-api.conf
[database]
connection = mysql+pymysql://glance:openstack@quan/glance
[keystone_authtoken]
auth_uri=http://quan:5000
auth-url=http://quan:35357
memcached_servers=quan:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username = glance
password = openstack
[paste_deploy]
flavor = keystone
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
vi /etc/glance/glance-registry.conf
[database]
connection = mysql+pymysql://glance:openstack@quan/glance
[keystone_authtoken]
auth_uri=http://quan:5000
auth-url=http://quan:35357
memcached_servers=quan:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username = glance
password = openstack
[paste_deploy]
flavor = keystone
初始化數據庫
su -s /bin/sh -c "glance-manage db_sync" glance
服務啟動,並設置開機啟動
systemctl enable openstack-glance-api.service openstack-glance-registry.service && systemctl start openstack-glance-api.service openstack-glance-registry.service
驗證
source admin-openrc
下載實驗鏡像
wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
創建鏡像:
openstack image create "cirros" --file cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --public
查看已存在的鏡像
openstack image list
查看鏡像的詳細信息
openstack image show (#鏡像id)
Nova組件
Nova:openstack中最核心的組件。openstack的其它組件歸根結底是為Nova組件服務的,基於用戶需求為VM提供計算資源管理
Nova架構圖:
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/bKTJmZis5k..ds6fjUYXv8KDu9EzeaB4WYyV883uAq8!/b/dL8AAAAAAAAA&bo=*QE1AQAAAAADB.o!&rf=viewer_4
目前的Nova主要由API、Compute、Conductor、Scheduler四個核心服務組成,它們之間通過AMQP通信,API是進入Nova的HTTP接口。Compute是VMM(虛擬機管理器)交互來運行虛擬機並管理虛擬機的生命周期(通常一個主機一個Compute服務)。Scheduler從可用池中選擇最合適的節點來創建虛擬機實例。Conductor主要用於和數據庫進行交互。
Nova邏輯模塊
Nova API:HTTP服務,用於接收和處理客戶端發送的HTTP請求
Nova Cell:Nova Cell子服務的目的是為了便於實現橫向擴展和大規模的部署,同時不增加數據庫和RPC消息中間件的復雜度。在Nova Scheduler服務的主機調度基礎上實現了區域調度
Nova Cert:用於管理證書,為了兼容AWS,AWS提供了一整套的基礎設施和應用程序服務,使得幾乎所有的應用程序在雲上運行。
Nova Comput:Nova組件中最核心的服務,實現虛擬機管理的功能。實現了在計算節點上創建、啟動、暫停、關閉和刪除虛擬機、虛擬機在不同的計算節點間遷移、虛擬機安全控制、管理虛擬機磁盤鏡像以及快照等功能。
Nova Conductor:RPC服務,主要提供數據庫查詢功能,以前的openstack版本中,Nova Compute子服務中定義了許多的數據庫查詢方法。但是,由於Nova Compute子服務需要在每個計算節點上啟動,一旦某個計算節點被攻擊,就將完全獲得數據庫的訪問權限。有了Nova Compute子服務之后,便可在其中實現數據庫訪問權限的控制
Nova Scheduler:Nova調度子服務。當客戶端向Nova服務器發起創建虛擬機的請求時,決定將虛擬機創建在哪個節點上。
Nova Console、Nova Consoleauth、Nova VNCProxy,Nova控制台子服務。功能是實現客戶端通過代理服務器遠程訪問虛擬機實例的控制界面。
nova啟動虛擬機的過程圖:
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/iy2efxOLLowl3RvoIcZ6d7KNZ3jcdOI7zY5XroEBPVM!/b/dDQBAAAAAAAA&bo=xQJnAgAAAAADJ6A!&rf=viewer_4
Nova Scheduler Filter的類型
選擇一個虛擬機在哪個主機運行的方式有多種,nova支持的方式主要由以下三種:
ChanceScheduler(隨機調度器):從所有nova-compute服務正常運行的節點中隨機選擇
FilterScheduler(過濾調度器):根據指定的過濾條件以及權重挑選最佳節點
CachingScheduler:FilterScheduler的一種,在FilterScheduler的基礎上,將主機資源的信息存到本地的內存中,然后通過后台的定時任務從數據庫中獲取最新的主機資源信息。
Nova Scheduler的工作流程圖:
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/LpB5fYBuLUgMASXWrH*Emw5qwkWHKM7slpof.lF21DY!/b/dEYBAAAAAAAA&bo=OQODAQAAAAADB5o!&rf=viewer_4
FilterScheduler首先使用指定的Filters(過濾器)得到符合條件的主機,比如內存小於50%,然后對得到的主機重新計算權重並且排列,獲取最佳的一個。具體的Filter有以下幾種:
1)RetryFilter:重試過濾,假設Host1、Host2、Host3過濾篩選出來了,Host1權重最高,被選中,由於某些原因VM在Host1上落地失敗,nova-scheduler會重新篩選新的host,Host1因為失敗不會入選。可通過scheduler_max_attempts=3設置重試的次數
2)AvalilabilityZoneFilter可選域過濾,可以提供容災行和隔離服務,計算節點可以納入一個創建好的AZ中,創建VM的時候可以指定AZ,這樣虛擬機會落到指定的host中
3)RamFilter:內存過濾,創建VM時會選擇flavor,不滿足flavor中內存要求的host會過濾掉。超量使用的設置:ram_allocation_ratio=3(如果計算節點有16G內存,那么openstack會認為有48G內存)
4)CoreFilter:CPU core過濾,創建VM時會選擇flavor,不滿足flavor中core要求的host會過濾掉。CPU的超量設置:cpu_allocation_ratio=16.0(若計算節點為24core,那么openstack會認為348core)
5)DiskFilter:磁盤容量過濾,創建VM時會選擇flavor,不滿足flavor中磁盤要求的host會過濾掉。Disk超量設置:disk_allocation_ratio=1.0(硬盤容量不建議調大)
6)ComputeFilter:nova-compute服務過濾,創建VM時,若host的nova-compute服務不正常,就會被篩選掉
7)ComputeCababilitiesFilter:根據計算節點的特性來篩選,例如x86_64
8)ImagePropertiesFilter:根據所選的image的屬性來匹配計算節點,例如希望某個image只能運行在KVM的hypervisor上,可以通過"Hypervisor Type"屬性來指定。
9)ServerGroupAntiAffinityFilter:盡量將Instance部署到不同的節點上。例如vm1,vm2,vm3,計算節點有Host1,Host2,Host3
創建一個anti-affinity策略server group “group-1”
nova server-group-create-policy anti-affinity group-1
nova boot-image IMAGE_ID -flavor 1 -hint group-group1 vm1
nova boot-image IMAGE_ID -flavor 1 -hint group-group1 vm2
nova boot-image IMAGE_ID -flavor 1 -hint group-group1 vm3
10)ServerGroupAffinityFilter:盡量將Instance部署到同一節點上。例如vm1,vm2,vm3,計算節點有Host1,Host2,Host3
創建一個group-affinity策略server group “group-2”
nova server-group-create-policy anti-affinity group-2
nova boot-image IMAGE_ID -flavor 1 -hint group-group2 vm1
nova boot-image IMAGE_ID -flavor 1 -hint group-group2 vm2
nova boot-image IMAGE_ID -flavor 1 -hint group-group2 vm3
搭建nova組件
搭建nova控制節點
數據庫相關操作
mysql -uroot -popenstack
create database nova_api;
create database nova;
create database nova_cell0;
grant all privileges on nova_api.* to 'nova'@'localhost' identified by 'openstack';
grant all privileges on nova_api.* to 'nova'@'%' identified by 'openstack';
grant all privileges on nova.* to 'nova'@'localhost' identified by 'openstack';
grant all privileges on nova.* to 'nova'@'%' identified by 'openstack';
grant all privileges on nova_cell0.* to 'nova'@'localhost' identified by 'openstack';
grant all privileges on nova_cell0.* to 'nova'@'%' identified by 'openstack';
創建nova用戶,並在service項目中添加管理員角色
source admin-openrc
openstack user create --domain default --password-prompt nova #創建nova用戶
openstack role --project service --user nova admin #將nova用戶加入到service項目管理員角色
創建nova服務及端口
openstack service create --name nova --description "OpenStack Compute" conpute
openstack endpoint create --region RegionOne compute public http://quan:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://quan:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://quan:8774/v2.1
創建placement用戶,並在service項目中添加管理員角色
source admin-openrc
openstack user create --domain default --password-prompt placement #創建placement用戶
openstack role --project service --user placement admin #將placement用戶加入到service項目管理員角色
創建placement服務及端口
openstack service create --name placement --description "Placement API" placement
openstack endpoint create --region RegionOne placement public http://quan:8778
openstack endpoint create --region RegionOne placement internal http://quan:8778
openstack endpoint create --region RegionOne placement admin http://quan:8778
刪除端口的方法:
查看端口:
openstack endpoint list | grep placement
根據id刪除端口
openstack endpoint delete 端口id
安裝相關包,並配置
yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api
vi /etc/nova/nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:openstack@quan
my_ip = 172.16.1.221
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api_database]
connection = mysql+pymysql://nova:openstack@quan/nova_api
[database]
connection = mysql+pymysql://nova:openstack@quan/nova
[api]
auth_strategy = keystone
[keystone_authtoken]
auth_uri = http://quan:5000
auth_url = http://quan:35357
memcached_servers = quan:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = openstack
[vnc]
enabled = true
vncserver_listen = 172.16.1.221
vncserver_proxyclient_address = 172.16.1.221
[glance]
api_servers = http://quan:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement]
os_region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://quan:35357/v3
username = placement
password = openstack
vim /etc/httpd/conf.d/00-nova-placement-api.conf #添加至末尾
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
重啟httpd服務
systemctl restart httpd
修改配置文件(解決初始化nova_api數據庫表結構的bug)
vi /usr/lib/python2.7/site-packages/oslo_db/sqlalchemy/enginefacade.py
在175行中加入"use_tpool"
初始化nova_api數據庫表結構
su -s /bin/sh -c "nova-manage api_db sync" nova
注冊cell0數據庫
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
創建cell1
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell --verbose" nova
初始化nova數據庫
su -s /bin/sh -c "nova-manage db sync" nova
驗證cell0和cell1是否注冊
nova-manage cell_v2 list_cells
服務啟動,並設置開機啟動
systemctl enable openstack-nova-api openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
systemctl start openstack-nova-api openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
驗證
openstack compute service list
搭建nova計算節點
安裝相關包並配置
yum -y install openstack-nova-compute
vim /etc/nova/nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:openstack@quan
my_ip = 172.16.1.222
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api]
auth_strategy = keystone
[keystone_authtoken]
auth_uri = http://quan:5000
auth_url = http://quan:35357
memcached_servers = quan:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = openstack
[vnc]
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = 172.16.1.222
novncproxy_base_url = http://172.16.1.221:6080/vnc_auto.html
[glance]
api_servers = http://quan:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement]
os_region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://quan:35357/v3
username = placement
password = openstack
查看機器是否支持虛擬化
egrep -c '(vmx|svm)' /proc/cpuinfo
若返回0,修改/etc/nova/nova.conf
vi /etc/nova/nova.conf
[libvirt]
virt_type = qemu
服務啟動,並設置開機啟動
systemctl enable libvirt openstack-nova-compute && systemctl start libvirt openstack-nova-compute
將compute節點添加到cell數據庫(控制節點操作)
source admin-openrc
openstack compute service list --service nova-compute
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
vi /etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300
驗證
source admin-openrc
openstack compute service list
openstack catalog list
openstack image list
nova-status upgrade check
neutron組件
Neutron是Openstack中的一個項目,在各接口設備之間提供網絡服務,而且受其它openstack服務管理,如Nova。Neutron為openstack雲提供了更靈活的划分物理網絡,在多租戶的環境下提供給每個租戶獨立的網絡環境。另外,Neutron提供API來實現這種目標。Neutron中的“網絡”是一個可以被用戶創建的對象,如果要和物理環境下的概念映射的話,這個對象相當於一個巨大的交換機,可以擁有無限多個動態可創建和銷毀的虛擬端口。
Neutron提供的網絡虛擬化能力有:
(1)二層到七層網絡的虛擬化:L2(virtual switch)、L3(virtual Router和LB)、L4-L7(virtual Firewall)等
(2)網絡連通性:二層網絡和三層網絡
(3)租戶隔離性
(4)網絡安全性
(5)網絡擴展性
(6)REST API
(7)跟高級的服務:如LBaas
Neutron的架構圖:
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/Ei6CaKeBs.55JXz9GIW8xuGBeMGe*rVaB*3D3cGQDsY!/b/dFIBAAAAAAAA&bo=vQLoAQAAAAADB3Q!&rf=viewer_4
總的來說,創建一個Neutron網絡的過程如下:
1、管理員拿到一組可在互聯網上尋址的IP地址,並且創建一個外部網絡和子網
2、租戶創建一個網絡和子網
3、租戶創建一個路由器並且連接租戶子網和外部網絡
4、租戶創建虛擬機
Neutron中的各種概念
network:network是一個隔離的二層廣播域。Neutron支持多種類型的network,包括local,flat,VLAN,VxLAN和GRE
local:local網絡與其它網絡和節點隔離。local網絡中的instance只能與同一節點上同一網絡的instance通信,local網絡主要用於單機測試
flat:flat網絡是無vlan tagging的網絡。flat網絡中的instance能與位於同一網絡的instance通信,並且可以跨多個節點。
vlan:vlan網絡是具有802.1q tagging的網絡。vlan是一個二層的廣播域,同一vlan中的instance可以通信,不同vlan只能通過router通信。vlan網絡可以跨節點,是應用最廣泛的網絡類型
vxlan:vxlan是基於隧道技術的overlay網絡。vxlan網絡通過唯一的segmentation ID(也叫VNI)與其它vxlan網絡區分。vxlan中數據包會通過VNI封裝成UDP包進行傳輸。因為二層的包通過封裝在三層傳輸,能夠克服vlan和物理網絡基礎設施的限制。
gre:gre是vxlan類似的一種overlay網絡。主要區別在於使用IP包而非UDP進行封裝。不同network之間在二層上是隔離的。
network必須屬於某個Project(Tenant租戶),Project中可以創建多個network。network與Project之間是1對多的關系
subnet:subject是一個IPv4或者IPv6地址段。instance的IP從subnet中分配。每個subnet需要定義IP地址的范圍和掩碼。
subnet與network是1對多的關系。一個subnet只能屬於某個network;一個network可以有多個subnet,這些subnet可以是不同的IP段,但不能重疊。
例:有效的配置
network A
subnet A-a:10.10.1.0/24 {"start":"10.10.1.1","end":"10.10.1.50"}
subnet A-b:10.10.2.0/24 {"start":"10.10.2.1","end":"10.10.2.50"}
無效的配置(因為subnet有重疊)
network A
subnet A-a:10.10.1.0/24 {"start":"10.10.1.1","end":"10.10.1.50"}
subnet A-b:10.10.1.0/24 {"start":"10.10.1.51","end":"10.10.1.100"}
注:這里判斷的不是IP地址是否重疊,而是子網是否重疊(10.10.1.0/24)
port:port可以看做是虛擬交換機上的一個端口,port上定義了MAC地址和IP地址,當instance的虛擬網卡VIF(Virtual Interface)綁定到port時,port會將MAC和IP分配給VIF。port與subnet是1對多的關系。一個port必須屬於某個subnet,一個subnet可以有多個port。
Neutron中的Plugin和agent
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/Gm3J*.Vh27nLny6oXfuZlh.yXNYx.YE3I*Mwoea.MH4!/b/dL4AAAAAAAAA&bo=pAKJAQAAAAADBww!&rf=viewer_4
搭建neutron
linuxbridge+vxlan模式
控制節點:
數據庫相關操作
mysql -uroot -popenstack
create database neutron;
grant all privileges on neutron.* to 'neutron'@'localhost' identified by 'openstack';
grant all privileges on neutron.* to 'neutron'@'%' identified by 'openstack';
創建neutron用戶,並在service項目中添加管理員角色
source admin_openrc
openstack user create --domain default --password-prompt neutron
openstack role add --project service --user neutron admin
創建網絡服務及端口
openstack service create --name neutron --description "Openstack Networking" network
openstack endpoint create --region RegionOne network public http://quan:9696
openstack endpoint create --region RegionOne network internal http://quan:9696
openstack endpoint create --region RegionOne network admin http://quan:9696
安裝相關包並配置
yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
vi /etc/neutron/neutron.conf
[database]
connection = mysql+pymysql://neutron:openstack@quan/neutron
[DEFAULT]
core_plugin=ml2
service_plugins = router
allow_overlapping_ips = true
transport_url = rabbit://openstack:openstack@quan
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[keystone_authtoken]
auth_uri = http://quan:5000
auth_url = http://quan:35357
memcached_servers = quan:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = openstack
[nova]
auth_url = http://quan:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = openstack
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
vi /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider
[ml2_type_vxlan]
vni_ranges = 1:1000
[securitygroup]
enable_ipset = true
vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:ens34 #外部網卡設備
[vxlan]
enable_vxlan = true
local_ip = 172.16.1.221
l2_population = true
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
確認操作系統內核支持橋接
echo "net.bridge.vridge-nf-call-iptables = 1" >> /etc/sysctl.conf
echo "net.bridge.vridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
sysctl -p #若出現“No such file or directory”錯誤,執行下面的操作
modinfo by_netfilter #查看內核模塊信息
modprobe by_netfilter #加載內核模塊
再次執行sysctl -p
vi /etc/neutron/l3_agent.ini
[DEFAULT]
interface_driver = linuxbridge
vi /etc/neutron/dhcp.agent.ini
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
vi /etc/neutron/metadata_agent.ini
[DEFAULT]
nova_metadata_host = 172.16.1.221
metadata_proxy_shared_secret = openstack
vi /etc/nova/nova.conf
[neutron]
url = http://quan:9696
auth_url = http://quan:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = openstack
service_metadata_proxy = true
metadata_proxy_shared_secret = openstack
#ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
初始化neutron數據庫
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin/ml2/ml2_conf.ini upgrade head" neutron
重啟nova服務
systemctl restart openstack-nova-api
服務啟動,並設置開機啟動
systemctl enable neutron-server neutron-linuxbridge neutron-dhcp-agent neutron-metadata-agent
systemctl start neutron-server neutron-linuxbridge neutron-dhcp-agent neutron-metadata-agent
systemctl enable neutron-l3-agent && systemctl start neutron-l3-agent
計算節點:
安裝相關包並配置
yum -y install openstack-neutron-linuxbridge ebtables ipset
vi /etc/neutron/neutron.conf
[DEFAULT]
transport_url = rabbit://openstack:openstack@quan
auth_strategy = keystone
[keystone_authtoken]
auth_uri = http://quan:5000
auth_url = http://quan:35357
memcached_servers = quan:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = openstack
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
vi /etc/neutron/plugin/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:ens34
[vxlan]
enable_vxlan = true
local_ip = 172.16.1.222
l2_population = true
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
vi /etc/nova/nova.conf
[neutron]
url = http://quan:9696
auth_url = http://quan:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = openstack
重啟nova-compute服務
systemctl restart openstack-nova-compute
服務啟動,並設置開機啟動
systemctl enable neutron-linuxbridge-agent && systemctl strat neutron-linuxbridge-agent
驗證(控制節點)
source admin-openrc
openstack extension list --network
openstack network agent list
horizon組件
horizon:UI界面 (Dashboard)。OpenStack中各種服務的Web管理門戶,用於簡化用戶對服務的操作
搭建horizon
安裝相關包並配置
yum -y install openstack-dashboard
vim /etc/openstack-dashboard/local_settings
OPENSTACK_HOST = "quan"
ALLOWED_HOSTS = ['*']
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'default':{
'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION':'quan:11211',
}
}
#注釋掉其它的cache
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" %OPENSTACK_HOST
OPENSTACK_kEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_API_VERSIONS = {
"identity":3,
"image":2,
"volume":2,
}
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
OPENSTACK_KEYSTONE_DEFAULT_ROLE= 'user'
OPENSTACK_NEUTRON_NETWORK = {
...
'enable_quotas':True,
'enable_distributed_router':True,
'enable_ha_router':True,
'enable_lb':True,
'enable_firewall':True,
'enable_vpn':Flase,
'enable_fip_topology_check':True,
}
TIME_ZONE = "Asia/Chongqing"
vi /etc/httpd/conf.d/openstack-dashboard.conf
WSGIApplicationGroup %{GLOBAL}
重啟相關服務
systemctl restart httpd.service memcached.service
訪問地址:http://172.16.1.221/dashboard/
關閉domain驗證
vi /etc/openstack-dashboard/local_settings
#OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True #注釋此行
重啟相關服務
systemctl restart httpd.service memcached.service
用戶名:admin 密碼:openstack
通過命令行創建一個虛擬機的實例
創建provider網絡(外部網絡)
source admin-openrc
openstack network create --share --external \
--provider-physical-network provider \
--provider-network-type flat provider
openstack network create --network provider \ #創建外部子網(和物理網絡位於同一網絡)
--allocation-pool start 172.16.1.231,end 172.16.1.240 \
--dns-nameserver 8.8.4.4 --gateway 172.16.1.1 \
--subnet-range 172.16.1.1/24 provider
創建私有網絡self-services
source demo-openrc
openstack network create selfservice #創建私有網絡
openstack subnet create --network selfservice \ #創建私有網絡子網
--dns-nameserver 8.8.4.4 --gateway 192.168.0.1 \
--subnet-range 192.168.0.0/24 selfservice
openstack router create router #創建虛擬路由
openstack router add subnet selfservice #為路由添加子網
openstack router set router --extemal-gateway provider #設置路由的外部網關
驗證
source admin-openrc
ip netns
openstack port list --router router
ping -c 網關ip
創建flavor(啟動虛擬機的模板,cpu是幾個,內存是多少)
openstack flavor --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
查看創建的flavor
source demo-openrc
openstack flavor list
生成秘鑰對
source demo-openrc
ssh-keygen -q -N ""
openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
openstack keypair list
添加安全組規則
openstack security group rule create --proto icmp default #允許ping通
openstack security group rule create --proto tcp --dst-port 22 default #允許連接tcp22號端口
查看驗證
source demo-openrc
openstack flavor list
openstack image list
openstack network list
openstack security group list
openstack security group rule list
啟動一個實例
創建一個虛擬機
openstack server create --flavor m1.nano --image cirros(可以是id也可以是名稱) \
--nic net-id SELFSERVICE_NET_ID --security-group default \
--key-name mykey selfservice-instance(虛擬機名稱)
查看虛擬機
openstack server list #查看擁有的虛擬機
openstack server show (虛擬機id) #查看虛擬機詳細信息
通過界面綁定ip
查看虛擬機控制台信息
openstack console log show (虛擬機id)
cinder組件
cinder:提供REST_API使用戶能夠查詢和管理volume、volume snapshot以及volume type,
提供scheduler調度volume創建請求,合理優化存儲資源的分配
通過driver架構支持多種back-end(后端)存儲方式,包括LVM,NFS,Ceph和其它諸如EMC、IBM等商業存儲產品方案
cinder的架構圖:
http://m.qpic.cn/psb?/V12uCjhD3ATBKt/FpuhoZP0gP2rwhfFn*1Q1BXUZlHCtEvh7xmNRgJYqiw!/b/dL8AAAAAAAAA&bo=CQIYAQAAAAARByI!&rf=viewer_4
cinder包含的組件:
cinder-api:接收API請求,調用cinder-volume執行操作
cinder-volume:管理volume的服務,與volume provider協調工作,管理volume的生命周期。運行cinder-volume服務的節點被稱作為存儲節點
cinder-scheduler:scheduler通過調度算法選擇最合適的存儲節點創建volume
volume provider:數據的存儲設備,為volume提供物理存儲空間。cinder-volume支持多種volume provider,每種volume provider通過自己的driver與cinder-volume協調工作
Message Queue:cinder各個子服務通過消息隊列實現進程間通信和相互協作。因為有了消息隊列,子服務之間實現了解耦,這種松散的結構也是分布式系統的重要特征
Database cinder:有一些數據需要存放到數據庫中,一般使用MySQL。數據庫是安裝在控制節點上的。
搭建cinder組件
控制節點
數據庫相關操作
mysql -uroot -popenstack
create database cinder;
grant all privileges on cinder.* to 'cinder'@'localhost' identified by 'openstack';
grant all privileges on cinder.* to 'cinder'@'%' identified by 'openstack';
創建cinder用戶,並在service項目中添加管理員角色
source admin_openrc
openstack user create --domain default --password-prompt cinder
openstack role add --project service --user cinder admin
創建cinder服務及端口
openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
openstack endpoint create --region RegionOne volumev2 public http://quan:8776/v2/%\{project_id\}s
openstack endpoint create --region RegionOne volumev2 internal http://quan:8776/v2/%\{project_id\}s
openstack endpoint create --region RegionOne volumev2 admin http://quan:8776/v2/%\{project_id\}s
openstack endpoint create --region RegionOne volumev3 public http://quan:8776/v3/%\{project_id\}s
openstack endpoint create --region RegionOne volumev3 internal http://quan:8776/v3/%\{project_id\}s
openstack endpoint create --region RegionOne volumev3 admin http://quan:8776/v3/%\{project_id\}s
安裝相關包並配置
yum -y install openstack-cinder
vim /etc/cinder/cinder.conf
[database]
connection = mysql+pymysql://cinder:openstack@quan/cinder
[DEFAULT]
transport_url = rabbit://openstack:openstack@quan
auth_strategy = keystone
my_ip = 172.16.1.221
[keystone_authtoken]
auth_uri = http://quan:5000
auth_url = http://quan:35357
memcached_servers = quan:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = openstack
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
初始化數據庫
su -s /bin/sh -c "cinder-manage db sync" cinder
配置計算服務使用cinder
vi /etc/nova/nova.conf
[cinder]
os_region_name = RegionOne
計算服務重啟
systemctl restart openstack-nova-api
服務啟動,並設置開機啟動
systemctl enable openstack-cinder-api openstack-cinder-scheduler && systemctl start openstack-cinder-api openstack-cinder-scheduler
驗證
openstack volume service list #state狀態為up即為啟動成功
存儲節點(除系統盤外要有磁盤)
安裝相關包並配置
yum -y install lvm2 device-mapper-persistent-data
systemctl enable lvm2-lvmetad && systemctl start lvm2-lvmetad
pvcreate /dev/sdb #創建pv
vgcreate cinder-volume /dev/sdb #創建vg
vi /etc/lvm/lvm.conf
devices{"a/dev/sda/","a/dev/sdb/","r/.*/"}
#a表示接收,r表示拒絕
可通過命令lsblk查看系統安裝是否使用lvm,若sda磁盤沒有使用lvm可不添加"a/dev/sda/"
yum -y install openstack-cinder targetcli python-keystone
vi /etc/cinder/cinder.conf
[database]
connection = mysql+pymysql://cinder:openstack@quan/cinder
[DEFAULT]
transport_url = rabbit://openstack:openstack@quan
auth_strategy = keystone
my_ip = 172.16.1.223
enabled_backends = lvm
glance_api_servers = http://quan:9292
[keystone_authtoken]
auth_uri = http://quan:5000
auth_url = http://quan:35357
memcached_servers = quan:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = openstack
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes #vg的名稱
iscsi_protocol = iscsi
iscsi_helper = lioadm
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
服務啟動,並設置開機啟動
system enable openstack-cinder-volume target && system start openstack-cinder-volume target
驗證
source admin-openrc
openstack volume service list
為虛擬機分配虛擬磁盤
命令:
source demo-openrc
openstack volume create --size 2 volume2 #--size指定虛擬機磁盤大小2G
openstack volume list #狀態為available可用的
openstack server add volume selfservice-instance volume2 #為虛擬機掛載磁盤
openstack volume list #狀態為in-use
可登錄虛擬機通過fdisk -l 查看掛載磁盤
Swift組件
swift:被稱為對象存儲,提供了強大的擴展性、冗余和持久性。對象存儲,用於永久類型的靜態數據的長期存儲
搭建swift組件
控制節點
創建swift用戶,並在service項目中添加管理員角色
source admin-openrc
openstack user create --domain default --password-prompt swift
openstack role add --project service --user swift admin
創建swift服務及端口
openstack service create --name swift --description "OpenStack Object Stroage" object-store
openstack endpoint create --region RegionOne object-store public http://quan:8080/v1/AUTH_%\{project_id\}s
openstack endpoint create --region RegionOne object-store internal http://quan:8080/v1/AUTH_%\{project_id\}s
openstack endpoint create --region RegionOne object-store admin http://quan:8080/v1
安裝相關包
yum -y install openstack-swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached
下載swift-proxy.conf的配置文件,並配置
curl -o /etc/swift/proxy-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample?h=stable/queens
vi /etc/swift/proxy-server.conf
[DEFAULT]
bind_port = 8080
swift_dir = /etc/swift
user = swift
[pipeline:main]
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
[app:proxy-server]
use = egg:swift#proxy
account_autocreate = True
[filter:keystoneauth]
use = egg:swift#keystoneauth
operator_roles = admin,user
[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
www_authenticate_uri = http://quan:5000
auth_url = http://quan:35357
memcached_servers = quan:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = swift
password = openstack
delay_auth_decision = True
[filter:cache]
memcache_servers = quan:11211
存儲節點(所有的)
安裝相關包
yum install xfsprogs rsync
格式化磁盤
mkfs.xfs /dev/sdb
mkfs.xfs /dev/sdc
mkdir -p /srv/node/sdb
mkdir -p /src/node/sdc
配置自動掛載
vi /etc/fstab
/dev/sdb /srv/node/sdb xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
/dev/sdc /srv/node/sdc xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
mount /srv/node/sdb
mount /srv/node/sdc
或者
mount -a
vi /etc/rsyncd.conf
uid = swift
gid = swift
log_file = /var/log/rsyncd.log
pid_file = /var/run/rsyncd.pid
address = 172.16.1.224 #多個節點請自行調整
[account]
max_connections = 2
path = /srv/node/
read only = False
locak file = /var/lock/account.lock
[container]
max_connections = 2
path = /srv/node/
read only = False
locak file = /var/lock/container.lock
[object]
max_connections = 2
path = /srv/node/
read only = False
locak file = /var/lock/object.lock
服務啟動,並設置開機啟動
systemctl enable rsyncd && systemctl start rsyncd
安裝相關包
yum -y install openstack-swift-account openstack-swift-container openstack-swift-object
下載相關配置文件,並配置
curl -o /etc/swift/account-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/account-server.conf-sample?h=stable/queens
curl -o /etc/swift/container-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/container-server.conf-sample?h=stable/queens
curl -o /etc/swift/object-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/object-server.conf-sample?h=stable/queens
vi /etc/swift/account-server.conf
[DEFAULT]
bind_ip = 172.16.1.224
bind_prot = 6202
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = True
[pipeline:main]
pipeline = healthcheck recon account-server
[filter:recon]
recon_cache_path = /var/cache/swift
vi /etc/swift/container-server.conf
[DEFAULT]
bind_ip = 172.16.1.224
bind_prot = 6201
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = True
[filter:recon]
recon_cache_path = /var/cache/swift
vi /etc/swift/object-server.conf
[DEFAULT]
bind_ip = 172.16.1.224
bind_prot = 6200
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = True
[pipeline:main]
pipeline = healthcheck recon object-server
[filter:recon]
recon_cache_path = /var/cache/swift
recon_lock_path = /var/lock
修改文件權限
chown -R swfit:swift /srv/node
mkdir -p /var/cache/swift
chown -R root:swift /var/cache/swift
chmod -R 755 /var/cache/swift
終止存儲節點操作,上述操作全部在所有存儲節點中操作
控制節點操作
cd /etc/swift
swift-ring-builder account.builder create 10 3 1
創建第一存儲節點
swift-ring-builder account.builder add \
--region 1 --zone 1 --ip 172.16.1.224 --port 6202 --device sdb --weight 100
swift-ring-builder account.builder add \
--region 1 --zone 1 --ip 172.16.1.224 --port 6202 --device sdc --weight 100
創建第二存儲節點
swift-ring-builder account.builder add \
--region 1 --zone 2 --ip 172.16.1.225 --port 6202 --device sdb --weight 100
swift-ring-builder account.builder add \
--region 1 --zone 2 --ip 172.16.1.225 --port 6202 --device sdc --weight 100
swift-ring-builder account.builder
swift-ring-builder account.builder rebalance
swift-ring-builder container.builder create 10 3 1
創建第一存儲節點
swift-ring-builder container.builder add \
--region 1 --zone 1 --ip 172.16.1.224 --port 6202 --device sdb --weight 100
swift-ring-builder container.builder add \
--region 1 --zone 1 --ip 172.16.1.224 --port 6202 --device sdc --weight 100
創建第二存儲節點
swift-ring-builder container.builder add \
--region 1 --zone 2 --ip 172.16.1.225 --port 6202 --device sdb --weight 100
swift-ring-builder container.builder add \
--region 1 --zone 2 --ip 172.16.1.225 --port 6202 --device sdc --weight 100
swift-ring-builder container.builder
swift-ring-builder container.builder rebalance
swift-ring-builder object.builder create 10 3 1
創建第一存儲節點
swift-ring-builder object.builder add \
--region 1 --zone 1 --ip 172.16.1.224 --port 6202 --device sdb --weight 100
swift-ring-builder object.builder add \
--region 1 --zone 1 --ip 172.16.1.224 --port 6202 --device sdc --weight 100
創建第二存儲節點
swift-ring-builder object.builder add \
--region 1 --zone 2 --ip 172.16.1.225 --port 6202 --device sdb --weight 100
swift-ring-builder object.builder add \
--region 1 --zone 2 --ip 172.16.1.225 --port 6202 --device sdc --weight 100
swift-ring-builder object.builder
swift-ring-builder object.builder rebalance
將生成文件放到對象存儲節點中
scp account.ring.gz container.ring.gz object.ring.gz object01:/etc/swift/
scp account.ring.gz container.ring.gz object.ring.gz object02:/etc/swift/
獲取swift.conf配置文件
curl -o /etc/swift/swift.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/swift.conf-sample?h=stable/queens
vi /etc/swift/swift.conf
[swift-hash]
swift_hash_path_suffix = HASH_PATH_SUFFIX
swift_hash_path_prefix = HASH_PATH_PREFIX
[storage-policy:0]
name = Policy-0
default = yes
將swift.conf配置文件分發到對象存儲節點
scp /etc/swift/swift.conf object01:/etc/swift/
scp /etc/swift/swift.conf object02:/etc/swift/
控制節點和所有對象存儲節點執行
chown -R root:swift /etc/swift
控制節點
systemctl enable openstack-swift-proxy memcached && systemctl start openstack-swift-proxy memcached
對象存儲節點(所有)
systemctl enable openstack-swift-account openstack-swift-account-auditor openstack-swift-account-reaper openstack-swift-account-replicator
systemctl start openstack-swift-account openstack-swift-account-auditor openstack-swift-account-reaper openstack-swift-account-replicator
systemctl enable openstack-swift-container openstack-swift-container-auditor openstack-swift-container-replicator openstack-swift-container-updater
systemctl start openstack-swift-container openstack-swift-container-auditor openstack-swift-container-replicator openstack-swift-container-updater
systemctl enable openstack-swift-object openstack-swift-object-auditor openstack-swift-object-replicator openstack-swift-object-updater
systemctl start openstack-swift-object openstack-swift-object-auditor openstack-swift-object-replicator openstack-swift-object-updater
驗證(控制節點)
備注:首先檢查/var/log/audit/audit.log,若存在selinux的信息,使得swift進程無法訪問,做如下修改:
chcon -R system_u:object_r:swift_data_t:s0 /srv/node
source demo-openrc
swift stat #查看swift狀態
openstack container create container1
openstack object create container1 FILE #上傳文件到容器中
openstack container list #查看所有的container(容器)
openstack object list container1 #查看container1容器中的文件
openstack object save container1 FILE #從容器中下載文件
