2015年12月31日 星期四

CentOS KVM 的使用

http://www.lijyyh.com/2015/12/linux-kvm-set-up-linux-kvm.html

2015年12月17日 星期四

RHEL7 防火牆設定

firewalld 服務概觀
  • RHEL7 預設使用 firewalld 服務管理主機層級的防火牆服務

  • firewalld 管理核心的 netfilter 功能,下轄三個指令與服務:
    • iptables
    • ip6tables
    • ebtables

    ※PS:以上三種服務會互相干擾,須要使用 systemctl mask 指令來隔開!

  • firewalld 區分所有的流量進到 zone (區域)裡面,而每個 zone 裡面,均有不同的 rule (規則)!

  • firewalld 區分進來的封包該進到哪一個 zone,其運作邏輯如下列順序:
    1. 若進來的封包,其來源位址符合某一 zone 內的某一針對來源位址所設定的規則,則該封包將被繞送經過該 zone !
    2. 若接受封包進來的介面符合某一 zone 內所設定的過濾器,則使用該 zone 進行封包過濾!
    3. 其他狀況,使用 Default Zone !! 通常 Default Zone 名為 public ,但管理者可指定其他的 zone 為 Default Zone!

  • firewalld 預設的 zone:
    名稱 預設內容
    trusted 允許所有進入的流量
    home 退回進入的流量!除了與出去的流量相關封包,或是 ssh, mdns, ipp-client, samba-client, 或者 dhcpv6-client 等預設的服務!
    internal 退回進入的流量!除了與出去的流量相關封包,或是 ssh, mdns, ipp-client, samba-client, 或者 dhcpv6-client 等預設的服務!(預設值與home相同!)
    work 退回進入的流量!除了與出去的流量相關封包,或是 ssh, ipp-client, 或者 dhcpv6-client 等預設的服務!
    public 退回進入的流量!除了與出去的流量相關封包,或是 ssh, 或者 dhcpv6-client 等預設的服務!為所有新增網路卡介面的 Default Zone!
    external 退回進入的流量!除了與出去的流量相關封包,或是 ssh 等預設的服務!要出去的 IPv4 流量封包被轉到這裡,將會進行 IP 來源位置的偽裝!
    dmz 退回進入的流量!除了與出去的流量相關封包,或是 ssh 等預設的服務!
    block 退回所有進入的流量!除了與出去的流量相關封包!
    drop 排除所有進入的流量!除了與出去的流量相關封包!

管理 firewalld 服務
  • 管理 firewalld 有下列三種方式:
    1. 使用 firewall-cmd 文字指令!
    2. 使用 firewall-config 圖形介面!
    3. 使用 /etc/firewalld/ 目錄下的檔案!

  • 當 firewalld 套件被安裝好之後, firewall-cmd 即已經存在!

  • 參數使用須知:
    • 使用的參數中,如未指定 --permanent,則預設會是 runtime 狀態!如未指定 zone 名稱,則所有規則,將用在 public zone 上!
    • 如果使用 --permanent 參數後,要立即生效,則必須下 firewall-cmd --reload 指令,重新導入規則內容!
    • 如果只是暫時使用的規則,可以設定 --timeout= 參數!時間到,自動移除!

  • 常用參數列表:
    參數名稱 內容說明
    --get-default-zone
    --set-default-zone=
    --get-zones 列出所有的 zone !!
    --get-services 列出所有預設的服務!
    --get-active-zones 列出所有正在使用中的 zone ,連同介面以及來源資訊!
    --add-source= [--zone=] 繞送由該 IP address 或 network/netmask 進來的封包,進入指定的 zone !!
    --remove-source= [--zone=] 移除由上項新增的規則!
    --add-interface= [--zone=] 繞送由該介面進來的封包,進入指定的 zone !!
    --change-interface= [--zone=] 將上項新增的規則,更換指定的 zone !!
    --list-all [--zone=] 列出某一 zone 內所有的介面、來源設定、服務設定以及 ports 的設定!
    --list-all-zones 列出所有 zone 內所有的介面、來源設定、服務設定以及 ports 的設定!
    --add-service= [--zone=] 允許流量進入該服務
    --remove-service= [--zone=] 移除由上項新增的規則!
    --add-port= [--zone=] 允許流量進入該埠!協定可以是 tcp、udp、icmp 等等
    --remove-port= [--zone=] 移除由上項新增的規則!

  • 範例:
    • # firewall-cmd --set-default-zone=dmz
    • # firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/24
    • # firewall-cmd --permanent --zone=internal --add-service=mysql
    • # firewall-cmd --reload

  • firewalld 設定目錄:
    • /etc/firewalld
    • /usr/lib/firewalld
    • 若兩目錄內有相同檔案名稱,將只使用 /etc/firewalld 目錄內的檔案!

使用 firewalld 客製化規則

  • 管理員還有其他兩項方式,可以滿足管理防火牆的需求:direct rules 以及 rich rules !!

  • Direct Rules
    • 允許管理員直接手動寫 {ip,ip6,eb}tables 規則到 firewalld 所管理的防火牆內容中!
    • 但當強力的規則無法出現在規則列表中,這些規則將很難管理!
    • Direct Rules 的使用彈性比起標準的規則或是 Rich Rules,都是比較差的!
    • Direct Rules 只要不是嵌入在 zone 內,就會在 firewalld 規則之前被導入引用!
    • 範例:
      # firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist
      # firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.1.0/24 -j blacklist
      # firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix "blacklisted "
      # firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP

  • Rich Rules
    • Rich Rules 給予管理員一種撰寫防火牆規則的方式!而該方式是無法用基本防火牆的語法來達成。
    • 語法上,不僅可以使用基本的允許/拒絕功能,還可以使用記錄、製作port 轉向、IP 偽裝、或是速率上的限制!
    • 基本語法:
      rule
        [source] 
        [destination]
        service|port|protocol|icmp-block|masquerade|forward-port
        [log]
        [audit]
        [accept|reject|drop]

    • 設定格式:rule option=value
      • family=ipv4 | ipv6
      • source | destination address=<CIDR>
      • service name=http | ftp ...| <SERVICE_NAME>
      • port port=<PORT NUMBER>
      • protocol=tcp | udp |...

    • 規則判斷順序:每個 zone 內的判斷順序均相同!
      1. 為該 zone 所設定的任何 port 轉換與偽裝規則!
      2. 針對該 zone 所設定的記錄規則!
      3. 為該 zone 所設定的允許規則!
      4. 為該 zone 所設定的拒絕規則!
    • 如果有封包不符合任何 zone 內的任何規則,將該封包將會被拒絕!
    • Rich Rules 配合 firewall-cmd 指令的常用參數:
      參數名稱 內容說明
      --add-rich-rule='<RULE>' 新增<RULE>到指定的 zone 內!
      --remove-rich-rule='<RULE>' 移除指定 zone 內的<RULE>!
      --query-rich-rule='<RULE>' 查詢指定 zone 內的<RULE>!
      --list-rich-rule='<RULE>' 列出指定 zone 內的所有<RULE>!

    • 範例:
      # firewall-cmd --permanent --zone=classroom --add-rich-rule='rule family=ipv4 source address=192.168.1.111/32 reject'
      # firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept'
      # firewall-cmd --permanent --add-rich-rule='rule protocol value=esp drop'
      # firewall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept

  • Rich Rule 的使用記錄
    • 使用 syslogd :
      # log [prefix="<PREFIX TEXT>"] [level=<LOGLEVEL>] [limit value="<RATE/DURATION>"]

    • 使用 auditd :

    • 可以做限制,避免檔案空間被塞滿!



使用 firewalld 網路 NAT 功能

  • 練習:把 4321 port 轉到 80 port (只針對 192.168.1.0/24 網段)
    # firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 forward-port port=4321 protocol=tcp to-port=80'

管理 SELinux Port 標籤

2015年12月11日 星期五

RHEL 的 OpenStack (十二)--管理 Heat Orchestration 服務

Heat Orchestration 服務

Heat Orchestration 服務是為了 OpenStack 雲,提供一種基於樣板的編制工程方式,用於建立、管理雲端架構資源!
Hear Orchestration 服務,由下列幾項元件組成:
  • heat-cfn
  • heat-api
  • heat-api-cfn
  • heat-engine
  • heat-api-cloudwatch
  • heat-cfntools 以及 cloud-init 套件
練習1:
  1. # source /root/keystonerc_admin
  2. # yum list openstack-heat* python-heatclient heat-cfntools
  3. # grep 10.1.1.1 /etc/heat/heat.conf
  4. # keystone user-get heat
  5. # keystone service-get heat
  6. # keystone catalog --service orchestration
  7. # keystone user-get heat-cfn
  8. # keystone service-get heat-cfn
  9. # keystone catalog --service cloudformation
  10. # keystone user-role-list --user heat --tenant services
  11. # openstack-service status heat

設定Heat Orchestration 服務

設定檔包含項目:
  • 建立預設的 Nova 浮動IP池,Heat 將會從這個池分配浮動IP
  • 指定預設的浮動IP池
  • 設定 DNS 轉址
  • 建立各式 Nova 樣板,管理員可以用於 Heat 樣板中
  • 建立 Heat 可用的 Keystone 使用者
練習2:
  1. # source /root/keystonerc_admin
  2. # nova floating-ip-pool-list
  3. # crudini --get /etc/nova/nova.conf DEFAULT default_floating_pool
  4. # crudini --set /etc/nova/nova.conf DEFAULT default_floating_pool public
  5. # openstack-service restart nova
  6. # crudini --set /etc/neutron/dhcp_agent.ini DEFAULT dnsmasq_dns_servers 10.1.1.254
  7. # openstack-service restart neutron --> 另一部主機也需要做
  8. # nova flavor-create web.tiny auto 1024 20 1
  9. # keystone tenant-create --name heatproject
  10. # keystone user-create --name heatuser --pass redhat
  11. # keystone user-role-add --user heatuser --role _member_ --tenant heatproject
  12. # keystone user-role-add --user heatuser --tenant heatproject --role heat_stack_owner
  13. # vim /root/keystonerc_heatuser
  14. # source /root/keystonerc_heatuser
  15. # glance image-list
  16. # neutron net-list
  17. # neutron net-create net1
  18. # neutron subnet-create --name subnet1 net1 192.168.0.0/24
  19. # neutron router-create router1
  20. # neutron router-gateway-set router1 public
  21. # neutron router-interface-add router1
  22. # nova keypair-add --pub-key /root/.ssh/id_rsa.pub heatkey
  23. # nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
  24. # nova secgroup-add-rule default tcp 80 80 0.0.0.0/0
  25. # nova secgroup-add-rule default tcp 443 443 0.0.0.0/0
  26. # nova secgroup-add-rule default tcp 3306 3306 0.0.0.0/0
  27. # nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0

啟動與驗證 Stack

太複雜,先跳過...
練習3:
  1. 先編好一個檔案:multi.template
  2. # source /root/keystonerc_heatuser
  3. # neutron subnet-list
  4. # neutron net-list
  5. # vim /root/env.yaml
    parameters:
    key_name: heatkey
    public_net_id: <上一項指令的ID>
    private_net_id: <上一項指令的ID>
    private_subnet_id: <上兩項指令的ID>
  6. # heat stack-create -r -f multi.tempate -e /root/env.yaml multi
  7. # heat stack-list
  8. 在一部主機上 # virsh list
  9. # heat stack-show multi
  10. # heat event-list multi
  11. # nova list
  12. # ssh root@10.1.1.10
  13. # ssh ec2-user@10.1.1.10
  14. $ su - 
  15. # systemctl status httpd.service
  16. # exit
  17. $ exit
  18. # ssh ec2-user@10.1.1.11
  19. $ sudo systemctl status mariadb.service
  20. $ exit
  21. 移除 Stack
    • # heat stack-delete multi
