爲了方便雲平臺的開發測試,現提供安裝腳本方便在一臺獨立宿主機上安裝所有云平臺組件並運行使用。此安裝過程將部署一個包含keystone(身份認證), glance(虛擬機鏡像管理), region(雲控制器), vncproxy(VNC代理), host(宿主機服務器), zone(數據中心服務器), meter(使用量統計)和ELB(彈性負載均衡) 等組件的完整雲平臺。創建的虛擬機將從10.0.233.0/24子網中分配虛擬機地址,並把本宿主機作爲缺省網關。
本文步驟目前僅適用於Ubuntu server 12.04 precise LTS和CentOS 6.x。建議宿主機配置2G以上內存,10G以上空閒硬盤空間。
新建一個用戶,使用普通用戶登錄,不要用root用戶(也不可以root登陸再su成其他用戶!),需要root權限時,使用sudo執行,執行以下步驟。儘量保證系統環境乾淨,不要設置特殊命令或環境變量,比如alias grep='grep -n',這樣可能導致安裝時腳本提取系統數據出錯。
PS:執行以下步驟前保證已完成將該機器的公鑰信息添加到自己的三快賬號中,否則無法通過ssh clone源代碼。具體操作參見 SSH KEYS
PS:如果不想添加公鑰,可以將使用https的方式進行clone
PS:ubuntu 14.0 部署失敗,儘量使用centos 6.5:)
辦公雲先裝好Percona MySQL再裝all in one,避免坑..
1. 下載部署雲平臺軟件包
直接git下載最新代碼
git clone ssh: //[email protected]/sa/cloud.git 或者 git clone http: //<your git name>@git.sankuai.com/scm/sa/cloud.git cd cloud |
最新版本代碼可能沒有在原有allinone上進行修改,可以切回到歷史版本進行嘗試。
git checkout release/<old version> |
2. 準備軟件環境
有些依賴安裝被改動過,應該首先確認安裝腳本的正確性。
在 ./contrib/host_install 中,去掉如下兩行的註釋。
# /bin/bash ./qemu_install $ 1 # /bin/bash ./openvswitch_install |
在 /meituan/scripts/devstack/requires_rpm.txt 中,去掉mysql-server
mysql-server |
進入cloud/meituan/scripts/devstack目錄,執行 ./allinone_prepare.sh,將安裝所有云平臺需要的軟件包。
建議修改源來提高速度,apt或者yum源可以參考辦公雲的虛擬機,pip源可以用豆瓣的
cd meituan/scripts/devstack ./allinone_prepare.sh |
pip源配置,修改配置文件~/.pip/pip.conf(如果文件不存在,則自己創建)
[global] index-url = http: //pypi.douban.com/simple |
執行./allinone_prepare.sh時會提示進行update,選擇y,按提示進行sudo apt-get update和sudo apt-get -y upgrade(不要dist-upgrade)。然後重啓電腦,重啓電腦之後還要執行一次./allinone_prepare.sh(選擇N),之後再進行其他操作。
PS:如果在執行allinone_prepare.sh腳本時報無法安裝mysql,可先手動安裝 sudo yum install Percona-Server-server-55.x86_64 然後再重新執行,對應的init.d文件也變爲 /etc/init.d/mysql start
PS:對於centos:
1. ./allinone_prepare.sh報錯,刪除remi-mirror.repo後重新執行allinone_prepare.sh
2. 自行安裝數據庫 sudo yum install Percona-Server-server-55.x86_64
- 安裝完Percona-Server之後,需要初始化mysql數據庫 `mysql_install_db --user=mysql --ldata=/var/lib/mysql`
- 啓動mysql服務 . sudo service mysql start
- 啓動服務後執行mysql_secure_installation,按照操作進行
3.如果是辦公雲的CentOS虛擬機搭建的all in one,會因內核過舊無法啓動host服務的nbd模塊,需要去 http://repos.sankuai.com/cloud/6/x86_64/ 安裝20150611版本的3個內核補丁和nbd模塊,例如 rpm -i http://repos.sankuai.com/cloud/6/x86_64/kernel-2.6.32-431.20.3.el6.mt20150611.x86_64.rpm
如果是CentOS且allinone_prepare.sh安裝了mysql-server,則需要手動啓動mysql服務器。
sudo /etc/init.d/mysqld start sudo chkconfig --level 2345 mysqld on # 讓mysqld下次重啓時自動啓動 |
(*)如果是初次啓動,則需要設置mysql服務器的root密碼:
/usr/bin/mysqladmin -u root password <mysql_root_password> |
3. 配置環境變量
3.1 配置已安裝的Mysql的root密碼:
export MYSQL_ROOT_PASS=<mysql_root_password> |
這裏假設mysql服務器已經正確安裝到本地,且監聽在127.0.0.1:3306端口
3.2 配置虛擬機網卡綁定的物理網絡接口[可選]
默認爲eth0,如果需要更改,可以通過環境變量指定
export INTERFACE=eth1 |
3.3 配置虛擬網橋驅動[可選]
默認爲openvswitch,如果需要更改爲Linux bridge,則可以通過環境變量指定。
export BRIDGE_DRIVER=bridge |
3.4 配置虛擬機網絡地址[可選]
指定虛擬機網卡的網絡地址,默認爲10.0.233.0/24網段,可以通過環境變量指定
export PRIVATE_NET= 10.1 . 1 |
3.5 配置REGION[可選]
指定雲平臺的區域名稱,默認爲"LocalTest",可以通過環境變量指定
export REGION=Test |
3.6 使配置生效
執行./allinone_conf.sh
export SYSTEM_ADMIN_EMAIL=XX @XX .com export MEITUAN_EMAIL_ACCOUNT=emailacount export MEITUAN_EMAIL_PASSWORD=secret ./allinone_conf.sh |
按提示填寫email,account,passwd信息
如果遇到網關問題,利用route -n查看,del命令刪除重複網關條目
route -n route del -net <ip> gw <gw> |
隨後再執行./allinone_conf.sh
4. 自動安裝配置
確認MySQL服務器已運行,然後執行
./allinone_setup.sh |
應該啓動的服務有 'meteradmin networkadmin swift vncadmin regionadmin glance notifyadmin dnsupdateadmin bdadmin netmapwriteradmin sshrelay keystone netmapproxyadmin billingadmin elbadmin vrouteradmin schedadmin'
setup之後可能有些服務並沒有啓動成功,需要手動啓動。
5. 使用climc客戶端
5.1 準備客戶端運行環境
首先導入start_admin_client_shell創建客戶端的運行環境
source start_admin_client_shell |
5.2 測試climc命令
然後,執行climc命令,例如
climc image-list (查看磁盤鏡像列表) climc server-create --disk cirros- 0.3 . 0 -x86_64-disk.img --mem 64 --allow-delete test (創建磁盤模板爲cirros- 0.3 . 0 -x86_64-disk.img,內存64MB,主機名爲test的虛擬機,並允許刪除該虛擬機,注:默認情況下cirros鏡像的用戶名爲cirros,密碼爲cubswin:),debian鏡像的用戶名爲root,密碼可以通過server-password server-name查看) climc server-list (查看虛擬機列表) climc server-start test (啓動虛擬機) climc vnc-connect test (獲得訪問虛擬機VNC的URL) |
5.3 停止和關閉服務
使用cloud/meituan/scripts下的相關命令啓動和停止相關服務,例如
./cloud_control start (啓動所有服務) ./cloud_control stop (停止所有服務) ./elb_start (啓動ELB服務) ./elb_stop (停止ELB服務) |
6. 卸載雲平臺
執行./allinone_teardown.sh
./allinone_teardown.sh |
7. 開發常見問題和解決
問:如果系統出現錯誤怎麼辦?
答:第一步是檢查各個服務對應的進程是否還活着(ps aux | grep python),可以試着全部停止並重新啓動(./cloud_control stop ; ./cloud_control start)。第二步是檢查各個服務對應的日誌。如果還是不能定位和解決問題,可以卸載雲平臺並且重新安裝。
問:虛擬機啓動的時候出現start_fail怎麼辦?
答:刪掉start_fail對應的虛擬機,並且殺掉系統中的qemu進程。
問:如何拿到keystone對應的token?
答:參看以下代碼,其中username和password爲對應的用戶名和密碼,sysadmin的密碼可以查看OS_PASSWORD環境變量得到(或者看看cloud/workspace/rc_admin有木有)
curl -d '{"auth":{"passwordCredentials":{"username": "sysadmin", "password": "password"}}}' -H "Content-type: application/json" http: //ip:5000/v2.0/tokens |
問:使用centos作爲宿主機時,啓動host_server提示缺少nbd模塊怎麼辦?
答:使用 uname -r 看下內核版本,cloud/contrib/kernel_modules/centos 下新建個該內核版本的文件夾,然後把其他任意內核文件夾中的nbd.ko 拷貝進去,然後執行一下 cloud/contrib/kernel_install,重新執行./allinone_setup.sh
問:setup keystone server時,出現無法找到workspace/keystone中的相關文件怎麼辦?
答:可能是keystone_prepare_package腳本沒有執行成功,手動執行cloud/meituan/scripts/keystone_prepare_package腳本。
問:setup zone server時,出現Fail to create role admin,異常信息爲keystoneclient.apiclient.exceptions.Unauthorized: The request you have made requires authentication. (HTTP 401),應該怎麼辦?
答:可能是keystoneclient版本的問題,keystoneclient的版本應該爲0.6.0;按照以下步驟完成(也可以通過pip來安裝keystoneclient,pip install 'python-keystoneclient==0.6')
$pip uninstall python-keystoneclient $cd cloud/contrib/python_packages/stage1 && tar -xvf python-keystoneclient- 0.6 . 0 .tar.gz $cd python-keystoneclient- 0.6 . 0 && sudo python setup.py install $cd - && rm -rf python-keystoneclient- 0.6 . 0 |
問:python-keystoneclient安裝失敗,./allinone_prepare.sh過程中發現安裝Python包oslo.config時,出現版本衝突
答:此問題由於pip解析依賴關係的策略導致。python-keystoneclient要求pbr<1.0,oslo.config>=1.11.0. pip先安裝了pbr==0.11.0,而後安裝oslo.config==2.0.0的要求pbr>=1.3,因此導致安裝失敗。
可手工安裝oslo.config以規避此問題
sudo rm -rf /tmp/pip-build-root/oslo.config sudo pip install -v oslo.config== 1.11 . 0 |
問:啓動swift後(也就是執行startmain),出現錯誤:Exception: Could not bind to 0.0.0.0:8080 after trying for 30 seconds
答:應該有其他進程使用了該8080端口,使用netstat -nplt | grep 8080查看,將相應的進程終止即可;但是,這種情況通常是由於上次已經啓動了swift,且在沒有終止swift服務的情況下執行startmain造成的,可以使用以下命令將相關swift進程終止運行。
$ps aux | grep swift | grep -v grep | awk '{print $2}' | xargs -n 1 sudo kill |
問:通過swift客戶端使用swift服務時,出現錯誤:Unauthorised. Check username, password and tenant name/id。
答:首先檢查用戶名、密碼和tenant是否正確,並且該用戶是否屬於該tenant;然後檢查該用戶所綁定的role是否正確,allinone版本的swift只能處理admin和swiftoperator這兩種role的請求。
問:安裝swift的過程中,出現錯誤:ImportError: No module named keystone.middleware.s3_token
答:這個應該是在安裝swift之前沒有將keystone安裝到系統目錄下,請按照8.1中的第一步來安裝。
問:allinone_prepare執行時出現錯誤,無法安裝greenlet
答:這個應該是沒有安裝python-devel包
問:如何設置keystone 關聯用戶中心?
答:關聯辦公雲:
#辦公雲 [tandem] secondary = keystone.identity.backends.ldap_ro.Identity primary = keystone.identity.backends.sql.Identity |
關聯線下用戶中心:
[tandem] primary = keystone.identity.backends.sql.Identity secondary = keystone.identity.backends.mt_passport.Identity [mt_auth] server_uri = http: //open.ljmt.dev.sankuai.com |
問:關聯用戶中心後,無法從界面登錄如何處理?
答:查看日誌,會發現這樣的 log:
Internal Server Error (HTTP 500 ): An unexpected error prevented the server from fulfilling your request. (ProgrammingError) ( 1146 , "Table 'keystone.mt_user_cache_tbl' doesn't exist" ) 'SELECT mt_user_cache_tbl.id AS mt_user_cache_tbl_id, mt_user_cache_tbl.name AS mt_user_cache_tbl_name, mt_user_cache_tbl.email AS mt_user_cache_tbl_email, mt_user_cache_tbl.mobile AS mt_user_cache_tbl_mobile, mt_user_cache_tbl.extra AS mt_user_cache_tbl_extra \nFROM mt_user_cache_tbl \nWHERE mt_user_cache_tbl.name = %s OR mt_user_cache_tbl.email = %s OR mt_user_cache_tbl.mobile = %s \n LIMIT %s ' (' rex002 ', ' rex002 ', ' rex002', 1 ) [ 2015 - 04 - 16 17 : 48 : 33 , 312 ][p14539][ERROR] [/Users/rex/git/cloudpub/cloudpub/mt_unified_backend.py: 47 ] error MTUnifiedBackend 'NoneType' object has no attribute 'get' rex002 |
這是由於沒有正確初始化 keystone 數據庫所致。可以這樣 workaround 一下:
# 進入 keystone 所在數據庫 USE keystone; SHOW TABLES; CREATE TABLE mt_user_cache_tbl (id VARCHAR( 64 ) NOT NULL PRIMARY KEY, name VARCHAR( 64 ), email VARCHAR( 64 ), mobile VARCHAR( 64 ), extra TEXT); DESC mt_user_cache_tbl; |
問:執行billing_conf時,訪問的url錯誤,或者提示連接Mysql失敗(用戶名密碼錯誤)如何修改?
答:修改配置文件:/opt/cloud/workspace/globalrc
問:在進行server-delete時遇到Virtual server is locked, cannot delete怎麼解決?
答:
使用server-update --delete enable修改機器狀態,再執行server-delete
如果執行完狀態變爲delete-fail,先看一下host服務是否啓動,如果沒有啓動,先啓動host服務
如果啓動host服務失敗,提示Exception: ('loint not exists', 'loint not exists'),那麼是單機版環境沒有添加網卡導致,在scripts目錄裏執行allinone_setup_net.sh
重啓host服務,執行server-delete,ok
問:在使用climc時,無論調用什麼命令都報401 Not Authorized user / password
答:記得在climc之前先source /opt/cloud/workspace/rc_admin
問:在allinone_setup或cloud_control start時,報xxx服務啓動失敗怎麼辦?
答:有兩種辦法可以看原因:1. 使用【screen -r xxx-srv】查看screen裏啓動服務的日誌。2. 進入目錄【/opt/cloud/workspace/logs/xxx】下面查看具體服務的日誌
問:創建的機器顯示 sche_fail ,如何解決?
答:release/1.1.6的版本起,network服務從region中拆除(代碼倉庫獨立),請參考此文檔。cloud release 1.1.6版本後支持allinone問題
問:在執行allinone_setup.sh過程中遇到Failed to start keystone怎麼解決?
答:先將devstack目錄下requires.txt 和requires_rpm.txt中的mysql-server註釋掉,然後在allinone_prepare.sh DONE!後根據上文手動安裝mysql。
問:遇到climc wire-create-network提示argument --type is required錯誤,導致安裝後的network_list結果爲空怎麼辦?
答:在將devstack目錄下的lib文件中找到./climc wire-create-network的兩行命令,在其後加上--type guest,重試即可。
問:在導入數據庫和建表時,出現 Cannot add foreign key constraint 錯誤時,怎麼解決?
答:在數據庫中使用 set foreign_key_checks = 0 命令,再重新執行./allinone_setup.sh。
8. CentOS 7.0 安裝嘗試(備忘錄)
allinone_config.sh裏的ifconfig顯示結果和舊版本不一致, inet addr -> inet
yum install mysql-server無法直接安裝好數據庫
tunctl 包沒有
sudo
yum
install
tunctl.x86_64
不使用公司的centos repo源,改成centos官方的(163的http://mirrors.163.com/.help/centos.html),從一個乾淨的centos7開始搞!
同樣epel的源也要改成官方的,或者第三方的(http://blog.csdn.net/user_friendly/article/details/8773417)。
mariadb數據庫配置參考:https://www.vultr.com/docs/install-mariadb-on-centos-7