本發(fā)明涉及云資源同步;具體而言,涉及一種cmdb云資源同步方法及系統(tǒng)。
背景技術(shù):
1、云資源同步(cloud?resource?synchronization)是指在云計(jì)算環(huán)境中,保證不同云環(huán)境、不同區(qū)域和不同服務(wù)之間的資源和數(shù)據(jù)一致性的關(guān)鍵操作。云資源同步可涉及多種資源類型,包括存儲、數(shù)據(jù)庫、虛擬機(jī)、配置文件等。云資源同步包括以下幾種情況:
2、1、數(shù)據(jù)同步,在不同存儲位置之間保持?jǐn)?shù)據(jù)的一致性。這通常涉及將數(shù)據(jù)從一個(gè)位置復(fù)制到另一個(gè)位置,并確保兩個(gè)位置的數(shù)據(jù)保持同步。
3、2、配置同步,在不同環(huán)境或服務(wù)之間保持配置文件的一致性。這對于保證不同環(huán)境(如開發(fā)、測試、生產(chǎn))之間的行為一致非常重要。
4、3、應(yīng)用程序同步,在不同位置或服務(wù)實(shí)例之間保持應(yīng)用程序狀態(tài)和代碼的一致性。
5、傳統(tǒng)的云資源同步的方法主要是通過api?key(api密鑰),單向同步云平臺上的主機(jī)資源和云區(qū)域信息。然而,現(xiàn)有的該云資源同步方法存在云資源管理更新不及時(shí),信息不準(zhǔn)確的缺點(diǎn)問題,增加了人力維護(hù)成本,云資源同步效率低。
技術(shù)實(shí)現(xiàn)思路
1、鑒于此,本發(fā)明的目的在于在實(shí)施云資源同步時(shí)考慮數(shù)據(jù)一致性、延遲、成本和安全性等因素,通過高效地調(diào)用第三方云計(jì)算平臺api,正確地獲取虛擬機(jī)資源列表,實(shí)現(xiàn)定時(shí)自動(dòng)執(zhí)行資源發(fā)現(xiàn)操作,實(shí)現(xiàn)高效的資源同步,以解決傳統(tǒng)的云資源管理更新不及時(shí),信息不準(zhǔn)確的問題,減少人力維護(hù)成本,提高云資源同步效率,提高系統(tǒng)的可靠性、可用性和一致性。
2、本發(fā)明提供cmdb云資源同步方法,包括以下步驟:
3、s1、獲取運(yùn)管要接入項(xiàng)目的訪問密鑰access?key和秘密密鑰secret?key,進(jìn)行api調(diào)用的認(rèn)證和授權(quán);
4、s2、使用go語言編寫代碼,使用go?sdk工具包(優(yōu)選華為云的go?sdk工具包)進(jìn)行api調(diào)用,通過api調(diào)用獲取虛擬機(jī)資源列表,通過go?sdk工具包獲取虛擬機(jī)資源數(shù)據(jù);
5、s3、將獲取到的虛擬機(jī)資源數(shù)據(jù)映射到配置管理數(shù)據(jù)庫cmdb的數(shù)據(jù)模型中,并存儲到cmdb的數(shù)據(jù)庫中;使用go語言的orm庫(如"gorm")進(jìn)行數(shù)據(jù)庫操作;
6、s4、使用go語言的定時(shí)任務(wù)庫(如"github.com/robfig/cron"),定時(shí)自動(dòng)執(zhí)行虛擬機(jī)資源發(fā)現(xiàn)操作。
7、進(jìn)一步地,所述s2步驟包括以下步驟:
8、s21、導(dǎo)入?go?語言標(biāo)準(zhǔn)庫中的?fmt?包,華為云sdk的核心包,以及彈性云服務(wù)器ecs服務(wù)的?sdk?包;
9、s22、使用?huaweicloud.newclient?函數(shù),傳入包括?ak、sk、region?和?projectid的配置信息,創(chuàng)建華為云客戶端;
10、s23、使用創(chuàng)建的華為云客戶端,調(diào)用?ecs.newecsclient?函數(shù),創(chuàng)建ecs?客戶端;
11、如果創(chuàng)建?ecs?客戶端過程中發(fā)生錯(cuò)誤,則打印錯(cuò)誤信息并退出程序;
12、如果創(chuàng)建?ecs?客戶端過程中沒有發(fā)生錯(cuò)誤,則進(jìn)入s24步驟;
13、s24、定義ecs.listserversdetailsopts?結(jié)構(gòu)體實(shí)例,用于指定查詢條件(如過濾條件等);
14、s25、調(diào)用?ecs.listserversdetails?函數(shù),傳入?ecs?客戶端和查詢選項(xiàng),獲取服務(wù)器列表;
15、如果查詢服務(wù)器列表過程中發(fā)生錯(cuò)誤,則打印錯(cuò)誤信息并退出程序;
16、如果查詢服務(wù)器列表過程中沒有發(fā)生錯(cuò)誤,則進(jìn)入s26步驟;
17、s26、遍歷查詢結(jié)果中的服務(wù)器列表,打印每個(gè)服務(wù)器的id唯一標(biāo)識符和名稱(可根據(jù)需要打印更多屬性)。
18、進(jìn)一步地,所述s3步驟包括以下步驟:
19、s31、導(dǎo)入?gorm.io/driver/mysql?包,用于使用?mysql?數(shù)據(jù)庫驅(qū)動(dòng);導(dǎo)入gorm.io/gorm?包,用于使用?gorm庫?的對象關(guān)系映射orm?功能;
20、s32、定義名為?virtualmachine?的結(jié)構(gòu)體,作為虛擬機(jī)的數(shù)據(jù)模型;在virtualmachine結(jié)構(gòu)體中,嵌入?gorm.model函數(shù),gorm.model函數(shù)包含常用的字段:id、創(chuàng)建時(shí)間、更新時(shí)間、刪除時(shí)間;定義?id?和?name?字段為分別表示虛擬機(jī)的唯一標(biāo)識符和名稱;此外還可以定義其他所需的屬性;
21、s33、定義程序的入口點(diǎn)主函數(shù)main,在所述主函數(shù)main中進(jìn)行數(shù)據(jù)庫連接和數(shù)據(jù)模型遷移;
22、s34、定義數(shù)據(jù)庫連接字符串?dsn,格式為:用戶名:密碼@tcp(主機(jī)地址:端口)/數(shù)據(jù)庫名稱?參數(shù);例如:"user:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parsetime=true&loc=local";
23、s35、使用?gorm.open?函數(shù),傳入?mysql?驅(qū)動(dòng)和連接字符串,嘗試與數(shù)據(jù)庫建立連接;
24、如果連接失敗,打印錯(cuò)誤信息并退出程序;
25、如果連接成功,則進(jìn)入s36步驟;
26、s36、調(diào)用?db.automigrate?方法,傳入?virtualmachine?結(jié)構(gòu)體,自動(dòng)遷移數(shù)據(jù)庫表結(jié)構(gòu),保證數(shù)據(jù)庫表與數(shù)據(jù)模型一致;
27、s37、從華為云獲取虛擬機(jī)資源數(shù)據(jù),并將這些虛擬機(jī)資源數(shù)據(jù)存儲到數(shù)據(jù)庫中。
28、進(jìn)一步地,所述s4步驟包括以下步驟:
29、s41、導(dǎo)入?github.com/robfig/cron?包,使用該github.com/robfig/cron?包提供的定時(shí)任務(wù)調(diào)度功能;
30、s42、定義程序的入口點(diǎn)主函數(shù)main,在該主函數(shù)main中進(jìn)行定時(shí)任務(wù)的設(shè)置和調(diào)度;
31、s43、調(diào)用?cron.new?方法創(chuàng)建新的定時(shí)任務(wù)調(diào)度器實(shí)例?c,所述定時(shí)任務(wù)調(diào)度器實(shí)例?c用于管理和調(diào)度定時(shí)任務(wù);
32、s44、使用?c.addfunc?方法添加一個(gè)定時(shí)任務(wù),配置其調(diào)度時(shí)間和任務(wù)函數(shù),每整點(diǎn)執(zhí)行一次任務(wù)(如:調(diào)度時(shí)間?"0?0?*?*?*?*"?,表示每小時(shí)的第?0?分鐘運(yùn)行任務(wù));在任務(wù)函數(shù)中,放置需要定時(shí)執(zhí)行的資源發(fā)現(xiàn)操作的邏輯;
33、s45、調(diào)用?c.start?方法啟動(dòng)定時(shí)任務(wù)調(diào)度器,使所述定時(shí)任務(wù)調(diào)度器開始按照設(shè)定的時(shí)間調(diào)度任務(wù);
34、s46、使用?defer?關(guān)鍵字,在程序退出前調(diào)用?c.stop()?方法,停止定時(shí)任務(wù)調(diào)度器,進(jìn)行必要的資源清理;使用?select?{}?語句阻塞主函數(shù),使程序保持運(yùn)行狀態(tài),保證定時(shí)任務(wù)持續(xù)執(zhí)行。
35、本發(fā)明通過以上設(shè)計(jì)方法,使用go語言實(shí)現(xiàn)cmdb云資源發(fā)現(xiàn)功能,將云平臺上的虛擬機(jī)資源同步到cmdb中進(jìn)行管理。
36、本發(fā)明還提供cmdb云資源同步系統(tǒng),執(zhí)行如上述所述的cmdb云資源同步方法,包括:
37、認(rèn)證和授權(quán)模塊:用于獲取運(yùn)管要接入項(xiàng)目的訪問密鑰access?key和秘密密鑰secret?key,進(jìn)行api調(diào)用的認(rèn)證和授權(quán);
38、api調(diào)用模塊:用于使用go語言編寫代碼,使用go?sdk工具包進(jìn)行api調(diào)用,通過api調(diào)用獲取虛擬機(jī)資源列表,通過go?sdk工具包獲取虛擬機(jī)資源數(shù)據(jù);
39、數(shù)據(jù)存儲模塊:用于將獲取到的虛擬機(jī)資源數(shù)據(jù)映射到配置管理數(shù)據(jù)庫cmdb的數(shù)據(jù)模型中,并存儲到cmdb的數(shù)據(jù)庫中;使用go語言的orm庫進(jìn)行數(shù)據(jù)庫操作;
40、定時(shí)任務(wù)模塊:用于使用go語言的定時(shí)任務(wù)庫,定時(shí)自動(dòng)執(zhí)行虛擬機(jī)資源發(fā)現(xiàn)操作。
41、進(jìn)一步地,所述api調(diào)用模塊包括:
42、導(dǎo)入包單元:用于導(dǎo)入?go?語言標(biāo)準(zhǔn)庫中的?fmt?包,華為云sdk的核心包,以及彈性云服務(wù)器ecs服務(wù)的?sdk?包;
43、創(chuàng)建華為云客戶端單元:用于使用?huaweicloud.newclient?函數(shù),傳入包括?ak、sk、region?和?project?id的配置信息,創(chuàng)建華為云客戶端;
44、創(chuàng)建?ecs?客戶端單元:用于使用創(chuàng)建的華為云客戶端,調(diào)用?ecs.newecsclient函數(shù),創(chuàng)建ecs?客戶端;如果創(chuàng)建?ecs?客戶端過程中發(fā)生錯(cuò)誤,則打印錯(cuò)誤信息并退出程序;如果創(chuàng)建?ecs?客戶端過程中沒有發(fā)生錯(cuò)誤,則進(jìn)入設(shè)置查詢選項(xiàng)單元;
45、設(shè)置查詢選項(xiàng)單元:用于定義ecs.listserversdetailsopts?結(jié)構(gòu)體實(shí)例,用于指定查詢條件;
46、列出云服務(wù)器詳細(xì)信息單元:用于調(diào)用?ecs.listserversdetails?函數(shù),傳入ecs?客戶端和查詢選項(xiàng),獲取服務(wù)器列表;如果查詢服務(wù)器列表過程中發(fā)生錯(cuò)誤,則打印錯(cuò)誤信息并退出程序;如果查詢服務(wù)器列表過程中沒有發(fā)生錯(cuò)誤,則進(jìn)入遍歷并打印服務(wù)器信息單元;
47、遍歷并打印服務(wù)器信息單元:用于遍歷查詢結(jié)果中的服務(wù)器列表,打印每個(gè)服務(wù)器的id唯一標(biāo)識符和名稱。
48、進(jìn)一步地,所述數(shù)據(jù)存儲模塊包括:
49、導(dǎo)入包單元:用于導(dǎo)入?gorm.io/driver/mysql?包,用于使用?mysql?數(shù)據(jù)庫驅(qū)動(dòng);導(dǎo)入?gorm.io/gorm?包,用于使用?gorm庫?的對象關(guān)系映射orm?功能;
50、定義數(shù)據(jù)模型單元:用于定義名為?virtualmachine?的結(jié)構(gòu)體,作為虛擬機(jī)的數(shù)據(jù)模型;在virtualmachine結(jié)構(gòu)體中,嵌入?gorm.model函數(shù),gorm.model函數(shù)包含常用的字段:id、創(chuàng)建時(shí)間、更新時(shí)間、刪除時(shí)間;定義?id?和?name?字段為分別表示虛擬機(jī)的唯一標(biāo)識符和名稱;
51、定義主函數(shù)單元:用于定義程序的入口點(diǎn)主函數(shù)main,在所述主函數(shù)main中進(jìn)行數(shù)據(jù)庫連接和數(shù)據(jù)模型遷移;
52、配置數(shù)據(jù)庫連接字符串單元:用于定義數(shù)據(jù)庫連接字符串?dsn,格式為:用戶名:密碼@tcp(主機(jī)地址:端口)/數(shù)據(jù)庫名稱?參數(shù);
53、連接到數(shù)據(jù)庫單元:用于使用?gorm.open?函數(shù),傳入?mysql?驅(qū)動(dòng)和連接字符串,嘗試與數(shù)據(jù)庫建立連接;如果連接失敗,打印錯(cuò)誤信息并退出程序;如果連接成功,則進(jìn)入遷移數(shù)據(jù)模型單元;
54、遷移數(shù)據(jù)模型單元:用于調(diào)用?db.automigrate?方法,傳入?virtualmachine?結(jié)構(gòu)體,自動(dòng)遷移數(shù)據(jù)庫表結(jié)構(gòu),保證數(shù)據(jù)庫表與數(shù)據(jù)模型一致;
55、獲取虛擬機(jī)資源數(shù)據(jù)單元:用于從華為云獲取虛擬機(jī)資源數(shù)據(jù),并將這些虛擬機(jī)資源數(shù)據(jù)存儲到數(shù)據(jù)庫中。
56、進(jìn)一步地,所述定時(shí)任務(wù)模塊包括:
57、導(dǎo)入包單元:用于導(dǎo)入?github.com/robfig/cron?包,使用該github.com/robfig/cron?包提供的定時(shí)任務(wù)調(diào)度功能;
58、定義主函數(shù)單元:用于定義程序的入口點(diǎn)主函數(shù)main,在該主函數(shù)main中進(jìn)行定時(shí)任務(wù)的設(shè)置和調(diào)度;
59、創(chuàng)建新的定時(shí)任務(wù)調(diào)度器單元:用于調(diào)用?cron.new?方法創(chuàng)建新的定時(shí)任務(wù)調(diào)度器實(shí)例?c,所述定時(shí)任務(wù)調(diào)度器實(shí)例?c用于管理和調(diào)度定時(shí)任務(wù);;
60、添加定時(shí)任務(wù)單元:用于使用?c.addfunc?方法添加一個(gè)定時(shí)任務(wù),配置其調(diào)度時(shí)間和任務(wù)函數(shù),每整點(diǎn)執(zhí)行一次任務(wù);在任務(wù)函數(shù)中,放置需要定時(shí)執(zhí)行的資源發(fā)現(xiàn)操作的邏輯;
61、啟動(dòng)定時(shí)任務(wù)調(diào)度器單元:用于調(diào)用?c.start?方法啟動(dòng)定時(shí)任務(wù)調(diào)度器,使所述定時(shí)任務(wù)調(diào)度器開始按照設(shè)定的時(shí)間調(diào)度任務(wù);
62、保證程序運(yùn)行及清理資源單元:用于使用?defer?關(guān)鍵字,在程序退出前調(diào)用c.stop()?方法,停止定時(shí)任務(wù)調(diào)度器,進(jìn)行必要的資源清理;使用?select?{}?語句阻塞主函數(shù),使程序保持運(yùn)行狀態(tài),保證定時(shí)任務(wù)持續(xù)執(zhí)行。
63、本發(fā)明的cmdb云資源同步方法能夠自動(dòng)發(fā)現(xiàn)云環(huán)境中的各類資源,包括虛擬機(jī)實(shí)例、存儲卷等,通過調(diào)用云服務(wù)商的api,獲取資源的基本屬性和配置信息;支持多家云計(jì)算服務(wù)平臺,cmdb支持與客戶的云管平臺進(jìn)行對接,用戶可根據(jù)需要添加不同類型的賬戶,并為每個(gè)賬戶配置相應(yīng)的訪問密鑰或證書。
64、本發(fā)明還提供一種計(jì)算機(jī)可讀存儲介質(zhì),其上存儲有計(jì)算機(jī)程序,所述程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上述所述的cmdb云資源同步方法的步驟。
65、本發(fā)明還提供一種計(jì)算機(jī)設(shè)備,所述計(jì)算機(jī)設(shè)備包括存儲器、處理器及存儲在存儲器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)如上述所述的cmdb云資源同步方法的步驟。
66、與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:
67、本發(fā)明提供的cmdb云資源同步方法及系統(tǒng)通過高效地調(diào)用第三方云計(jì)算平臺的api,正確地獲取虛擬機(jī)資源列表;實(shí)現(xiàn)定時(shí)自動(dòng)執(zhí)行資源發(fā)現(xiàn)操作,通過使用選定工具進(jìn)行設(shè)計(jì),實(shí)現(xiàn)高效的資源同步,有效解決了傳統(tǒng)的云資源管理更新不及時(shí),信息不準(zhǔn)確的問題,減少了人力維護(hù)成本,有效提升了云資源同步效率,提高了系統(tǒng)的可靠性、可用性和一致性。