除錯
練習4:

RHEL 的 OpenStack (十一)--管理 Ceilometer 遙測技術服務

Ceilometer 的作用
提供 API 以及客戶端指令,去收集系統上的資料,用於客戶帳單、系統監視或是警告!

遙測技術(telemetry)服務由下列幾個元件組成:
  • ceilometer-agent-compute : 運作於每一個計算節點上,做資源使用的統計調查
  • ceilometer-agent-central : 運作於中央管理主機上,做非計算節點或實體的資源統計資料調查!
  • ceilometer-collector : 運作於一個或多個中央管理主機上,監控訊息佇列!通知訊息將會被處理成遙測技術訊息,並且被儲存起來!
  • Mongo database : 收集儲存樣品資料
  • API Server: 運作於一個或多個中央管理主機,用來提供存取已收集的資料!

Ceilometer 的基本觀念
Ceilometer 與監測不同的地方
已加入 Ceilometer 的 OpenStack 元件
  • Nova
  • Neutron
  • Glance
  • Cinder
  • Swift
Ceilometer 使用的量表類型:
  • 累積式(Cumulative)
  • 標準式(Gauge):用於浮動式IP、影像上傳、硬碟I/O等
  • 時變式(Delta)
練習1:
  1. # source /root/keystonerc_admin
  2. # yum list installed "ceilometer" mongodb-server mongodb
  3. # cat /etc/mongodb.conf
  4. # systemctl status mongod
  5. # grep 10.1.1.1 /etc/ceilometer/ceilometer.conf
  6. # keystone user-get ceilometer
  7. # keystone tenant-get services
  8. # keystone service-get ceilometer
  9. # keystone catalog --service metering
  10. # keystone user-role-list --user ceilometer --tenant services
  11. # openstack-service restart ceilometer
  12. # systemctl status openstack-ceilometer-alarm-evaluator.service
  13. # systemctl status openstack-ceilometer-alarm-notifier.service
  14. # systemctl status openstack-ceilometer-api.service
  15. # systemctl status openstack-ceilometer-central.service
  16. # systemctl status openstack-ceilometer-collector.service
  17. # systemctl status openstack-ceilometer-compute.service
  18. # systemctl status openstack-ceilometer-notification.service
由Ceilometer 遙測服務收集資料
ceilometer 指令來自於 python-ceilometerclient RPM套件!
常用指令:
  • ceilometer meter-list
  • ceilometer sample-list -m image
  • ceilometer statistics -m image
練習2:
  1. # source /root/keystonerc_admin
  2. # glance image-create --name ceilometertest --is-public True --disk-format qcow2 --container-format bare --copy-from http://demo.example.com/pub/small.img
  3. # ceilometer meter-list
  4. # ceilometer meter-list | grep image
  5. # ceilometer sample-list -m image
  6. # ceilometer alarm-threshold-create --name monitor-image --description 'monitor image' --meter-name image.update --threshold 1 --comparison-operator ge --statistic count --period 60 --evaluation-period 1 --alarm-action 'log://'
  7. # ceilometer alarm-list
  8. # glance image-update --name ceilometer ceilometertest
  9. # sleep 1m && ceilometer alarm-list
  10. # ceilometer alarm-history <上項指出現的ID值>
除錯
練習3:

RHEL 的 OpenStack (十)--管理 Nova 計算節點

移除 Nova 計算節點
移除 Nova 計算節點
  • 在已經執行 nova-compute 服務的機器上,取消計算服務!
  • 可以利用 nova service-disable 達成目的
  • # nova service-disable --reason "Down for maintenance" demo.example.com nova-compute
練習1:
  1. # source /root/keystonerc_admin
  2. # nova list --all-tenants
  3. # nova delete <上項指令列出的VM-ID>
  4. # nova service-list
  5. # nova service-disable --reason "Maintenance"  另一部主機名稱  nova-compute
  6. # nova service-list
  7. # nova service-delete 6
  8. # nova service-list
  9. 另一部主機重開機
  10. # nova service-list --> 發現另一部主機照樣回來了!!
  11. # nova service-disable --reason "Maintenance"  另一部主機名稱  nova-compute
  12. 另一部主機重開機
  13. # nova service-list

新增 Nova 計算節點

擴展 OpenStack 第一步,即是新增 Nova 計算節點!
  • OpenStack 所有服務均可反中央集中管理!
  • 計算節點利用 hypervisor 管理實體
安裝計算節點:
  1. 安裝 openstack-nova-compute 套件
  2. 由其他控制節點或是計算節點,複製一份 /etc/nova/nova.conf 檔案
  3. 利用指令 nova host-list 或 nova service-list 來檢視新增的結果!
  4. 若想要取消,請參考上一節說明!
練習2:
  1. # source /root/keystonerc_admin
  2. # nova service-list
  3. # nova service-enable 另一部主機名稱 nova-compute
  4. # nova service-disable --reason "Test Server" 本地主機 nova-compute
  5. # nova service-list
啟動實體驗證 Nova 計算節點

增加新節點最後一步驟就下要啟動一實體!

練習3:
  1. # source /root/keystonerc_admin
  2. # nova service-list
  3. # source /root/keystonerc_myuser
  4. # nova boot --flavor m2.tiny --image small --poll test
  5. # source /root/keystonerc_admin
  6. # nova list --all-tenants
  7. # nova show <上項所列出的ID值>  ==> 注意看 hypervisor 項目
  8. 移除方式
    • # source /root/keystonerc_myuser
    • # nove delete test

RHEL 的 OpenStack (九)--管理 Nova 計算與控制器服務

Nova 計算服務
  • Nova 控制器節點執行大多數 Nova 服務!
    • nova-scheduler : 協調不同的 Nova 服務活動!

  • Nova 計算節點利用虚擬化軟體去管理、啟動 OpenStack 上的實體!

  • RHEL上的OpenStack 使用 openstack-db 指令,設定 Nova 服務的資料庫!
    • 為 Nova 建立使用者,並且將該使用者加入 service 這個租賃戶裡!
    • 為環境建立結束點,以及在 /etc/nova/nova.conf 檔內,設定合適的參數值!
    • 啟用與啟動 Nova 服務

  • 可用 openstack-status 查看狀態!

超用實體資源
OpenStack 允許在計算節點上,過用 CPU 與 RAM 資源!但不建議過度的使用,以下為建議的比例:
  • CPU : 16 : 1 (指實心 cole)
  • RAM : 1.5 : 1

/etc/nova/nova.conf 檔案內的 cpu_allocation_ratio 以及 ram_allocation_ratio 有設定比例!
練習1:
  1. # source /root/keystonerc_admin
  2. # systemctl status openstack-nova-scheduler
  3. # systemctl status openstack-nova-conductor
  4. # systemctl status openstack-nova-api
  5. # systemctl status openstack-nova-consoleauth
  6. # systemctl status openstack-nova-novncproxy
  7. 登入另一個計算節點
  8. # systemctl status openstack-nova-compute
  9. # systemctl status libvirtd
  10. 回到原來節點
  11. # keystone user-get nova
  12. # keystone user-role-list --user nova --tenant services
  13. # keystone service-list | grep nova
  14. # keystone endpoint-get --service compute
  15. # vim /etc/nova/nova.conf
    admin_tenant_name=services
    admin_user=nova
    admin_password=xxxxxxx
    auth_host=10.1.1.1
    auth_port=35357
    auth_protocol=http
    auth_uri=http://10.1.1.1:5000
    .....
  16. # vim /etc/nova/nova.conf
    rabbit_host=主機名稱(FQDN)
    rabbit_use_ssl=False
    rabbit_port=5672
    rabbit_userid=guest
    rabbit_password=guest
    ....
  17. # openstack-status

使用 CLI 佈署實體
佈署實體時,可用下列指令查看相關資訊:
  • nova flavor-list : 查看硬體設定
  • nova image-list : 查看用來啟動實體的影像檔
  • nova network-list : 查看可用網路
將上列指令所列出的ID收集好,即可使用 nova boot 指令,配置實體。nova list 指令可查看運行中的實體!
練習2:
  1. # source /root/keystonerc_myuser
  2. # cp /etc/issue /tmp
  3. # echo "Installed using nova command-line" >> /tmp/issue
  4. # nova keypair-add key1 > /root/key1
  5. # nova secgroup-create mysecgroup "SSH"
  6. # nova secgroup-add-rule mysecgroup tcp 22 22 0.0.0.0/0
  7. # nova image-list
  8. # nova flavor-list
  9. # neutron net-list
  10. # nova boot --flavor m1.small --image small --key-name key1 --security-groups mysecgroup --nic net-id=<net-list列出來private那一組ID>  --file /etc/issue=/tmp/issue test
  11. # nova list
  12. # nova list
  13. 利用 myuser / redhat 登入 dashboard,登入實體 test
  14. # nova floating-ip-list
  15. # nova floating-ip-associate test 10.1.1.2
  16. # chmod 600 /root/key1
  17. # ssh -i /root/key1 cloud-user@10.1.1.2 -->請保留,開另一個新的 teminal
  18. 登入本機
  19. # source /keystonerc_myuser
  20. # cinder create --display-name vol6 2
  21. # cinder list
  22. # nova volume-attach test <上項指令的ID> auto
  23. # cinder list
  24. <test 主機>$ lsblk
  25. 清除 nova 實體 
    # nova delete test
    # cinder delete vol6

除錯

練習3:

2015年12月10日 星期四

RHEL 的 OpenStack (八)--管理 Neutron 網路服務

Cinder 區塊儲存服務

  • Neutron 提供 OpenStack 網路連結功能以及定址 OpenStack 網路環境
  • 每個租賃戶可以擁有多個私人網段,亦允許租賃戶有自己的IP定址策略,就算是IP位置重疊也無妨!
  • OpenStack 的連網技術使用 plug-in 觀念!
  • 其基本連網模式是利用 Linux VLANs 以及 IP tables 來進行網路連網的隔離運作!
  • OpenStack 網路元件的組成,是由幾個代理人來執行:
    1. L3 agent: 提供外部存取 OpenStack 上的實體物件!
    2. DHCP agent: 提供子網路內部連結!
    3. Metadata agent: 提供訊息服務
    4.  LBaaS agent: 提供負載平衡服務
    5. Open vSwitch agent: 管理 Open vSwitch plug-in
