快速入門Openstack,無腦多節點部署Mitaka(5)--Nova部署
什麼是Nova?
簡介
Nova是openstack中用來提供高可擴充套件、按需、自服務的計算資源服務的一個專案。Nova是openstack最老牌的專案,最初剛釋出的時候集成了很多的功能,既包括計算,也包括網路和儲存。後來隨著openstack的發展壯大,相應的功能被拆分成單獨的專案,使得相應功能及開發可以更加細緻和深入。最初的nova-network現在被neutron專案取代,最初的nova-volume從nova中分離出來,變成了cinder專案。分離之後,Nova的功能相對單一,結構也更加清楚,更容易理解。
Nova是一個虛擬機器的管理程式,為虛擬機器的管理和維護提供了一套高度抽象的API,允許使用者通過API來管理自己的虛擬機器。Nova與系統虛擬化關係不大,Nova是通過呼叫各種虛擬化方案提供的介面來管理虛擬機器的,因此,Nova能夠支援多種不同的虛擬化方案。目前,Nova支援的虛擬化方案包括:
Libvirt + KVM/Qemu;
Libvirt + LXC;
Libvirt + Xen;
Windows Hyper-V;
VMware;
最近openstack社群正在積極的拓展Nova的功能,Nova不僅可以用來管理虛擬機器,也可以用來管理物理伺服器(Ironic)及用來管理容器(Magnum)。
架構
簡版:
nova services 簡介
nova-api
nova-api是整個nova各項服務的對外介面,通過HTTP協議對外提供服務,openstack中的其他專案也是通過nova-api提供的介面與其進行互動的。nova-api有三套介面,其中一套是相容AWS EC2的介面,另一套是openstack自己開發的介面,最後一套則是給虛擬機器提供metadata服務,不直接對外服務。nova-api主要的任務就是接收使用者通過HTTP協議傳送過來的請求,對請求進行驗證並處理使用者的請求,最後將請求的結果傳送給使用者。但是很多時候,nova-api給使用者返回操作結果的時候,使用者的請求可能還沒有全部完成,以建立虛擬機器為例,nova-api收到一個建立一臺虛擬機器的請求後,nova-api首先會對請求進行驗證,檢查請求中的image和flavor是否存在,如果沒有問題,那麼nova-api會在資料庫中記錄虛擬機器的基本資訊,並通過RPC給計算節點發送一個建立虛擬機器的請求,接著,nova-api就會將虛擬機器相關的資訊傳送使用者,請求的響應過程結束。nova-api並不會等到虛擬機器建立完成才返回,而是將虛擬機器建立相關的主要工作交給了nova-compute服務。nova-api在執行的過程中需要連線到資料庫,因為nova-api需要更新虛擬機器的資訊。此外,nova-api還要能夠訪問訊息佇列伺服器,因為nova-api和nova-compute直接是通過RPC進行通訊的。
nova-conductor
conductor服務是在G版進入到nova的,主要的目的是代替nova-compute去訪問資料庫,這樣做主要是基於安全的考慮。在公有云的環境下,nova-compute是部署最為廣泛的一個服務,執行在hypervisor上的惡意虛擬機器可能可以拿到hypervisor的控制權,從而直接對資料中心的資料庫進行修改。為了防止這種情況發生,一種簡單的做法就是讓儘可能少的人有直接操作資料庫的許可權。通過nova-conductor來訪問資料庫,不僅可以提高nova的可擴充套件性,還能提高資料庫訪問的效能。除了代替nova-compute訪問資料庫,nova-conductor還被用來執行一些需要較長時間才能完成的操作,如虛擬機器的遷移。
從結構上來說,nova-conductor非常簡單,就是不斷的從訊息伺服器獲取RPC請求,然後將其轉化為資料庫的操作,獲取到操作結果之後通過訊息伺服器返回資料庫操作的結果。
nova-scheduler
scheduler是nova中的排程服務,決定了如何放置新建立的虛擬機器。與conductor服務類似,從結構上來說,scheduler相對比較簡單,從具體的實現上來說,scheduler是非常複雜的。scheduler的具體實現方法可以請參考[[grizzly-nova-scheduler]],雖然Havana版中scheduler有些變化,但是總體上沒太大的差別。
scheduler為了儘可能好的利用叢集資源,需要跟蹤每個hypervisor的狀態和可用的資源。nova-compute會定期的通過訊息佇列和資料庫更新其自身的狀態和可用資源,scheduler也可以通過RPC獲取hypervisor的狀態和可用資源。因此,scheduler需要直接訪問資料庫和訊息佇列伺服器。
nova-cert
nova-cert是nova提供的一個證書服務,能夠對使用者的公鑰進行簽名,並返回簽名後的x509格式的證書。從實現上來說,cert可能是nova中最簡單的一個服務。主要包括兩部分,一部分是整合在nova-api中的HTTP介面,另一部分就是cert-manager。nova-api收到簽名請求之後,會通過訊息佇列將請求轉發給cert-manager,cert-manager對公鑰進行簽名,並通過訊息佇列返回簽名後的證書。因此,cert服務只需要連線到訊息佇列伺服器即可。
nova-cell
cell服務主要是用來提高openstack叢集的可擴充套件性,cell服務主要負責在不同cell之間的進行資訊的同步和虛擬機器的排程。在啟用了cell的情況下,一個region可以劃分為多個cell,每個cell可以使用不同的資料庫和訊息佇列伺服器。建立虛擬機器時,該請求首先會發送給cell,cell再將該請求轉發給某個cell中的scheduler,scheduler再選擇某臺具體的宿主機,並啟動虛擬機器。cell服務需要訪問資料庫和訊息佇列伺服器。
nova-consoleauth
consoleauth的功能相對比較簡單,是給vnc代理伺服器提供token驗證服務。當用戶在horizon中想通過vnc連線到虛擬機器時,會給vnc代理伺服器傳送一個請求,代理伺服器除了需要通過nova-compute獲取虛擬機器的vnc連線資訊外,還需要通過對url中的token進行驗證。token驗證的任務就需要呼叫consoleauth。consoleauth會記錄url中的token資訊,並返回連線虛擬機器vnc所需要的資訊。為了獲取連線虛擬機器vnc相關的資訊,consoleauth需要通過RPC呼叫nova-compute獲取。因此,consoleauth服務只需要連線到訊息佇列伺服器即可。
nova-objectstore
objectstore是nova提供的一個仿s3的物件儲存介面。不過nova中的實現相對來說非常簡單,只能講上傳的檔案儲存在本地,也不保證上傳檔案的高可用,只是一個簡單的基於HTTP協議的檔案儲存服務,與nova的其他服務都沒有什麼關聯。
nova-novncproxy
novncproxy是nova中實現的一個vnc代理服務,它能在瀏覽器和虛擬機器的vnc server之間建立一條雙向的socket通道,使得使用者可以直接在瀏覽器中通過vnc登陸虛擬機器,對虛擬機器進行管理和操作。novncproxy在執行的過程中需要接收從使用者瀏覽器過來的請求,並通過RPC呼叫consoleauth對token進行驗證。如果驗證可以通過,那麼它會在瀏覽器和虛擬機器vnc之間建立一個雙向的連線。因此,novncproxy在工作的過程中需要能夠訪問訊息佇列伺服器。此外,novncproxy通常使用KVM的虛擬化方案時使用。
nova-spicehtml5proxy
spicehtml5proxy在實現原理和工作流程上與novncproxy是一模一樣,他們的差別只是體現在通訊協議上。一個是使用vnc協議,另外一個則是採用的spice協議。其主要原因是,vnc在虛擬桌面環境中表現的並不是很好,而spice協議則能夠較好的滿足虛擬桌面的需求。
nova-xvpvncproxy
xvpvncproxy在實現原理和工作流程上與novncproxy是一模一樣,它們都是採用vnc協議。不同的是,xvpvncproxy主要用在xen虛擬化平臺中,而novncproxy則主要用在KVM虛擬化平臺。
nova-console
console代理服務與vnc代理服務類似,用來連線到虛擬機器的console介面。目前,只有xen和VMware虛擬化平臺實現了console代理服務。
nova-compute
compute是nova專案中最複雜的任務,和眾多服務都有關聯,需要處理虛擬機器相關的所有操作,包括虛擬機器的建立、刪除、啟動、停止、遷移等。compute內部實現非常複雜,需要對多種虛擬化技術進行封裝,為虛擬機器準備磁碟和網路資源,還有很多週期性的任務需要處理。但是其資料流卻相對簡單,只是不斷的從訊息佇列獲取請求,處理請求,返回響應結果。nova-compute在執行的過程中,需要連線到訊息佇列伺服器和虛擬化服務的管理介面(如:libvirtd)。
nova-network
nova-network是nova中整合的網路管理元件,它能夠將一臺普通的伺服器轉化為虛擬機器的閘道器。nova-network實現的網路模型非常簡單,卻非常實用,尤其是nova-network支援HA模式,它使得每個計算節點都能充當虛擬機器的閘道器。這樣不僅可以解決閘道器高可用的問題,同時也可以提高虛擬機器訪問外部網路的效能,消除了單點故障和效能瓶頸。nova-network的資料流也相對簡單,不斷的處理和響應來自訊息佇列的請求,此外,在處理訊息佇列的請求中,需要將一些網路相關的配置和引數寫入到資料庫中。因此,nova-network也需要能夠直接訪問資料庫。
資料流
結合前面的分析,可以得出nova中各個服務的資料流如下圖所示。
敲黑板,上面這些都是重點。
注意,現在開始都會是多節點安裝!
Nova-controller節點部署
前期準備
在安裝每個服務之前,我們都必須先建立該服務的資料庫、服務證書和API Endpoints。因為資料庫這些都是安裝在controller節點上,所以接下來的操作都是在controller節點上執行。
1.建立兩個資料庫,並給nova使用者設定許可權和密碼。123456是我的密碼
command:
mysql -u root -p123456
CREATE DATABASE nova_api;
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY '123456';
exit
OutPut:
[[email protected] ~]# mysql -u root -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.1.12-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE nova_api;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> CREATE DATABASE nova;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
-> IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
-> IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
-> IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
-> IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
[[email protected] ~]#
2.在openstack中建立nova使用者,並新增為service project的管理員
[[email protected] ~]# source ~/admin-openrc
[[email protected] ~]# openstack user create --domain default \
> --password-prompt nova
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | 098b1a4d36d241ed87e979ec86d32722 |
| enabled | True |
| id | 387f268a791446efb1cd43c28e61b11b |
| name | nova |
+-----------+----------------------------------+
[[email protected] ~]# openstack role add --project service --user nova admin
3.建立nova服務實體
[[email protected] ~]# openstack service create --name nova \
> --description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | 04fdd2d0e3804d0690ca3c22e7f29e0f |
| name | nova |
| type | compute |
+-------------+----------------------------------+
4.建立Compute service的API Endpoints
[[email protected] ~]# openstack endpoint create --region RegionOne \
> compute public http://controller.example.com:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------------------+
| enabled | True |
| id | 8e7a3cd7c9a64d5e95acaa31040169a1 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 04fdd2d0e3804d0690ca3c22e7f29e0f |
| service_name | nova |
| service_type | compute |
| url | http://controller.example.com:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------------------+
[[email protected] ~]# openstack endpoint create --region RegionOne \
> compute internal http://controller.example.com:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------------------+
| enabled | True |
| id | 0ca9476104584562a6448805d32a3e31 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 04fdd2d0e3804d0690ca3c22e7f29e0f |
| service_name | nova |
| service_type | compute |
| url | http://controller.example.com:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------------------+
[[email protected] ~]# openstack endpoint create --region RegionOne \
> compute admin http://controller.example.com:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------------------+
| enabled | True |
| id | 46532b836e6447d6a264445e6d969597 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 04fdd2d0e3804d0690ca3c22e7f29e0f |
| service_name | nova |
| service_type | compute |
| url | http://controller.example.com:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------------------+
[[email protected] ~]#
安裝
1.install the packages
yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler -y
2.編輯/etc/nova/nova.conf
cp -p /etc/nova/nova.conf /etc/nova/nova.conf.bak
vim /etc/nova/nova.conf
[DEFAULT]
...
enabled_apis = osapi_compute,metadata
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.0.17
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api_database]
...
connection = mysql+pymysql://nova:123456@controller.example.com/nova_api
[database]
...
connection = mysql+pymysql://nova:123456@controller.example.com/nova
[oslo_messaging_rabbit]
...
rabbit_host = controller.example.com
rabbit_userid = openstack
rabbit_password = henry
[keystone_authtoken]
...
auth_uri = http://controller.example.com:5000
auth_url = http://controller.example.com:35357
memcached_servers = controller.example.com:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = 123456
[vnc]
...
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
[glance]
...
api_servers = http://controller.example.com:9292
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
3.總覽
[[email protected] ~]# cat /etc/nova/nova.conf | grep -v ^# | grep -v ^$
[DEFAULT]
enabled_apis = osapi_compute,metadata #配置啟用只允許compute和metadataAPIs
rpc_backend = rabbit #啟用RabbitMQ訊息佇列作為rpc連線訪問
auth_strategy = keystone #啟用Identity service認證服務
my_ip = 192.168.0.17 #Controller節點上的管理網路介面IP
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api_database]
connection = mysql+pymysql://nova:123456@controller.example.com/nova_api #連線nova_api資料庫,123456是我的密碼
[barbican]
[cache]
[cells]
[cinder]
[conductor]
[cors]
[cors.subdomain]
[database]
connection = mysql+pymysql://nova:123456@controller.example.com/nova #連線nova資料庫,123456是我的密碼
[ephemeral_storage_encryption]
[glance]
api_servers = http://controller.example.com:9292 #映象服務的提供者,我是裝在controller節點上
[guestfs]
[hyperv]
[image_file_url]
[ironic]
[keymgr]
[keystone_authtoken]
auth_uri = http://controller.example.com:5000
auth_url = http://controller.example.com:35357
memcached_servers = controller.example.com:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = 123456 #123456是我openstack中nova使用者的密碼
[libvirt]
[matchmaker_redis]
[metrics]
[neutron]
[osapi_v21]
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[oslo_messaging_amqp]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
rabbit_host = controller.example.com #rabbitMQ服務的提供者,我也是安裝在controller節點上的
rabbit_userid = openstack #這是我的rabbitMQ服務中的賬號
rabbit_password = henry #henry是我rabbitMQ服務中openstack賬號的密碼
[oslo_middleware]
[oslo_policy]
[rdp]
[serial_console]
[spice]
[ssl]
[trusted_computing]
[upgrade_levels]
[vmware]
[vnc]
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
[workarounds]
[xenserver]
[[email protected] ~]#
4.同步資料庫
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage db sync" nova
發現一個錯誤,它提示我訪問不到controller中的資料庫,我之前的程式碼是這麼寫的
沒錯,正確的地址應該是controller.example.com
錯誤資訊描述:
[[email protected] ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
error: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'controller' ([Errno -2] Name or service not known)")
但是下面這種棄用提示是可以忽略的:
[root@controller ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
[root@controller ~]# su -s /bin/sh -c "nova-manage db sync" nova
/usr/lib/python2.7/site-packages/pymysql/cursors.py:146: Warning: Duplicate index 'block_device_mapping_instance_uuid_virtual_name_device_name_idx' defined on the table 'nova.block_device_mapping'. This is deprecated and will be disallowed in a future release.
result = self._query(query)
/usr/lib/python2.7/site-packages/pymysql/cursors.py:146: Warning: Duplicate index 'uniq_instances0uuid' defined on the table 'nova.instances'. This is deprecated and will be disallowed in a future release.
result = self._query(query)
[root@controller ~]#
5.啟動服務,並設定為開機自啟
systemctl enable openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
systemctl start openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
上面部分是針對controller節點的。
按照我們之前的網路拓補圖,下面的部署是要在compute節點執行的。
Nova-compute部署
安裝
1.Install the packages:
yum install openstack-nova-compute -y
2.編輯/etc/nova/nova.conf
cp -p /etc/nova/nova.conf /etc/nova/nova.conf.bak
vim /etc/nova/nova.conf
[DEFAULT]
...
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.0.18
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[oslo_messaging_rabbit]
...
rabbit_host = controller.example.com
rabbit_userid = openstack
rabbit_password = henry
[keystone_authtoken]
...
auth_uri = http://controller.example.com:5000
auth_url = http://controller.example.com:35357
memcached_servers = controller.example.com:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = 123456
[vnc]
...
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller.example.com:6080/vnc_auto.html
[glance]
...
api_servers = http://controller.example.com:9292
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
[libvirt]
...
virt_type = qemu
總覽:
[[email protected] ~]# cat /etc/nova/nova.conf | grep -v ^# | grep -v ^$
[DEFAULT]
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.0.18 #compute節點的管理網路的IP,得跟controller節點的管理網路保持在同一條網路上。
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api_database]
[barbican]
[cache]
[cells]
[cinder]
[conductor]
[cors]
[cors.subdomain]
[database]
[ephemeral_storage_encryption]
[glance]
api_servers = http://controller.example.com:9292
[guestfs]
[hyperv]
[image_file_url]
[ironic]
[keymgr]
[keystone_authtoken]
auth_uri = http://controller.example.com:5000
auth_url = http://controller.example.com:35357
memcached_servers = controller.example.com:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = 123456 #nova使用者的密碼
[libvirt]
virt_type = qemu #在命令列執行egrep -c '(vmx|svm)' /proc/cpuinfo這條命令,如果返回值不是0,說明你的機器支援kvm,就沒必要再用qemu,因此這行可以註釋掉或者刪除
[matchmaker_redis]
[metrics]
[neutron]
[osapi_v21]
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[oslo_messaging_amqp]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
rabbit_host = controller.example.com
rabbit_userid = openstack #rabbitMQ賬戶
rabbit_password = henry #rabbitMQ密碼
[oslo_middleware]
[oslo_policy]
[rdp]
[serial_console]
[spice]
[ssl]
[trusted_computing]
[upgrade_levels]
[vmware]
[vnc]
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller.example.com:6080/vnc_auto.html
[workarounds]
[xenserver]
[[email protected] ~]#
3.啟動服務,並設定為開機自啟
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service
驗證
請在controller節點上進行驗證
[[email protected] ~]# source ~/admin-openrc
[[email protected] ~]# openstack compute service list
+----+----------------+----------------+----------+---------+-------+------------------+
| Id | Binary | Host | Zone | Status | State | Updated At |
+----+----------------+----------------+----------+---------+-------+------------------+
| 1 | nova-scheduler | controller.exa | internal | enabled | up | 2016-08-04T07:29 |
| | | mple.com | | | | :26.000000 |
| 2 | nova- | controller.exa | internal | enabled | up | 2016-08-04T07:29 |
| | consoleauth | mple.com | | | | :27.000000 |
| 3 | nova-conductor | controller.exa | internal | enabled | up | 2016-08-04T07:29 |
| | | mple.com | | | | :27.000000 |
| 7 | nova-compute | compute.exampl | nova | enabled | up | 2016-08-04T07:29 |
| | | e.com | | | | :25.000000 |
+----+----------------+----------------+----------+---------+-------+------------------+
**額,看到上面四個服務已經啟用,則說明nova的部署已經完成
謝謝觀看**
相關推薦
快速入門Openstack,無腦多節點部署Mitaka(1)--前期環境搭建準備
序言 openstack是什麼?官方的解釋:OpenStack is a cloud operating system that controls large pools of compute, storage, and networking reso
快速入門Openstack,無腦多節點部署Mitaka(5)--Nova部署
什麼是Nova? 簡介 Nova是openstack中用來提供高可擴充套件、按需、自服務的計算資源服務的一個專案。Nova是openstack最老牌的專案,最初剛釋出的時候集成了很多的功能,既包括計算,也包括網路和儲存。後來隨著openstack
快速入門Openstack,無腦多節點部署Mitaka(7)--cinder部署
什麼是Cinder? 1.簡介 Cinder從Openstack的Folsom版本(2012年9月釋出)開始出現,用以替代Nova-Volume服務,Cinder為Openstack提供了管理卷(volunme)的基礎設施。 Cinder是受請求得到、
『中級篇』docker-swarm創建一個多節點集群(43)
fine containe 創建 lock tis -cp -a lang virt >原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!>原文鏈接地址:『中級篇』docker-swarm創建一個多節點集群(43) docker Swarm是Docker
C++快速入門---傳值、傳值和傳引用(6)
C++快速入門---傳值、傳值和傳引用(6) 傳值 #include <iostream> void changeAge(int age, int newAge); // 如果想要實現計劃功能,需要怎麼改? main() { int a
GAN應用之資料生成,無監督深度學習新方法(3)
3.1 從GAN到Conditional GAN GAN的生成式模型可以擬合真實分佈,所以它可以用於偽造資料。DCGAN是第一個用全卷積網路做資料生成的,下面是它的基本結構和生成的資料。 輸入100維的噪聲,輸出64*64的影象,從mnist的訓練結果來看,
Linux真小白入門教程第八集——Bash Shell命令學習(5)
不管是執行簡單的Linux桌上型電腦或者是大型的Linux伺服器,都需要進行系統磁碟的檢測,以下幾個命令可以幫助你管理儲存媒體 Linux檔案系統將所有的磁碟都併入一個虛擬目錄下,在使用新的儲存媒體之前,需要把它放到虛擬目錄下,這項工作被稱為掛載(插U盤),現如今的大部分Linux發行版都支
多執行緒學習(5):synchronized 的基礎使用
2018年10月03日 目錄 前言 前言 java中已經有了內建鎖:synchronized,synchronized的特點是使用簡單,一切交給JVM去處理,不需要顯示釋放; j
Java多執行緒程式設計-(5)-使用Lock物件實現同步以及執行緒間通訊
前幾篇: 在《Java多執行緒程式設計-(4)-執行緒間通訊機制的介紹與使用》已經學習了,可以使用方法wait/notify 結合同步關鍵字syn
C#.net同步非同步SOCKET通訊和多執行緒總結(5)tcp傳送和接受的程式碼
基於TCP協議的傳送和接收端 TCP協議的接收端 using System.Net.Sockets ; //使用到TcpListen類 using System.Threading ; //使用到執行緒 using System.IO ; //使用到StreamReader類 int port = 800
如何快速入門python,這篇文章幫你指明方向(零基礎的福音)
一個 交流群 企業 小項目 調用 不錯 數據類型 數據 入門 這是曾經在悟空問答回答的一個問題,後來效果還不錯,所以發出來,裏面結合了當年的學習經驗和一些行業老師的建議,希望幫助更多有興趣的人。(第三點福利) Python語言這幾年大火,在世界編程語言排行中Python也位
Go語言實現區塊鏈與加密貨幣-Part3(交易優化,單機模擬多節點通訊)
交易(二) 在這個系列文章的一開始,我們就提到了,區塊鏈是一個分散式資料庫。不過在之前的文章中,我們選擇性地跳過了“分散式”這個部分,而是將注意力都放到了“資料庫”部分。到目前為止,我們幾乎已經實現了一個區塊鏈資料庫的所有元素。今天,我們將會分析之前跳過的一些機制。而在本篇文章中,我們將
某高校計算機程式設計教授教你如何快速入門python,一文帶你進入程式設計
如何快速入門Python 學習任何一門語言都是從入門(1年左右),通過不間斷練習達到熟練水準(3到5年),少數人最終能精通語言,成為執牛耳者,他們是金字塔的最頂層。雖然萬事開頭難,但好的開始是成功的一半,今天這篇文章就來談談如何開始入門 Python。只要方向對了,就不怕路遠。 設定目標
mongodb 中的 map reduce 的快速入門例子,簡單操作和理解。
先看下mongodb官方給出的例子的圖。 個人理解的解釋: 這個圖,有四列資料。 第一列:原始資料。通常對應的mongodb裡面的一個表collection。 第二列:經過某些條件過濾過的資料,這個圖裡面就是按{"status":"A"}過濾資料。這個過濾的條件對應上面程式
快速入門CSS,知識重點內容小結
盒子模型 把html頁面的元素看作一個矩形的盒子,相當於一個承裝內容的容器。每個矩形都由四個部分組成:填充層(內容) ,內邊框(padding) ,邊框(border) ,外邊框(margin)組成。 box-sizing取值: content-box(預設值)----wei
為了快速入門threejs,學學threejs三大元件。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &nb
React + Webpack多入口打包配置(一)基礎配置快速打包,優化打包速度
1. 安裝編譯外掛 編譯 jsx、es6、scss 等資源 ● 使用 bael 和 babel-loader 編譯 jsx、es6 ● 安裝外掛: babel-preset-es2015 用於解析 es6 ● 安裝外掛:babel-preset-react 用於
aelf開發進展更新:經濟系統適配升級改進已完成,側鏈多節點調試正按計劃推進
mark blog 測試 watermark 多節點 進行 細節 ffffff 影響 截至目前,經濟系統適配改進之後的共識模塊開發已完成,瀏覽器插件第二版已按計劃完成更新,經濟系統回歸已完成80%。以下是詳細開發進展。 上周開發進展 ? Release-v0.7.0 [驗
git零基礎快速入門實戰,重點講解,在實際生產中整合idea對版本、分支的管理等
html lan 幫助 rec 工具 log .com 咖啡館 ise 1、git簡單描述 git是重要的版本管理工具,幾乎每個碼農都有自己的git賬號管理自己的代碼,同時很多公司也是用git管理公司的代碼, 因此掌握git在實際生產中的常規使用非常重要。 2
十分鐘快速入門 Python,看完即會,不用收藏!
win 等待 變量命名 json stdin 要求 收藏 初始化 mage 本文以 Eric Matthes 的《Python編程:從入門到實踐》為基礎,以有一定其他語言經驗的程序員視角,對書中內容提煉總結,化繁為簡,將這本書的精髓融合成一篇10分鐘能讀完的文章。 讀完本篇