練習1:
  1. # source /root/keystonerc_admin
  2. # systemctl status neutron-openvswitch-agent
  3. # systemctl status neutron-dhcp-agent
  4. # systemctl status neutron-l3-agent
  5. # systemctl status neutron-metadata-agent
  6. # systemctl status neutron-lbaas-agent
  7. # systemctl status neutron-ovs-cleanup
  8. # neutron agent-list
  9. # keystone user-list --tenant services
  10. # keystone user-get neutron
  11. # keystone service-get neutron
  12. # keystone endpoint-get --service network
  13. # vim /etc/neutron/neutron.conf
    admin_tenant_name=services
    admin_user=neutron
    admin_password=xxxxx
    auth_host=10.1.1.1
    auth_port=35357
    auth_protocol=http
    auth_uri=http://10.1.1.1:5000/
    ...
  14. # crudini --get /etc/neutron/neutron.conf DEFAULT core_plugin
  15. # crudini --get /etc/neutron/plugin.ini ml2 mechanism_drivers
  16. # crudini --get /etc/neutron/plugin.ini ml2 tenant_network_types
  17. # crudini --get /etc/neutron/plugin.ini ml2_type_vlan metwork_vlan_ranges
  18. # cat /etc/sysconfig/network-scripts/ifcfg-br-ex
  19. # ovs-vsctl show
  20. # openstack-status

租賃戶設定連網服務
  • 網路設定步驟:先新增 router,接下來才是建立網路與子網路!
  • 若子網路是私人網段,則使用 neutron router-interface-add 增加一個介面到 router 上!
  • 利用新增一個 Gateway 方式,將 router 連到外部網路!
  • 外部網路可以指定一個浮動IP,連結上實體物件!
  • OpenStack 利用核心功能,提供網路名稱空間的使用!
  • 網路空間包含虚擬存取網路資源的抽象層網路功能,類似 port 與介面的概念!
  • ip 以及 ifconfig  指令無法顯示網路空間!使用 ip netns 以及 iproute 才能清楚了解網路架構!
  • 範例指令:
    • # source /root/keystonerc_admin
    • # neutron router --list
    • # ip netns exec qrouter-UUID  ip a
    • # ip netns exec qruoter-UUID ping  10.1.1.2

練習2:
  1. # source /root/keystonerc_myuser
  2. # keystone router-create router1
  3. # neutron net-create private
  4. # neurton subnet-create --name subpriv private 192.168.0.0/24
  5. # neutron router-interface-add router1 subpriv
  6. # neutron port-list
  7. # neutron router-gateway-set router1 public
  8. # neutron floatingip-create public
  9. # neutron floatingip-list 
佈署LBAAS
LBAAS: Load Balance as a Service: 讓 Neutron 可以將網路流量分散到兩部以上的實體!
分散的方式有下列:
  • Round-Robin:在多個實體之間,轉換要求!
  • Source IP:來自於同一個IP的請求,導到同一個實體!
  • Least Connections:將流量導到最少的連結實體上!
練習3:
  1. # source /root/keystonerc_admin
  2. # grep CONFIG_LBAAS_INSTALL /root/answers.txt
  3. # neutron agent-list
  4. # grep service_plugins /etc/neutron/neutron.conf
  5. # grep service_provider /etc/neutron/neutron.conf
  6. # crudini --get /etc/neutron/lbaas_agent.ini DEFAULT device_driver
  7. # glance image-create --name web --is-public True --disk-format qcow2 --container-format bare --copy-from http://demo.example.com/pub/web.img
  8. # glance image-list
  9. # source /root/keystonerc_myuser
  10. # echo "web1" > /root/index1.html
  11. # nova boot --flavor m2.tiny --image web --file /var/www/html/index.html=/root/index1.html web1
  12. # echo "web2" > /root/index2.html
  13. # nova boot --flavor m2.tiny --image web --file /var/www/html/index.html=/root/index2.html web2
  14. # neutron lb-pool-create --name lb1 --lb-method ROUND_ROBIN --protocol HTTP --subnet subpriv
  15. # nova list
  16. # neutron lb-member-create --address 192.168.0.2 --protocol-port 80 lb1
  17. # neutron lb-member-create --address 192.168.0.3 --protocol-port 80 lb1
  18. # neutron lb-healthmonitor-create --deplay 5 --type HTTP --max-retries 3 --timeout 2
  19. # neutron lb-healthmonitor-associate <上項指令所列出的ID值> lb1
  20. # neutron lb-vip-create --name lb1-vip --protocol-port 80 --protocol HTTP --subnet subpriv lb1
  21. # neutron floatingip-create public
  22. # neutron floatingip-associate <上項指令所列出的id值> <上兩項指令所列出的port id值>
  23. # neutron lb-member-list
  24. # curl 10.1.1.2
  25. # curl 10.1.1.2
  26. 清除方式:
    # neutron lb-vip-delete lb1-vip # neutron lb-pool-delete lb1 # nova delete web1 web2


Neutron 除錯

練習4:

RHEL 的 OpenStack (七)--管理 Cinder 區塊儲存服務

Cinder 區塊儲存服務

  1. OpenStack 內的區塊儲存服務由四個子服務所構成!
    • API 服務(openstack-cinder-api)
    • 排程服務(openstack-cinder-scheduler)
    • 卷冊服務(openstack-cinder-volume)
    • 備份服務(openstack-cinder-backup)

  2. 佈署區塊服務方式由三個狀態所組成:
    • 安裝前準備
    • 一般安裝設定
    • 卷冊服務規格設定

  3. 區塊服務支援的儲存方式:
    • LVM/iSCSI
    • ThinLVM
    • NFS
    • NetAPP NFS
    • Red Hat Storage (Gluster)
    • Dell EqualLogic

  4. openstack-cinder-volume:可將 volume group 直接附加到正在執行中的 Server!

  5. Cinder 服務開啟後,即可使用 cinder 指令管理 Cinder 卷冊!

練習1:
  1. # grep CINDER /root/answers.txt
    CONFIG_CINDER_INSTALL=y
    CONFIG_CINDER_DB_PW=xxxx
    CONFIG_CINDER_KD_PW=xxxx
    CONFIG_CINDER_BACKEND=lvm
    CONFIG_CINDER_VOLUMES_CREATE=n
    CONFIG_CINDER_VOLIMES_SIZE=20G
    ...
  2. # ps axf | grep cinder
  3. # crudini --get /etc/cinder/cinder.conf DEFAULT osapi_volume_workers
  4. # grep listen_port /etc/cinder/cinder.conf
  5. # ss -nlp | egrep 8776
  6. # ls /etc/cinder/
  7. # vim /etc/cinder/cinder.conf
    rabbit_host=10.1.1.1
    rabbit_port=5672
    rabbit_hosts=10.1.1.1:5672
    rabbit_use_ssl=False
    ====== 為了配合 Glance 運作 ========
    glance_host=10.1.1.1
    ====== 啟動支援 LVM 儲存方式 =======
    [lvm]
    iscsi_helper=lioadm
    volume_group=cinder-volumes
    iscsi_ip_address=10.1.1.1
    volume_driver=cider.volume.drivers.lvm.LVMISCSIDriver
    volume_backend_name=lvm
  8. # vim /etc/cinder/api-paste.ini
    [filter:authtoken]
    paste.filter_factory = keystonemiddleware.auth_token:filter_factory
    admin_tenant_name=services
    service_port=5000
    auth_uri=http://10.1.1.1:5000/
    service_host=10.1.1.1
    service_protocol=http
    admin_user=cinder
    identity_uri=http://10.1.1.1:35357
    admin_password=xxxxx
  9. # source /root/keystonerc_admin
  10. # keystone service-get cinder
  11. # keystone catalog --service volume
  12. # keystone user-get cinder
  13. # cinder list
管理 Cinder 卷冊
  1. 管理 Cinder 卷冊的工作:
    • 備份與移植
    • 針對卷冊形式,建立加密形式
    • 找尋被驗證服務註冊的結束點
    • 調整已存在卷冊大小

  2. 所需要使用的指令:
    • # cinder --help
    • # vgdisplay
    • # lvdisplay
練習2:
  1. # openstack-status
  2. # source /root/keystonerc_myuser
  3. # cinder create --display-name vol1 2
  4. # cinder list
  5. # vgs
  6. # cinder show vol1
  7. # grep backup_driver /etc/cinder/cinder.conf
    backup_driver=cinder.backup.drivers.swift
  8. # systemctl start openstack-cinder-backup.service
  9. # systemctl enable openstack-cinder-backup.service
  10. 建使用 myuser 建立備份之前,需要付予 SwiftOperator 角色
    • # source /root/keystonerc_admin
    • # keystone user-role-add --role SwiftOperator --user myuser --tenant myopenstack
    • # source /root/keystonerc_myuser
  11. # cinder backup-create vol1 --display-name vol1-backup
  12. # cinder backup-list
  13. # swift list
  14. # swift list volumebackups
  15. 刪除方式:
    • cinder delete vol1
    • cinder backup-delete ID (不是 Volume ID)
使用 Ceph 做為 Cinder 資料後端

Cinder 預設後端是 LVM ,可改成其他的儲存服務,例如: Ceph

練習3:
  1. 登入 Ceph 主機
  2. # ceph osd pool create volumes 128
  3. # ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes'
  4. 登入 Cinder 主機
  5. # yum -y install ceph-common
  6. # vim /etc/ceph/ceph.client.cinder.keyring  ==> 內容貼上第 3 步驟產生的內容
  7. # chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
  8. 把 Ceph 主機上的 /etc/ceph/ceph.conf 複製到 Cinder 主機上的 /etc/ceph/ceph.conf
  9. # vim /root/client.cinder.key ==> 內容貼上第 3 步驟產生的「key」內容
    如果忘記,可在 Ceph 主機上,執行 # ceph auth get-key client.cinder
  10. # uuidgen
  11. # vim /root/secret.xml
    <secret ephemeral='no' private='no'>
      <uuid>由上一步驟產生的 UUID 值!</uuid>
        <usage type='ceph'>
          <name>client.cinder secret</name>
        </usage>
    </secret>
  12. # virsh secret-define --file /root/secret.xml
  13. # virsh secret-set-value --secret 上一步驟的 UUID 值! --base64 $(cat /root/client.cinder.key)
  14. # cp /etc/cinder/cinder.conf /etc/cinder/cinder.conf.orig
  15. # vim /etc/cinder/cinder.conf  ==> 增加下列資料:
    enabled_backends = rbd, lvm
    [rbd]
    volume_driver = cinder.volume.drivers.rbd.RBDDriver
    rbd_pool = volumes
    rbd_ceph_conf = /etc/ceph/ceph.conf
    rbd_flatten_volume_from_sanpshot = false
    rbd_max_clone_depth = 5
    rbd_store_chunk_size = 4
    rados_connect_timeout = -1
    glance_api_version = 2
    rbd_user = cinder
    rbd_secret_uuid = 上一步驟的 UUID 值!
  16. vim /etc/nova/nova.conf
    rbd_user=cinder
    rbd_secret_uuid=上一步驟的 UUID 值!
  17. # openstack-service restart nova
  18. # openstack-service restart cinder
  19. # source /root/keystonerc_admin
  20. # cinder create --display-name cephvol 1
  21. # cinder list
  22. 在 Ceph 主機上,確認一下卷冊內容:# rados -p volumes ls
  23. 刪除方式:  # cinder delete cephvol

以 Gluster 做為 Cinder 資料後端
GlusterFS 是 Red Hat Storage 的檔案系統,可用來做為 Cinder 的資料後端!
想要開啟這項功能,需要調整 /etc/cinder/cinder.conf 檔案內容!
  1. # yum install -y glusterfs-fuse
  2. # vim /etc/cinder/cinder.conf
    [DEFAULT]
    enabled_backends=lvm1,glusterfs1
    [lvm1]
    volume_group=cinder-volumes
    volume_driver=cinder.volume.drivers.lvm.LVMISCSIDriver
    volume_backend_name=lvm
    [glusterfs1]
    volume_driver=cinder.volume.drivers.glusterfs.GlusterfsDriver
    glusterfs_shares_config=/etc/cinder/shares.conf
    volume_backend_name=rhs
    [nfs1]
    volume_driver=cinder.volume.drivers.nfs.NfsDriver
    nfs_shares_config=/etc/cinder/nfsshares.conf
    volume_backend_name=nfs
  3. # vim /etc/cinder/shares.conf ==> 手動建立
    storage-server:/volumeX
    storage-server:/volumeY
  4. # source /root/keystonerc_admin
  5. # cinder type-create lvm  ==> 使用多個 Backend ,就需要宣告、建立合適的卷冊形式
  6. # cinder type-key lvm set volume_backend_name=lvm
  7. # cinder type-create glusterfs
  8. # cinder type-key glusterfs set volume_backend_name=rhs
  9. # cinder type-create nfs
  10. # cinder type-key nfs set volume_backend_name=NFS
  11. # openstack-service restart cinder
  12. # tail -f /var/log/cinder/volume.log
  13. # cinder create --display-name glustertest --volume-type glusterfs 1
  14. # cinder list
練習3:

  1. # yum install -y glusterfs-fuse
  2. # cp /etc/cinder/cinder.conf /etc/cinder/cinder.conf.orig2
  3. # ping -c 3 rhs
  4. # showmount -e rhs
  5. # glusterfs -s rhs --volfile-id=/volume0 /mnt/
  6. # df
  7. # umount /mnt
  8. # crudini --set /etc/cinder/cinder.conf DEFAULT enabled_backups glusterfs,lvm
  9. # crudini --set /etc/cinder/cinder.conf lvm volume_group cinder-volumes
  10. # crudini --set /etc/cinder/cinder.conf lvm volume_driver cinder.volume.drivers.lvm.LVMISCSIDriver
  11. # crudini --set /etc/cinder/cinder.conf lvm volume_backend_name LVM
  12. # crudini --set /etc/cinder/cinder.conf glusterfs volume_driver cinder.volume.drivers.glusterfs.GlusterfsDriver
  13. # crudini --set /etc/cinder/cinder.conf glusterfs glusterfs_shares_config /etc/cinder/shares.conf
  14. # crudini --set /etc/cinder/cinder.conf glusterfs glusterfs_sparsed_volumes false
  15. # crudini --set /etc/cinder/cinder.conf glusterfs volume_backend_name RHS
  16. # vim /etc/cinder/shares.conf
    rhs:/volume0
  17. # openstack-service restart cinder
  18. # tail /var/log/cinder/volume.log
  19. # df
  20. # source /root/keystonerc_admin
  21. # cinder type-create lvm
  22. # cinder type-key lvm set volume_backend_name=LVM
  23. # cinder type-create glusterfs
  24. # cinder type-key glusterfs set volume_backend_name=RHS
  25. # cinder type-list
  26. # cinder create --volume-type lvm --display-name vol2 1
  27. # cinder list
  28. # cinder create --volume-type glusterfs --display-name vol3 1
  29. # cinder list
  30. # df
  31. # cinder create --volume-type lvm --display-name vol4 1
  32. # cinder list
  33. 清除方式:
    # cinder delete vol2
    # cinder delete vol3
    # cinder delete vol4
  34. # cinder type-list
  35. 清除方式
    # cinder type-list
    # cinder type-delete lvm
    # cinder type-delete glusterfs
    # cp /etc/cinder/cinder.conf.orig2 /etc/cinder/cinder.conf # chown cinder:cinder /etc/cinder/cinder.conf
  36. # openstack-service restart cinder

除錯
練習4:

2015年12月9日 星期三

RHEL 的 OpenStack (六)--管理 Glance 影像服務

管理 Glance 影像服務
  • Glance 影像服務
    1. 作用方式如同將虚擬硬碟影像檔註冊。
    2. 使用者可增加新影像檔或從已經存在的 Server 取得快照。
    3. 快照影像檔可用於備份或是做為新 Server 的樣板。
    4. 已註冊的影像檔,存放在物件儲存服務中!
    5. Glance服務需要 Keystone 服務來進行身份驗證管理以及使用授權!
    6. Glance使用 MySQL 存放影像檔的資訊資料!
    7. Glance 支援不同的影像檔格式:
      影像格式 說明
      raw
      vhd
      vmdk
      vdi
      iso
      qcow2
      aki
      ari
      ami

    8. Glance支授不同的 Container 格式:
      Container格式 說明
      bare
      ovf
      ova
      aki
      ari
      ami

    9. 在 /root/answers.txt 檔案中:
      CONFIG_GLANCE_INSTALL=y
      CONFIG_GLANCE_BACKEND=file

  • Glance 目錄
    • /var/lib/glance/images : 假如 Backend 項目被設定成 file 時!
    • /etc/glance/ : Glance服務設定檔
    • ※PS:下一版的 Glance ,將取消 glance-registry.conf 檔案!

  • Glance Keystone 設定
    • # keystone endpoint-list
練習1:驗證 Glance 影像服務
  1. # grep GLANCE /root/answers.txt
  2. # ps axf | grep glance
  3. # grep workers /etc/glance/glance-*
  4. # grep bind_port /etc/glance/glance-api.conf
  5. # ss -nlp | grep 9292
  6. # cd /etc/glance
  7. # ls
  8. # vim /etc/glance/glance-api.conf
    rabbit_host=10.1.1.1
    flavor=keystone
    filesystem_store_datadir=/var/lib/glance/images/
  9. # vim /etc/glance/glance-registry.conf
    [database]
    connection=mysql://....
  10. # cd
  11. # ls -al /var/lib/glance/
  12. # source /root/keystonerc_admin
  13. # keystone service-get glance
  14. # keystone catalog --service image
  15. # keystone user-get glance
  16. # glance image-list --all-tenants
  17. # glance --debug image-list --all-tenants
    ※PS:一定要看見 HTTP/1.1 200 OK!
使用 Glance 影像服務儲存系統影像檔
  • 儲存系統影像檔
    • glance指令可以用來管理影像檔
    • 利用 virt-sysprep 指令,可將 KVM 虚擬機中的 Linux 作業系統,打包成影像檔,方便存入 Glance
    • 確認影像檔方式: qemu-img info IMAGENAME
    • # glance image-create --name "NAME" --is-public IS_PUBLIC --disk-format DISK_FORMAT --container-format CONTAINER_FORMAT --file IMAGEFILE
    • --location URL :可取代 --file
練習2:
  1. # source /root/keystonerc_admin
  2. # glance image-create --name small --is-public True --disk-format qcow2 --container-format bare --copy-from http://demo.example.com/pub/small.img
  3. # glance image-list
  4. # glance image-show small
  5. # glance image-list --all-tenants
建立與封裝影像
  • 使用快照進行快速佈署
    • 快照是一種將執行中的實體,複製一份,簡化類似實體的建立過程!

  • 使用 Oz 建立影像檔
    • # oz-install -d 2 -t 3000 small-template.xml
    • /var/lib/libvirt/images
    • /etc/oz/oz.cfg
    • # yum install -y virt-manager virt-viewer gnome-font-viewer xorg-x11-xauth

練習3:
  1. # yum -y install oz libguestfs-tools crudini python-glanceclient
  2. # systemctl status libvirtd.service
  3. # virsh net-list
  4. # cat /usr/share/libvirt/networks/default.xml
  5. # virsh net-define /usr/share/libvirt/networks/default.xml
  6. # virsh net-start default
  7. # virsh net-autostart default
  8. # virsh net-list
  9. # wget http://demo.example.com/pub/small-template.xml
  10. # ls /dev/kvm
  11. # vim /usr/lib/python2.7/site-packages/oz/RedHat.py
    約80行的地方,加入參數:no_timer_check
    self.cmdline = "method=" + self.url + " ks=file:/ks.cfg no_timer_check"
  12. # crudini --set /etc/oz/oz.cfg libvirt image_type qcow2
  13. # oz-install -d 2 -t 3000 small-template.xml
  14. # yum -y install virt-manager virt-viewer gnome-font-viewer xorg-x11-xauth
  15. # ssh -X root@otherhost
  16. # virsh list
  17. # virt-viewer rhel7_x86_64
  18. # virt-sysprep --add /var/lib/libvirt/images/rhel7_x86_64.qcow2
  19. # scp root@localhost:/root/keystonerc_admin /root/
  20. # source /root/keystonerc_admin
  21. # glance image-create --name "myozimage" --is-public True --disk-format qcow2 --container-format bare --file /var/lib/libvirt/images/rhel7_x86_64.qcow2
  22. # glance image-list
  23. 打開firefox,連進 dashboard,使用 testuser/redhat
  24. 使用 Compute > Instance ,按下 Launch Instance 按鈕
  25. 輸入下列相關資料:
    參數名稱參數值
    Details
    • Instance Name : My sealed template
    • Flavor : m2.tiny
    • Instance count : 1
    • Instance boot source: Boot from image
    • Image name: myozimage
    Details
    • Key pair: Key2
    • Security groups: sec2
    Networking
    • Selected Networks: net1

    按下 Launch 按鈕
  26. 在 Actions 欄位中,打開下拉式選單,選擇 Associate Floating IP!
  27. 選擇 10.1.1.28 ,以及在 Port to be associated之下,選擇 My sealed template: 192.168.0.4,然後再按下 Associate 按鈕!
  28. # rm -f ~/.ssh/know_hosts
  29. # ssh root@10.1.1.28
  30. # ping 10.1.1.254
  31. # exit
  32. 若要移除 instance ,則在 Instance 子標籤中,選擇所有實體,按下 Terminate Instance 按鈕,再按下 Terminate Instance 按鈕確認即可!

設定 Swift 為 Glance 資料後端
  • 預設值中,Glance 以及快照均使用 /var/lib/glance/images 目錄來存放影像
  • 可修改設定檔 glance-api.conf 來指定使用 Swift 提供服務
    • 將 default_store 改成 swift
    • 在 [glance_store] 項目中,設定 glance.store.swift.Store 要設定
    • swift_store_auth_address 提定  Swift API 結束點
    • swift_store_user
    • swift_store_key
    • swift_store_create_container_on_put 要設定成 true
練習4:
  1. # source /root/keystonerc_admin
  2. # glance image-list
  3. # glance image-delete myozimage
  4. # glance image-delete small
  5. # glance image-list --all-tenants
  6. # glance image-delete 00000000-1111-abcd-dcba-0987654321fe
  7. # glance image-delete 22222222-1111-abcd-dcba-0987654321fe
  8. # cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.orig
  9. # crudini --set /etc/glance/glance-api.conf DEFAULT default_store swift
  10. # crudini --set /etc/glance/glance-api.conf glance_store stores glance.store.swift.Store
  11. # crudini --set /etc/glance/glance-api.conf glance_store swift_store_auth_address http://10.1.1.1:5000/v2.0/
  12. # crudini --set /etc/glance/glance-api.conf glance_store swift_store_user services:swift
  13. # crudini --set /etc/glance/glance-api.conf glance_store swift_store_key redhat
  14. # crudini --set /etc/glance/glance-api.conf glance_store swift_store_create_container_on_put true
  15. # cp /usr/share/glance/glance-api-dist-paste.ini /etc/glance/glance-api-paste.ini
  16. # cp /usr share/glance/glance-registry-dist-paste.ini /etc/glance/glance-registry-paste.ini
  17. # openstack-service restart glance
  18. # wget -N http://demo.example.com/pub/small.img
  19. # glance image-create --name small --disk-format qcow2 --container-format bare --file small.img
  20. # glance image-list
  21. 刪除方式:
    • glance image-delete small
    • crudini --set /etc/glance/glance-api.conf DEFAULT default_store file
    • crudini --set /etc/glance/glance-api.conf glance_store stores glance.store.filesystem.Store,glance.store.http.Store
    • openstack-service restart glance
設定 Ceph 為 Glance 資料後端
  • Glance 服務可以使用 Ceph 做為資料後端!
練習5:
  1. 登入已經裝好 Ceph 的主機
  2. # ceph osd pool create images 128
  3. # ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
  4. 回到 Glance 主機
  5. # yum -y install python-rbd
  6. # mkdir /etc/ceph/
  7. # vim /etc/ceph/ceph.client.glance.keyring  ==> 將第3步驟的結果,複製到這裡!
  8. # chown glance:glance /etc/ceph/ceph.client.glance.keyring
  9. 把 Ceph 主機上的 /etc/ceph/ceph.conf 複製到 Glance 主機的  /etc/ceph/ceph.conf
  10. # cp /etc/glance/glance-api.conf /etc/glance/glance.conf.orig2
  11. # vim /etc/glance/glance-api.conf
    show_image_direct_url=True
    defalut_store = rbd
    [default_store]
    stores = glance.store.rbd.Store
    rbd_store_pool = images
    rbd_store_user = glance
    rbd_store_ceph_conf = /etc/ceph/ceph.conf
    rbd_store_chunk_size = 8
  12. # systemctl restart openstack-glance-api
  13. # source /root/keystonerc_admin
  14. # wet -N http://demo.example.com/pub/web.img
  15. # glance image-create --disk-format qcow2 --name cephweb --is-public True --container-format bare --file web.img
  16. # glance image-list
  17. 登入 Ceph 主機內
  18. # rados -p images ls
  19. 清除方式:
    • # glance image-delete cephweb
    • # crudini --set /etc/glance/glance-api.conf DEFAULT default_store file
    • # crudini --set /etc/glance/glance-api.conf glance_store stores glance.store.filesystem.Store,glance.store.http.Store
    • # openstack-service restart glance
除錯
練習6:

RHEL 的 OpenStack (五)--執行與管理 Swift 物件儲存服務

佈署Swift物件儲存服務

<<什麼是Swift 物件儲存服務?>>
物件儲存使用下列三個觀念:
  • Storage replicas
  • Storage zones
  • Storage regions

<<Swift 物件儲存服務架構>>
OpenStack 物件儲存服務是一個模組化的服務,包含下列可用模組:
  • openstack-swift-proxy
  • openstack-swift-object
  • openstack-swift-container
  • openstack-swift-account

所有服務可在每一個節點或是指定的機器上!下列元件,可在適合的機器上操作:
  • Ring files
  • Object storage: /srv/node
  • Housekeeping processes

<<物件儲存服務佈署設定檔>>
  • All services run on all nodes: Simplest setup
  • Dedicated proxy nodes, all other services combined on other nodes
  • Dedicated proxy nodes, dedicated object service node, container and account services combined on other nodes
練習1:
  1. # yum -y install openstack-swift-proxy openstack-swift-object openstack-swift-container openstack-swift-account python-swiftclient memcached 
  2. # source /root/keystonerc_admin
  3. # keystone tenant-list | grep services
  4. # keystone user-create --name swift --pass redhat --tenant services
  5. # keystone role-list | grep admin
  6. # keystone role-create --name SwiftOperator
  7. # keystone user-role-add --user swift --role admin --tenant services
  8. # keystone service-list | grep swift
  9. # keystone service-create --name swift --type object-store --description "OpenStack Object Storage"
  10. # keystore endpoint-create --service swift --region RegionOne --publicurl "http://10.1.1.1:8080/v1/AUTH_%(tenant_id)s" --adminurl "http://10.1.1.1:8080/v1/AUTH_%(tenant_id)s"  --internalurl "http://10.1.1.1:8080/v1/AUTH_%(tenant_id)s"

佈署Swift儲存節點
  • 物件儲存服務存放物件於檔案系統上!檔案系統通常也連結數個節點!
  • 檔案系統通常被格式化成 ext4 或 xfs 格式,並掛載在/srv/node 目錄下!
  • 任何被指定的儲存節點,必須要安裝下列套件:openstack-swift-object , openstack-swift-container, openstack-swift-account
練習2:
  1. # mkdir -p /srv/node/z{1,2}d1
  2. # cp /etc/fstab /etc/fstab.orig
  3. # echo "/dev/vdc1 /srv/node/z1d1 xfs defaults 0 0" >> /etc/fstab
  4. # echo "/dev/vdd1 /srv/node/z2d1 xfs defaults 0 0" >> /etc/fstab
  5. # mount -a
  6. # df -h | grep srv
  7. # chown -R swift:swift /srv/node
  8. # restorecon -rv /srv
  9. # cp /etc/swift/*.conf /root/swift_orig/
  10. # crudini --set /etc/swift/swift.conf swift-hash swift_hash_path_prefix $(openssl rand -hex 10)
  11. # crudini --set /etc/swift/swift.conf swift-hash swift_hash_path_suffix $(openssl rand -hex 10)
  12. # cp /etc/swift/swift.conf /etc/swift/swift.conf.orig2
  13. # crudini --set /etc/swift/account-server.conf DEFAULF bind_ip 10.1.1.1
  14. # crudini --set /etc/swift/container-server.conf DEFAULF bind_ip 10.1.1.1
  15. # crudini --set /etc/swift/object-server.conf DEFAULF bind_ip 10.1.1.1
設定Swift Rings
  • Rings決定資料儲放在儲存節點叢集的哪一個地方
  • Rings 需要三個檔案:Object, Container, Account Services
  • Rings 檔案可由 swift-ring-builder 工具依下列三個參數產生:
    1. Partition power
    2. Replica count
    3. min_part_hours
  •  zone是第四個參數,用來增加硬體到 Rings
  • 範例:# swift-ring-builder /etc/swift/account.builder add z1-10.1.1.1:6202/accounts 100
  • /etc/swift 目錄內容,需要複製到每個節點的 /etc/swift 目錄
練習3:
  1. # source /root/keystonerc_admin
  2. # swift-ring-builder /etc/swift/account.builder create 12 2 1
  3. # swift-ring-builder /etc/swift/container.builder create 12 2 1
  4. # swift-ring-builder /etc/swift/object.builder create 12 2 1
  5. # for i in 1 2; do
    >swift-ring-builder /etc/swift/account.builder add z${i}-172.25.0.10:6202/z${i}d1 100
    >done
  6.  # for i in 1 2; do
    >swift-ring-builder /etc/swift/container.builder add z${i}-172.25.0.10:6201/z${i}d1 100
    >done
  7. # for i in 1 2; do
    >swift-ring-builder /etc/swift/object.builder add z${i}-172.25.0.10:6200/z${i}d1 100
    >done
  8. # swift-ring-builder /etc/swift/account.builder rebalance
  9. # swift-ring-builder /etc/swift/container.builder rebalance
  10. # swift-ring-builder /etc/swift/object.builder rebalance
  11. # ls /etc/swift/*gz
  12. # systemctl enable openstack-swift-account
  13. # systemctl enable openstack-swift-container
  14. # systemctl enable openstack-swift-object
  15. # openstack-service start swift
  16. # chown -R root:swift /etc/swift
  17. # tail /var/log/messages
佈署Swift代理服務
  • 物件儲存代理服務用來決定哪一個節點被引導去存取
練習4:
  1. # cp /etc/swift/proxy-server.conf /etc/swift/proxy-server.conf.orig
  2. # crudini --set /etc/swift/proxy-server.conf filter:authtoken admin_tenant_name services
  3. # crudini --set /etc/swift/proxy-server.conf filter:authtoken auth_host 10.1.1.1
  4. # crudini --set /etc/swift/proxy-server.conf filter:authtoken auth_uri http://10.1.1.1:5000
  5. # crudini --set /etc/swift/proxy-server.conf filter:authtoken admin_user swift
  6. # crudini --set /etc/swift/proxy-server.conf filter:authtoken admin_password redhat
  7. # systemctl start memcached
  8. # systemctl start openstack-swift-proxy
  9. # tail /var/log/messages
  10. # systemctl enable memcached
  11. # systemctl enable openstack-swift-proxy
在Swift中管理物件
  • 利用 swift 可以查詢儲存空間
練習5:
  1. # cd /etc/swift
  2. # grep bind_port *.conf
  3. # cd 
  4. # ls -al /srv/node/
  5. # swift-ring-builder /etc/swift/account.builder
  6. # swift-ring-builder /etc/swift/container.builder
  7. # swift-ring-builder /etc/swift/object.builder
  8. # vim /etc/swift/proxy-server.conf
    [DEFAULT]
    bind_port = 8080
    [pipeline:main]
    pipeline = ... keystone ...
    [app:proxy-server]
    allow_account_management = true
    account_autocreate = true
    [filter:keystone]
    operator_roles = admin, SwiftOperator
    [filter:authtoken]
    paste.filter_factory = keystonemiddleware.auth_token:filter_factory
    admin_tenant_name = services
    admin_user = swift
    admin_password = redhat
    auth_host = 10.1.1.1
    auth_port = 35357
    auth_protocol = http
    signing_dir = /tmp/keystone-signing-swift
    auth_uri = http://10.1.1.1:5000
  9. # openstack-service restart swift
  10. # source /root/keystonerc_admin
  11. # keystone user-get swift
  12. # keystone role-list
  13. # keystone service-get swift
  14. # keystone catalog --service object-store
  15. # swift list
  16. # swift post c1
  17. # swift post c2
  18. # echo "hello" > data1.file
  19. # swift upload c1 data1.file
  20. # echo "hello2" > data2.file
  21. # swift upload c1 data2.file
  22. # head -c 1024 /dev/urandom > data3.file
  23. # swift upload c2 data3.file
  24. # swift list
  25. # swift list c1
  26. # swift list c2
  27. # find /srv/node/ -type f -name "*data"
  28. # find /srv/node/ -type f -name "*data" -exec file {} \;
  29. # cat /srv/node/z1d1/....
Swift物件儲存服務的除錯
練習6:

2015年12月8日 星期二

RHEL 的 OpenStack (四)--管理 Keystone 驗證服務

Keystone 驗證服務
  1. Keystone 包含的項目:
    • 租賃戶(Tenants)
    • 角色(Rules)
    • 使用者(Users)
    • 服務(Services)
    • 結束點(End points)
    • 分類 (Catalog)
    • 權杖 (Tokens)
  2. 增加服務到 Keystone 服務分類以及註冊結束點
    • # keystone service-create --name=SERVICENAME --type=SERVICETYPE --description="DESCRIPTION OF SERVICE"
    • ※PS: type 共有 identity , compute, network, image , object-store

    • # keystone endpoint-create --service-id SERVICEID --publicurl 'URL' --adminurl 'URL' --internalurl 'URL'
      ※PS: service-id 可由上一項指令取得!

    • # keystone service-list
  3. 移除服務以及結束點
    • # keystone endpoint-list
    • # keystone endpoint-delete ENDPOINTID
    • # keystone service-list
    • # keystone service-delete SERVICEID
  4. OpenStack 設定檔
    • # crudini --set /etc/keystone/keystone.conf DEFAULT admin_token abcdef1234567890
      1. Option: --set, --get, --del
      2. Configuration file : OpenStack configuration file 的位置
      3. Section : 設定檔內的項目名稱,如:[DEFAULT]
      4. Parameter : 設定用的參數
      5. Value : 參數值
練習1:RabbitMQ
  1. 登入 Keystone 主機
  2. 在 Keystone 服務中,啟用 Administrator 權力
    • # cat /root/keystonerc_admin
      export OS_USERNAME=admin
      export OS_TENANT_NAME=admin
      export OS_PASSWORD=redhat
      export OS_AUTH_URL=http://10.1.1.1:5000/v2.0/
      export OS_REGION_NAME=RegionOne
      export PS1='[\u@\h \W(keystone_admin)]\$'
    • # source /root/keystonerc_admin
  3. 檢查 Keystone 是否設定成 OpenStack 的服務
    • # keystone service-list | grep keystone
    • # keystone catalog --service identity
  4. 所有 OpenStack 的服務,其後端資料與訊息的設定值,應存放在 /etc/SERVICE_NAME/SERVICE_NAME.conf 檔案內!
    • # grep "connection=mysql" /etc/keystone/keystone.conf
    • # grep rabbit /etc/keystone/keystone.conf
  5. 可連進 mysql 資料庫,確認一下 Keystone 所使用的資料表格!
    • # mysql -e 'use keystone; show tables;'

使用 keystone 指令管理使用者
  1. keystone 指令可用來管理使用者
    • # source ~/keystonerc_admin
    • # keystone user-create --name USERNAME --pass PASSWORD
    • # keystone user-list
    • # keystone user-delete USERID
  2. 利用 keystone 指令來管理租賃戶
    • # keystone tenant-create --name TENANTNAME
    • # keystone tenant-list
    • # keystone tenant-delete TENANTID
  3. 角色也可以利用 keystone 來定義
    • admin: 擁有管理者權限的角色
    • member: 專案成員的角色
    • # keystone role-create --name Member
  4. 使用者連結租賃戶與角色
    • # keystone user-role-add --user-id USERID --role-id ROLEID --tenant-id TENANTID
  5. 其他 keystone 指令
    • # keystone help
    • # keystone help user-role-list

練習2:利用keystone指令管理使用者
  1. # source /root/keystonerc_admin
  2. # keystone user-list
  3. # keystone role-list
  4. # keystone tenant-list
  5. # keystone user-role-list --user admin --tenant admin
  6. # keystone user-create --name joe --pass redhat
  7. # keystone tenant-create --name test
  8. # keystone user-role-add --user joe --role _member_ --tenant test
  9. # keystone user-role-list --user joe --tenant test
  10. # vim ~/keystonerc_joe
    export OS_USERNAME=joe
    export OS_TENANT_NAME=test
    export OS_PASSWORD=redhat
    export OS_AUTH_URL=http://172.25.0.10:5000/v2.0/
    export OS_REGION_NAME=RegionOne
    export PS1='[\u@\h \W(keystone_joe)]\$ '
  11. # source ~/keystonerc_joe
  12. # keystone token-get

Keystone 認證服務的除錯

<<重點觀念>>
  • 所有到達不同OpenStack服務API的要求,必須流經由 Keystone 所提供的驗證與授權的過程!
  • 任何發自於使用者指令的工作要求,均會帶有帳號密碼驗證值、屬哪一租賃戶,以及驗證的URL值!
  • 一旦通過身份驗證的使用者,會取得由 Keystone 發給的權杖,進行管理操作!
  • 例:一使用者通過使用 Nova 的驗證後,若要由 Glance 服務來產生新的實體,則會在 Nove 服務上,用權杖向 Glance 請求一新的實體影像檔,來進行實體的建立!
  • 在除 Keystone 的錯誤時,無法使用 /root/keystonerc_admin 的權限!可經由下列方式,取得兩項權杖參數:
    • # export SERVICE_TOKEN=$(crudini --get /etc/keystone/keystone.conf DEFAULT admin_token)
    • # export SERVICE_ENDPOINT=http://demo.example.com:35357/v2.0
練習3:
  1. # source /root/keystonerc_admin
  2. # glance image-list  -->沒找到網頁,認證失敗
  3. # cat /root/keystonerc_admin
  4. # vim /root/keystonerc_admin
  5. # source /root/keystonerc_admin
  6. # glance image-list -->現在變成不合理的認證值
  7. # grep -i ERROR /var/log/glance/*  --> port 不是 35357
  8. # grep -i 35357 /etc/glance/glance-api.conf
  9. # vim /etc/glance/glance-api.conf
    auth_port=353572 --> 改成 35357
  10. # systemctl restart openstack-glance-api
  11. # glance image-list

RHEL 的 OpenStack (三)--管理 RabbitMQ 訊息肩客

管理 RabbitMQ 

  • Red Hat OpenStack 利用 RabbitMQ 訊息系統來進行各雲端元件的通訊!
  • RabbitMQ 通訊方式有兩種:
    1. 使用 SASL 方式:不管主機位置,只需要帳密即可!
    2. 使用 SSL 方式:避免在通訊過程中,被監聽、竊取資料!

練習1:確認 RabbitMQ 設定值內容

  • # grep AMQP  /root/answers.txt
  • # cat  /etc/rabbitmq/rabbitmq.config
  • # grep rabbit /etc/keystone/keystone.conf

RabbitMQ除錯方式

test

練習2:RabbitMQ除錯


  • # source  /root/keystonerc_admin
  • # nova service-list
  • # grep -i ERROR /var/log/nova/nova-scheduler.log
  • # systemctl status rabbitmq-server
  • # grep -i rabbit_port /etc/nova/nova.conf
  • # ss -nlp | egrep beam.smp
  • #grep -i RABBITMQ_NODE_PORT /etc/rabbitmq/rabbitmq-env.conf
  • # vim /etc/rabbitmq/rabbitmq-env.conf
  • 修改 RABBITMQ_NODE_PORT=3333 => 5672
  • # systemctl restart rabbitmq-server
  • # tail /var/log/nova/nova-scheduler.log
  • # nova service-list
  • # systemctl restart openstack-nova-compute






2015年12月7日 星期一

RHEL 的 OpenStack (二)--使用 Horizon Web 介面佈署


  • Horizon dashboard 是一個用來管理 OpenStack 平台的 web 介面!
  • Horizon Web 介面提供對每一個 OpenStack 專案 API 的通訊方式,用以取代 CLI 介面的操作

利用 Horizon 建立專案
  1. 登入 Horizon Web 介面
    • 登入網址:https://10.1.1.1/dashborard
    • 帳密: /root/keystonerc_admin 內的 OS_PASSWORD 或是 /root/answers.txt 內的 CONFIG_KEYSTONE_ADMIN_PW
    • 設定信任憑證後,即可使用!

  2. 設定安全存取方式:
    • 使用者帳密限制
    • 連線位置限制:
      設定檔: /etc/openstack-dashboard/local_settings 內的 ALLOWED_HOSTS 限定連線位置!
      參數: www.example.com , .example.com , *

  3. 專案工作:
    • 一個專案(Project)就是一個租賃戶(tenant),每個租賃戶都可以有數個使用者以及使用的資源!
    • 單一雲端系統中,每個專案或租賃戶是互不干擾!
    • 每一個租賃戶可以設定使用的資源限制!
    • 專案用於 web 介面,租賃戶用於 CLI 介面!所以,專案與租賃戶同意!

  4. 更換憑證或憑證失效問題:在 OpenStack 已被重裝的狀況下,使用舊憑證,會產生連結上的錯誤,所以,需要重新製作新的憑證,並重新載入 browser 中!
    1. 在 firefox browser 中,按下 Alt 鍵
    2. 選擇 Edit -> Perferences
    3. 選擇 Advanced 圖示後,選擇 Certificates 標籤
    4. 選擇 View Certificates 按鈕
    5. 在 Authorities 標籤內,找到 openstack CA 憑證,刪除...
    6. 在 Servers 標籤內,找到 openstack 相關憑證,刪除...
    7. 關閉 Prefences 視窗
    8. 再按 Alt 打開選單,選擇 History -> Clear Recent History ...,清除所有記錄
    9. 重新再接受新的憑證資料
練習1:在 Horizon 建立新專案

練習資料如下表:
參數名稱參數值
Nameproject1
DescriptionProject for project1
Quota4 vCPUs, 4 instances, 4096MB RAM, 2 floating IPs

解決步驟:
  1. 打開 firefox browser,連至 https://10.1.1.1/dashboard
  2. 輸入帳號:admin,密碼:redhat
  3. 找到 Identity 標籤(在網頁的最上方,有 Project / Admin / Identity) ,按下後,選擇 Projects 子標籤!
  4. 選擇 + Create Project 按鈕!
  5. Project Information 標籤下,輸入 Name以及 Description !
  6. 切換至 Quota 標籤下,設定相關資源,其它設定值不動!
  7. 按下 Create Project 按鈕即可!

在 Horizon 建立新的使用者
  1. 在 Horizon web 介面中,可新增、修改、刪除、查詢使用者
  2. 使用者角色預設有兩種:
    • 群組角色:附加於專案中
    • 管理者角色:管理雲端系統,有別於admin帳號!

練習2:在 Horizon 建立新專案

練習資料如下表:
參數名稱參數值
Usernameuser1
E-mailroot@servera.pod0.example.com
Passwordredhat
Primary projectproject1
Role_member_

解決步驟:
  1. 以 admin 帳號登入 https://10.1.1.1/dashborad
  2. 選擇 Identity 標籤,選擇 Users 子標籤
  3. 選擇 + Create User 按鍵
  4. 輸入上面表格資料
  5. 按下 Create User 按鍵

在 Horizon 管理風格(flavors)
  1. 在佈署新的實體(instance)之前,可先針對實體規格進行概要式的設定
  2. 實體中的參數包含 vCPU數量、記憶體大小、硬碟空間等規格!
練習3:在 Horizon 管理風格

練習資料如下表:
參數名稱參數值
Namem2.tiny
IDauto
vCPUs1
RAM MB1024
Root disk GB10
Ephemeral disk GB2
Swap disk MB512

解決步驟:
  1. 以 admin 帳號登入 https://10.1.1.1/dashborad
  2. 選擇 Admin 標籤,選擇 System 標籤,再選 Flavors 子標籤
  3. 在 m1.tiny 列,按下 Edit Flavor 按鍵,修改 Root Disk (GB) 空間值至 10GB ,再按下 Save 按鍵!
  4. 在同一 Flavors 子標籤下,按 + Create Flavor 按鍵!
  5. 輸入上表資料
  6. 再按下 Create Flavor 按鍵!
開啟新的實體(instance)
  1. 在產生新的實體之後,Horizon 可以開啟與管理這些實體
  2. 在啟動一個實體之前,需要針對實體進行設定:
    • 建立並且上傳影像檔,包含給實體用的作業系統與軟體
    • 設定安全群組(例:開啟防火牆的 port到實體,或在實體上啟動指定的服務)
    • 建立SSH 金鑰對(連進實體內用的)
    • 配置 IP 位置,讓外部網路可連到實體!
練習4:開啟新的實體(instance)

網路參數資料如下表:
參數名稱參數值
Private network nameprivate
Private subnet information
  • Subnet name: subpriv
  • Network address: 192.168.0.0/24
  • IP version: IPv4
Public network namepublic
Public subnet information
  • Subnet name: subpub
  • Network address: 10.1.1.0/24
  • IP version: IPv4
  • Gateway IP: 10.1.1.254
Public subnet detail
  • Enable DHCP:deselected
  • Allocation pools: 10.1.1.25, 10.1.1.99
Router namerouter1
External networkpublic
Router gatewaypublic
IP to allocate for the instance10.1.1.26
Security group namesec1
Security group descriptionWeb and SSH
Security group permissionsAllow SSH(TCP/22) and HTTPS(TCP/443) from CIDR 0.0.0.0/0, and HTTP(TCP/80) from the sec1 source group

實體參數資料如下表:
參數名稱參數值
SSH key pair namekey1
Image nameimage1
Image locationhttp://10.1.1.254/pub/images/small.img
Image formatQCOW2 - QEMU emulator
Image settingsNo minimum disk, minimum 512 MB RAM, public
Instance imageimage1
Instance namesmall
Instance flavorm1.tiny
Instance key pairkey1
Instance security groupsec1
Instance floating IP address10.1.1.26

卷冊(volume)參數資料如下表:
參數名稱參數值
Volume namemyvol1
Volume descriptionmyvol1 volume
Volume size2 GB
Volume snapshot namemyvol1-snap1
Volume snapshot descriptionmyvol1-snap1 snapshot

解決步驟:
  1. 以 user1 帳號重新登入 https://10.1.1.1/dashborad
  2. 設定網路參數:在實體被啟動之前,必須先設定好網路設定!
    • 設定私人網路
      1. 選擇 Project 標籤下的 Network 下拉式選單,再選擇 Networks 項目!
      2. 按下 + Create Network 按鈕!
      3. 輸入網路名稱:private ,再按下 Next 按鈕!
      4. 在 Subnet 步驟裡,輸入子網路名稱:subpriv、網路位址:192.168.0.0/24 以及 IP 版本名稱:IPv4
      5. 按下 Next 按鍵後,離開子網路細項設定,並按下 Create 按鈕!

    • 設定公眾網路
      1. 接續上一階段設定
      2. 按下 + Create Network 按鈕!
      3. 輸入網路名稱:public ,再按下 Next 按鈕!
      4. 在 Subnet 標籤裡,輸入子網路名稱:subpub、網路位址:10.1.1.0/24、IP 版本名稱:IPv4,以及 GateWay IP : 10.1.1.254
      5. 按下 Next 按鍵,進入子網路細項設定!
      6. 反勾選 Enable DHCP 後,在 allocation pool 中,輸入 10.1.1.25, 10.1.1.99!
      7. 離開子網路細項設定,並按下 Create 按鈕!

    • 設定路由
      1. 在 Network 標籤中,選擇 Routers 子標籤!
      2. 按下 + Create Router 按鈕!
      3. 輸入路由器名稱:router1 ,再按下 Create Router 按鈕!

    • 設定外部網路:只能由 admin 帳號進行設定
      1. 以 admin 帳號重新登入 https://10.1.1.1/dashborad
      2. 在最上方的選項中,選擇 System 標籤!
      3. 在列表中,按下 public 資料列的 Edit Network 按鈕!
      4. 勾選 External Network 項目,再按下 Save Changes 按鈕!

    • 將內部網路對應上外部網路
      1. 以 user1 帳號重新登入 https://10.1.1.1/dashborad
      2. 在最上方的 Admin 選項中,選擇 Project 標籤!
      3. 下拉 Network 選單,選擇 Routers 項目!
      4. 按下 router1 資料列 Set Gateway 按鈕!
      5. 在 External Network 選單中,選擇 public 項目,再按下 Set Gateway 按鈕!
      6. 按下 router1 的連結後,再按下 + Add Interface 按鈕
      7. 在 Subnet 選單中,選擇 private: 192.168.0.0/24 (subpriv)項目,再按下 Add Interface 按鈕
      8. 最後,需要驗證一下設定,是否兩邊的網路,都有連上路由器!在 Network 標籤下,選擇 Network Topology 子標籤!
      9. 檢查 private 與 public 兩段網路,是否有連上 router1

  3. 設定存取安全參數:建立浮動IP位址、安全群組與 SSH金鑰對
    1. 以 user1 帳號重新登入 https://10.1.1.1/dashborad
    2. 在最上方的 Project 選項中,選擇 Compute 下拉選單,之後,選擇 Access & Security 項目!
    3. 選擇 Floating IPs 標籤,並按下 Allocate IP to Project 按鈕!
    4. 在 pool 項目中,選擇 public,並且按下 Allocate IP 按鈕!
    5. 在 Access & Security 項目下,選擇 Security Group 標籤!
    6. 按下 +Greate Security Group 按鈕!
    7. 在 Name 項目中,輸入 sec1,在 descriptions 中,輸入 Web and SSH,再按下 Create Security Group 按鈕
    8. 在列表中,選擇 sec1 資料列,按下 Manage Rules 按鈕!
    9. 按下 + Add Rule 按鈕,在 Rule 下拉選單中,選擇 SSH,並且保留 Remote 以及 CIDR 預設值!
    10. 按下 Add 按鈕!
    11. 按下 + Add Rule 按鈕,在 Rule 下拉選單中,選擇 HTTPS,按下 Add 按鈕!
    12. 再做一次上述的步驟,只是換成選擇 HTTP 項目!在 Remote 項目中,下拉選擇 Security Group 項目,在 Security Group 中,選擇 sec1 (current)項目,並且設 Ether Type 為IPv4,再按下 Add 按鈕!(來源來自 sec1 時,做這樣子的改變!)
    13. 回到 Compute 標籤下,選擇 Access & Security 子標籤!
    14. 選擇 Key Pairs 項目,並且按下 +Create Key Pair 按鈕!
    15. 在 Key Paris Name 中,輸入 key1 ,並且按下 Create Key Pair 按鈕
    16. 在跳出視窗中,選擇 Save File 選項,並按下 OK 按鈕,以便存下 key1.pem 檔案!
    17. key1.pem 檔案應存放在 Downloads 目錄下!

  4. 建立實體
    1. 使用 Compute 標籤,再選擇 Images 子標籤!
    2. 按下 + Create Image 按鈕,在 name 欄位中,輸入 images1 !在 Image Location 欄位中,輸入下載系統影像檔的網址!
    3. 設定影像檔的格式是 QCOW2 - QEMU Emulator ,並且按下 Create Image 按鈕!(等到 active 為止)
    4. 檢查主機是否支援巢狀式虚擬化技術: # ls /dev/kvm !如果有該檔案,表示可以使用巢狀式虚擬化技術!(下一步驟是開始 kvm 的方式,如果沒有,就跳過下一步驟)
    5. 修改 /etc/nova/nova.conf 檔案內容:
      virt_type=kvm =>可用指令改:crudini --set /etc/nova/nova.conf libvirt virt_type kvm
      #openstack-service restart nova
    6. 使用 Compute 下的 Instances 子標籤!
    7. 按下 Launch Instance 按鈕!在 Details 標籤中,輸入 Instance Name 為 small ,並且選擇 m1.tiny Flavor !
    8. 在 Instance Boot Source 下拉式選單中,選擇 Boot from images 項目
    9. 選擇 images1 做為 Image Name
    10. 在 Access & Security 標籤中,確認金鑰對是 key1!
    11. 選擇 sec1 為 security group ,反勾選 default security group
    12. 在 Networking 標籤中,按下 + 按鈕到 private 網路
    13. 按下 Launch 按鈕
    14. 當 small 項目列表中的 Status 為 Active 時,即可按 Actions 內的下拉選單,選擇 Associate Floating IP
    15. 在 IP Adress 欄位中,選擇 10.1.1.26,並且在 Port to be associated 欄位中,選擇 small: 192.168.0.2,按下 Associate 按鈕!
    16. 在 small 項目中,在 small名稱上按右鍵,選擇 Open Link in New Tab
    17. 在 firefox 新的標籤中,選擇 Console 標籤,再按下 Click here to show only console 的超連結,並且同意接受憑證!
    18. 可利用 ssh 到 10.1.1.26 主機中!
      # ssh -i Downloads/key1.pem root@10.1.1.26
      # ssh -i Downloads/key1.pem cloud-user@10.1.1.26
    19. 可以利用 ping 的方式,ping 一下已經啟動的實體!(應該 ping 不到,該要如何處理?)

  5. 增加儲存卷冊:增加logical volume、快照以及附加卷冊給實體!
    1. 在 Compute 下拉選單中,選擇 Volumes 子標籤,並按下 + Create Volume 按鈕
    2. 輸入 Volume Name 為 myvol1 ,description 欄位內,輸入 myvol1 volume,size 為 2GB!其他保留預設值,按下 Create Volume 按鈕
    3. 建完 volume 之後,即可建立快照!在 Volumes 標籤中,在 Actions 欄位中,下拉選單,選擇 Create Snapshot!
    4. 在 name 欄位中,輸入 myvol1-snap1 ,在 description 欄位內,輸入 myvol1-snap1 snapshot ,按下 Create Volume Snapshot 按鈕!
    5. 附加 volume 到執行中的實體!前往 Volumes 標籤,下拉 Actions 欄位內的選單,選擇 Edit Attachments 項目!
    6. 在 Attach to Instance 欄位中,下拉選擇 small 實體,再按下 Attach Volume 按鈕!
    7. 使用 ssh 登入 small 實體,利用 lsblk 查看硬碟空間!

  6. 移除方式
    1. 在 Instances 子標籤中,勾選 small 項目,按下 Terminate Instances 按鈕
    2. 在彈出式視窗中,再按下 Terminate Instances 按鈕,進行確認
    3. 切換至 Volumes 標籤,選擇 Volume Snapshots 標籤!勾選快照項目,按下 Delete Volume Snapshots 按鈕!
    4. 在彈出式視窗中,再按下 Delete Volume Snapshots 按鈕,進行確認
    5. 回到 Volumes 標籤,勾選券冊項目,按下 Delete Volumes 按鈕!
    6. 在彈出式視窗中,再按下 Delete Volumes 按鈕,進行確認
Horizon Dashboard的除錯
 

RHEL 的 OpenStack (一)--利用 PackStack 安裝OpenStack

使用 PackStack 套件:
  1. 使用 answer file 方便管理者,利用安裝器設定系統參數
  2. 使用指令:packstack
    • --gen-answer-file:可產生 answer file
    • --answer-file:可將 answer file ,送給安裝器,以利於安裝 OpenStack!
    • -d:安裝過程除錯!
    • 安裝過程中,如果有錯誤,在除錯完成之後,應重新執行 pactstack !
  3. 記錄檔:
    • /var/tmp/packstack*/
    • /var/log/messages
    • /var/log/yum.log

最低硬體需求:

<Cloud Controller Node>
  • CPU:64-bit X86 Intel-VT or AMD-v
  • Memory:2GB
  • HDD:100GB
  • NIC:GigaEthernet*2

<Compute Node>
  • CPU:64-bit X86 Intel-VT or AMD-v
  • Memory:2GB
  • HDD:50GB
  • NIC:GigaEthernet*2

<Ceph Storage Node>
  • CPU:64-bit X86 Intel-VT or AMD-v
  • Memory/HDD:per 1TB disk space / mininum 1GB RAM
  • NIC:GigaEthernet*2
※PS:練習時,至少二部電腦!一部為 Cloude Controller ,別一部為 Nova compute node !

PackStack answer file 參數表:
參 數說 明
CONFIG_HEAT_INSTALL=y安裝/啟動 Heat Orchestration 服務!需要設定密碼,以及開啟其他項服務!
CONFIG_NTP_SERVERS=10.1.1.1指定NTP伺服器,用來同步時間!
CONFIG_KEYSTONE_ADMIN_PW=redhat設定 keystone 管理者 admin 密碼!
CONFIG_DEFAULT_PASSWORD=redhat針對所有出入口設定相同的密碼!
CONFIG_CINDER_VOLUMES_CREATE=n是否建立Cinder 中的Volume  Group ,用來作為檔案式的儲存媒介!
CONFIG_LBAAS_INSTALL=y是否開啟利用 Packstack 來設定 Neutron 中的 Load-Balancer as a Service!
CONFIG_NEUTRON_METERING_AGENT_INSTALL=y設定 Neutron metering agent,使得 Neutron 資訊可送進Ceilometer telemetry 服務
CONFIG_NEUTRON_FWAAS=y是否開啟 Neutron 設定 Firewall as a Service!
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vlan設定 Neutron ML2 插入的驅動程式!如果有多個項目,可用逗號分開!
CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vlan設定 Neutron ML2 租戶的網路類型!如果有多個項目,可用逗號分開!
CONFIG_NEUTRON_ML2_VLAN_RANGES=physnet1:1:1000設定 Neutron 使用的 Vlan 範圍!如果有多個項目,可用逗號分開!
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-eth1設定實體網路介面對應至 Neutron OVS 橋接網路!
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-eth1:eth1設定 Neutron OVS 橋接網路至實體網路介面!
CONFIG_HEAT_CFN_INSTALL=y是否將PackStack安裝設定 Heat CloudFormation API!
CONFIG_HORIZON_SSL=y為 Horizon 啟動 SSL !
CONFIG_PROVISION_DEMO=n是否提供展示或測試!
CONFIG_SWIFT_INSTALL=n是否安裝/啟動Swift儲存服務!

Open vSwitch 設定:

  • OpenStack 以驅動程式形態,支援 Open vSwitch 功能!
  • OpenStack 常用的兩種橋接網路形態:
    1. br-int:integration bridge 專用於對進出實體的網路封包,執行 Vlan 貼標籤或不貼標籤功能!
    2. br-ex:external bridge 專用於對進出實體的額外網路封包,按規定路徑遞送!
  • 範例:假設 eth0 是 br-ex 的一個 port ,而且有對外連接!

    所以,需新增設定檔:/etc/sysconfig/network-scripts/ifcfg-br-ex
    DEVICE=br-ex
    DEVICETYPE=ovs
    ;;宣告該硬體使用 Open vSwitch
    TYPE=OVSBridge ;;宣告該硬體為 OVS 橋接器
    BOOTPROTO=static
    IPADDR=172.25.0.10
    NETMASK=255.255.255.0
    GATEWAY=172.25.0.254

    網路卡 eth0 設定檔:/etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    ONBOOT=yes

    TYPE=OVSPort ;;宣告該硬體為 OVS 橋接器上的一個 port
    DEVICETYPE=ovs
    OVS_BRIDGE=br-ex ;;宣告該硬體附屬在哪一個 OVS 橋接器上

  • ※PS:使用 RHEL OpenStack 平台時,必須關閉 NetworkManager 服務,改用 network 服務!

  • 設定完成,需要重新啟動 network 服務!
    # systemctl restart network.service

    利用下列指令來檢查
    # ovs-vsctl show

    如果有錯誤,會顯示無網路,請確認設定檔內的設定是否無誤!接下來可刪除錯誤的 bridge !
    # ovs-vsctl del-br eth0


練習1:利用 OpenStack 安裝 Control Node!
  1. # yum install openstack-packstack
  2. # packstack -h | less
  3. # packstack --gen-answer-file /root/answers.txt
  4. # vim /root/answers.txt
    需修改的項目如上表所列!
  5. # packstack --answer-file /root/answers.txt

    ※PS
    :這步驟執行完,將提示下列資訊:
    1. 建立 /root/keystonerc_admin,並提醒你要去公告這個檔案!
    2. 記得修改 /etc/httpd/conf.d/ssl.conf 檔案內的憑證檔目錄位置!
    3. OpenStack DashBoard : https://10.1.1.1/dashboard,帳密在 /root/keystonerc_admin 內
    4. Nagios : http://10.1.1.1/nagios, username : nagiosadmin , 密碼則是一大串
    5. 安裝的相關記錄檔目錄:/var/tmp/packstack/

  6. # openstack-status
  7. # cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/
  8. # cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/networkk-scripts/ifcfg-br-ex
  9. # vim /etc/sysconfig/network-scripts/ifcfg-br-ex
  10. # vim /etc/sysconfig/network-scripts/ifcfg-eth0
  11. # systemctl restart network.service
  12. # ovs-vsctl show
  13. # hostnamectl set-hostname servera.pod0.example.com

練習2:利用 OpenStack 新增一個 Compute Node!

  1. # vim /root/answers.txt
    修改:
    CONFIG_COMPUTE_HOSTS=10.1.1.1, 10.1.1.2
  2. # packstack --answer-file /root/answers.txt
    ※PS1:記得要先開 10.1.1.2 這部機器,並且開放 root 可以 ssh 連線!
    ※PS2:這一步驟也要一些時間(重新運作)!
  3. # ssh serverb

參考資料:
  1. http://www.server-world.info/en/note?os=CentOS_7&p=openstack_kilo2&f=12
  2. https://openstack.redhat.com/install/quickstart/
  3. https://access.redhat.com/articles/1127153

課後Lab:利用 RDO 網站上的 PackStack 來安裝 OpenStack

參考網址:
  1. https://www.rdoproject.org/install/quickstart/
  2. http://www.flashguides.co.uk/guide/Installing_OpenStack_Kilo_on_CentOS_with_Packstack
  3. http://www.server-world.info/en/note?os=CentOS_7&p=openstack_kilo2&f=12

2015年12月3日 星期四

RHEL7 網路指令

RHEL 7 的網路設定:使用 NetworkManager 套件

  • 網路卡名稱:
    1. 網卡類型:
      • en : Ethernet 網路卡
      • wl : Wireless (WiFi)網路卡
      • ww : Wireless WAN 網路卡(3G、4G LTE) 
    2. 插槽名稱:
      • o : on-board 網路卡
      • s : 可熱抽拔插槽 (slot)
      • p : PCI 插槽配置位置 
    3. 順序號碼:
      • 通常從 0 開始數起,但是嵌在主機板上的 on-board 裝置則是從 1 開始!
  • 例1: enp0s2 : 在第一個 PCI 位置上第三個插槽上的乙太網路卡!
    例2: eno1 : 第一個on-board 的網路卡
    ※PS:如有安裝 biosdevname 套件,或是設定 udev 客製化名字,可改變網路卡名稱!

  • 網路設定相關檔案:
    1. 網路設定檔儲放目錄:/etc/sysconfig/network-scripts
    2. 設定檔 ifcfg-xxxx
      • BOOTPROTO=none | static | dhcp
      • IPADDR0=192.168.1.5
      • PREFIX0=24
      • GATEWAY0=192.168.1.254
      • DEFROUTE=yes
      • DNS1=8.8.8.8
      • DEVICE=eth0
      • NAME="System eth0"

  • 網路設定相關指令:
    1. Gnome 圖形介面設定:
    2. nmtui 指令:文字模式下的選單操作介面
    3. nmcli 指令:標準文字操作指令
      <顯示、查詢方式>
      • #nmcli con show :顯示所有網路介面清單!
        --active :只顯示活(啟)動中的網路介面!
        "enp0s2" :顯示指定介面所有相關的設定參數!
      • #nmcli dev status :顯示網路介面卡硬體連線狀態!
        "enp0s2" :顯示指定介面所有相關的硬體設定參數!

      <新增網路連結方式>
      例:新增一個網路連結(需要先有網路卡)
      1. #nmcli con add con-name "default" type ethernet ifname eth0
        表示新增一網路連結,名為:"default",使用 eth0 乙太網路卡,IP 位址使用DHCP模式!

      2. #nmcli con add con-name "static" ifname eth0 autoconnect no type ethernet ip4 192.168.1.10/24 gw4 192.168.1.254
        表示新增一網路連結,名為:"static",使用 eth0 乙太網路卡自動連結網路!IP 位址是 192.168.1.10,預設閘道為 192.168.1.254,不使用DHCP模式!

      3. #nmcli con up "default" :表示啟動 "default" 這個網路連結!(會進行 DHCP 運作)

      4. #nmcli con up "static" :表示啟動 "static" 這個網路連結!

      ※PS:在相同介面下,如果靜態連結啟動失敗,則將會轉換成自動連結狀態!如果想取消這種運作模式,請使用 #nmcli dev disconnect eth0!
      ※PS:查詢相關參數方式 #nmcli con add help !

    4. <修改網路連結方式>
      1. #nmcli con mod "static" connection.autoconnect no
        關閉自動連結!
      2. #nmcli con mod "static" ipv4.dns 192.168.1.10
        指定 DNS Server!
      3. #nmcli con mod "static" +ipv4.dns 192.168.1.100
        利用+/- 符號來增加、減少設定!
      4. #nmcli con mod "static" ipv4.addresses "192.168.1.5/24 8.8.8.8"
        取代原來的IP、Gateway 設定值!
      5. #nmcli con mod "static" +ipv4.addresses 10.1.1.1
        追加一個新的 IP位址,但沒有設定 Gateway !!
      ※PS:記得修改完後,請使用 #nmcli con up "static"

    <nmcli 指令總結>
    指令名稱說 明
    nmcli dev status
    nmcli con show
    nmcli con up "connection ID"
    nmcli con down "connection ID"
    nmcli dev dis "device name"
    nmcli net off
    nmcli con add ...
    nmcli con mod "connection ID"
    nmcli con del "connection ID"

  • 網路測試相關指令:
    1. ip 指令
      • #ip address show eth0:顯示網卡 eth0 的 IP 位址。
      • #ip -s link show eth0:顯示網卡 eth0 MAC層的相關資料,並統計傳送(Tx)與接收(Rx)封包數量、大小等相關訊息。
      • #ip route:顯示目前網路的路由設定。

    2. ping 指令
      • #ping -c3 192.168.1.5 :表示要送 ICMP 封包三次給指定的 IP!

    3. traceroute、tracepath 指令
      • #tracepath access.redhat.com :表示要追踪到指定站台之間,所經過的IP或是介面名稱!
        -I:指定用 ICMP 封包送!
        -T:指定用 TCP 封包送!
        不指定,表示使用 UDP 封包!

    4. ss 指令:類似 netstat 指令
      • #ss -ta :表示顯示本機 socket 的統計!可顯示、統計網路 IP 位址與對應 port 的連線情形!
        參 數說明
        -n 以數字來取代介面名稱與 port 號!
        -t 顯示使用 TCP 的 socket !
        -u 顯示使用 UDP 的 socket !
        -l 只顯示監聽中的 socket !
        -a 顯示所有的 socket !
        -p 顯示 socket 執行序的 ID 號碼!