Đồ án tốt nghiệp: Sử dụng saltstack triển khai hệ thống private cloud openstack

95 183 4
Đồ án tốt nghiệp: Sử dụng saltstack triển khai hệ thống private cloud openstack

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐỒ ÁN TỐT NGHIỆP Đề tài: SỬ DỤNG SALTSTACK TRIỂN KHAI HỆ THỐNG PRIVATE CLOUD OPENSTACK Giảng viên hướng dẫn: Th.S Nguyễn Tuấn Dũng Sinh viên: Nguyễn Việt Hưng MSSV: 20081297 Lớp: Toán tin - K53 Ngày 22 tháng năm 2013 Mục lục Lời nói đầu Lời cảm ơn Điện toán đám mây 1.1 Khái niệm 1.2 Các đặc tính cần có mơ hình cloud 1.3 Phân loại 1.3.1 Phân loại theo mơ hình dịch vụ cung cấp 1.3.2 Phân loại theo mơ hình triển khai 15 Openstack 16 1.4.1 Khái niệm 16 1.4.2 Cấu tạo 17 1.4.3 OpenStack Compute 20 1.4.4 OpenStack Storage 20 1.4.5 OpenStack Networking 22 1.4.6 OpenStack Dashboard 23 1.4 i 1.4.7 Identity Service 23 1.4.8 Image Service 24 1.4.9 Tính 25 1.4.10 Cài đặt hoạt động 26 Quản lý cấu hình 28 2.1 Sơ lược quản lý cấu hình 28 2.2 Các tiêu chí đánh giá hệ thống quản lý cấu hình 29 2.3 Một số chương trình tiêu biểu 30 2.3.1 CFEngine 30 2.3.2 Puppet 30 2.3.3 Chef 31 2.3.4 Salt 31 2.4 Những khó khăn triển khai thủ công hệ thống cloud OpenStack 2.5 2.6 32 Lợi ích sử dụng trình quản lý cấu hình để triển khai hệ thống cloud OpenStack 33 Salt 35 2.6.1 Khái niệm 35 2.6.2 Mơ hình thiết kế 36 2.6.3 Master Minion 37 2.6.4 State 38 2.6.5 SLS 40 2.6.6 Renderers 44 ii 2.6.7 Pillar 44 2.6.8 Grains 45 2.6.9 Quá trình chạy SLS 46 2.6.10 Returner 46 Cài đặt hệ thống private cloud OpenStack sử dụng trình quản lý cấu hình Salt 48 3.1 Các công việc cần thực cài đặt OpenStack 48 3.2 Trên node 51 3.2.1 Thiết kế state cho mysql 51 3.2.2 Thiết kế state cho rabbitmq 55 3.2.3 Thiết kế state cho keystone 55 3.2.4 Thiết kế state cho glance 58 3.2.5 Thiết kế state cho nova 62 3.2.6 Thiết kế state cho horizon 63 Trên nhiều node 64 3.3 Kết đánh giá 4.1 4.2 66 Kết 66 4.1.1 Cloud OpenStack 66 4.1.2 Salt 74 Đánh giá hiệu 75 Kết luận 76 iii Tài liệu tham khảo 79 Danh sách hình vẽ 79 Phụ lục 81 Thiết kế state cho DNSimple 81 Cài đặt sử dụng DNSimple 82 iv Lời nói đầu Trong mơi trường doanh nghiệp, nhu cầu sử dụng máy chủ tăng lên theo quy mô doanh nghiệp lúc nảy sinh nhiều vấn đề Trước hết toán tối ưu để sử dụng tối đa công suất máy chủ, tránh tình trạng lãng phí tài ngun, đồng thời địi hỏi hệ thống có khả co giãn linh hoạt, chịu lỗi tốt để đảm bảo dịch vụ vận hành lượng tài nguyên máy tăng cao hay có cố xảy Tiếp toán quản lý lượng lớn máy chủ cho nhanh, hiệu quả, tốn nhân lực thời gian Giải hai vấn đề trên, đồ án giới thiệu hai giải pháp cho vấn đề xây dựng đám mây OpenStack sử dụng cơng cụ quản lý cấu hình Salt Hai công nghệ sản phẩm mã nguồn mở, miễn phí, có lượng người dùng đơng đảo đặc biệt đạt thành công định OpenStack tập hợp chương trình mã nguồn mở chạy môi trường Linux, sử dụng công nghệ hàng đầu để xây dựng nên hệ thống cung cấp máy ảo theo nhu cầu người dùng Open- Stack cho phép xây dựng hệ thống cloud mơi trường phần cứng tiêu chuẩn, khơng địi hỏi phần cứng hay phần mềm chuyên biệt Với thiết kế chia thành nhiều module tuân theo tiêu chuẩn có sẵn khiến cho chất lượng phận cấu thành OpenStack nhanh chóng phát triển hồn thiện, thiết kế cịn cho phép quản trị viên tùy ý lựa chọn chương trình có chức để thay thành phần mà họ khơng thích Cũng thiết kế module mà việc cài đặt OpenStack đòi hỏi nhà quản trị hệ thống phải có am hiểu cơng nghệ sử dụng bỏ cơng sức cấu hình thành phần để vận hành hệ thống cloud Mơ hình cloud cho phép hệ thống sử dụng sức mạnh hàng nghìn máy tính, lượng máy tăng lên, việc quản lý máy tính bắt đầu gặp khó khăn, đặc biệt vấn đề quản lý cấu hình dịch vụ chạy máy chủ Các vấn đề gặp phải: • Cấu hình máy chủ khơng có quán: người quản lý nhiều máy chủ nhiều người quản lý máy chủ • Công việc lặp lặp lại gây nhàm chán, tốn thời gian, cơng sức, dễ nhầm lẫn • Các file cấu hình nằm phân tán khiến việc kiểm tra, thay đổi tốn nhiều thời gian • Tốn nhiều thời gian công sức lượng máy tăng lên đến 100 hay chí 1000 máy • Khó đảm bảo trạng thái dịch vụ máy Chương trình quản lý cấu hình đời để giải vấn đề nói Xuất từ lâu (như CFEngine - năm 1993), chương trình quản lý cấu hình ln phát triển thay đổi theo đổi hệ thống, có khả mở rộng tự động tốt hóa Chef, Puppet, CFEngine ba chương trình phổ biến lĩnh vực vào thời điểm Các chương trình đạt thành công định Bên cạnh thành cơng đó, chúng cịn nhiều nhược điểm đặc biệt vấn đề tính phức tạp file cấu hình khả mở rộng Salt dự án mã nguồn mở năm 2011 có phát triển nhanh, ln nhắm tới đơn giản, tính module phận cấu thành, khả mở rộng hệ thống quản lý cấu hình Đồ án thực tìm hiểu khái niệm điện tốn đám mây, sâu vào tìm hiểu hệ thống OpenStack Từ sử dụng Salt để cài đặt hệ thống IaaS cloud sử dụng OpenStack - hệ thống tương đối phức tạp để chứng minh đơn giản mà linh hoạt trình quản lý cấu hình Kết thu tập hợp file cấu hình giúp tiết kiệm thời gian, công sức việc triển khai hệ thống cloud, đồng thời giúp nhanh chóng dễ dàng mang lại trải nghiệm điện toán đám mây cho người dùng Lời cảm ơn Em xin chân thành cảm ơn thầy Th.S Nguyễn Tuấn Dũng dành thời gian để hướng dẫn em hoàn thành đồ án Em xin chân thành cảm ơn thầy cô dạy dỗ, bảo tận tình cho em suốt năm học, giúp em có kiến thức thực đồ án này, sẵn sàng để trở thành kỹ sữ, đóng góp cho phát triển đất nước Kết luận Đồ án thực tìm hiểu cài đặt OpenStack - hệ thống giúp triển khai mơ hình IaaS cloud, giải pháp đại hiệu cho doanh nghiệp có nhu cầu sử dụng nhiều máy chủ Mơ hình thử nghiệm dựng lên hệ thống IaaS cloud chạy máy tính, có khả cung cấp máy ảo cách nhanh chóng Các dịch vụ thành phần cloud chạy ổn định thực chức mong đợi Kết hợp với tìm hiểu ứng dụng cơng cụ quản lý cấu hình SaltStack, việc cài đặt quản lý hệ thống cloud trở nên nhanh chóng, hiệu nhiều lần Kết thu tập hợp file SLS cho phép cài đặt quản trị hệ thống OpenStack cloud nhanh chóng nhiều máy tính chạy hệ điều hành Ubuntu 12.04, chứng minh cho tính khả thi giải pháp sử dụng OpenStack Salt để thực cung cấp quản lý lượng lớn máy chủ cho doanh nghiệp Sử dụng hai công nghệ mã nguồn mở chạy tảng hệ điều 76 hành nhân Linux, đồ án góp phần mang lại suy nghĩ tích cực phần mềm mã nguồn mở, đưa giải pháp giúp doanh nghiệp tự làm chủ cơng nghệ đại hiệu mà không tốn nhiều tiền Trong hồn cảnh doanh nghiệp cơng nghệ thơng tin nước đầu tư với số vốn lớn để tìm hiểu làm chủ cơng nghệ điện toán đám may, đồ án giúp mang lại trải nghiệm nhanh chóng cho người dùng với lượng cơng sức chi phí bỏ thấp Hai cơng nghệ giới thiệu đồ án hữu ích môi trường doanh nghiệp đủ lớn, giúp tiết kiệm nhiều tiền của, công sức, với doanh nghiệp nhỏ, lượng máy cần quản lý không nhiều việc sử dụng hai cơng nghệ mang lại lợi ích khơng tương xứng với cơng sức bỏ Do điều kiện sở vật chất không cho phép nên đồ án dừng lại việc dựng mơ hình cloud máy vật lý, chưa thể giải toán thực tế cung cấp lượng lớn server mà cung cấp khoảng 10 server nhỏ, chạy dịch vụ dịch vụ trạng thái rảnh Đồ án tiếp tục phát triển theo hướng giải toán cụ thể, thực cung cấp server cho dự án thật kết hợp với viết state để tự động trình cài đặt quản lý cấu hình, đồng thời cài đặt thêm thành phần tùy chọn OpenStack Storage để thực lưu trữ phân tán Đồ án thực tìm hiểu hai cơng nghệ lớn với hai sản phẩm mẻ nên việc thiếu xót khơng thể tránh khỏi, em mong 77 nhận phản hồi đóng góp thầy để có tài liệu tốt cho thân em nói riêng cho ngành cơng nghệ thơng tin nước nhà nói chung 78 Tài liệu tham khảo • http://aws.amazon.com/ • http://blogs.technet.com • http://docs.openstack.org • http://en.wikipedia.org/wiki/ • http://www.heroku.com/ • http://www.windowsazure.com/en-us/ • https://drive.google.com/ • http://saltstack.com/ • http://cfengine.com/ • http://www.opscode.com/chef/ • https://puppetlabs.com/ 79 Danh sách hình vẽ 1.1 Dashboard Windows Azure 10 1.2 Giao diện dashboard Heroku 11 1.3 Giao diện soạn thảo Spreadsheet Google Drive 13 1.4 Phân tầng chức mơ hình dịch vụ 14 1.5 Sơ đồ tương tác dịch vụ OpenStack 18 2.1 Mơ hình Master - Minion Salt 37 3.1 Sơ đồ thứ tự cài đặt thành phần OpenStack 50 4.1 Giao diện horizon sau cài đặt 68 4.2 Giao diện horizon tạo máy ảo 69 4.3 Giao diện horizon sau tạo máy ảo 70 4.4 Giao diện horizon sau tạo hai máy ảo 71 4.5 Giao diện horizon 10 máy ảo cirros tạo 72 4.6 SSH vào máy ảo 73 4.7 Liệt kê danh sách máy host (compute-node) 73 80 Phụ lục Thiết kế state cho DNSimple DNSimple dịch vụ online cho phép quản lý tên miền ghi cách đơn giản hiệu Dựa API DNSipmle cung cấp, module thực thiết kế state cho DNSimple phục vụ công việc sử dụng Salt quản lý tên miền Module viết ngôn ngữ Python 2.7 Một state module cần thực công việc sau: • Đọc vào file SLS người dùng • Lưu giữ trạng thái trước chạy state • Thực thay đổi nội dung SLS yêu cầu • Trả thay đổi kết trình chạy state dnsimple module thực hiện: • đọc vào tên miền trạng thái yêu cầu 81 • đọc vào record trạng thái yêu cầu • lấy tồn thơng tin tên miền records • thực thay đổi tạo tên miền, tạo record, thay đổi nội dung record • lấy kết sau thay đổi so sánh với liệu ban đầu • trả kết trình chạy state Cài đặt sử dụng DNSimple Module viết python : #−∗− encoding: utf−8 −∗− ’’’ DNSimple state requires: requests==1.2.0 ’’’ import json import logging 10 try: 11 import requests 12 except ImportError: 13 requests = None 14 82 15 16 log = logging.getLogger( name ) 17 18 COMMON_HEADER = {’Accept’: ’application/json’, 19 ’Content−Type’: ’application/json’, 20 } 21 BASE_URL = ’https://dnsimple.com’ 22 23 24 def virtual (): 25 ’’’Verify requests is installed.’’’ 26 if requests is None: 27 28 return False return ’dnsimple’ 29 30 31 def auth_session(email, token): 32 ses = requests.Session() 33 ses.auth = (email, token) 34 ses.headers.update(COMMON_HEADER) 35 ses.headers.update({’X−DNSimple−Token’: email + ":" + token}) 36 return ses 37 38 39 def created(name, email, token): 40 domain = name 41 ret = {’name’: domain, 42 ’changes’: {}, 83 43 ’result’: False, 44 ’comment’: ’’} 45 46 47 if opts [’test’]: return {’name’: name, 48 ’changes’: {}, 49 ’result’: None, 50 ’comment’: ’Domain {0} is set to be created’.format( name)} 51 52 53 path = "/domains" 54 ses = auth_session(email, token) 55 data = {"domain": {"name": domain}} 56 resp = ses.post(BASE_URL + path, json.dumps(data)) 57 log.info("{0} {1}".format(resp.status_code, resp.content)) 58 if resp.status_code == 201: 59 ret[’result’] = True 60 ret[’changes’][domain] = "Created in your account" 61 elif resp.status_code == 400: 62 comment = "already in your account." 63 if comment in resp.content: 64 ret[’result’] = True 65 ret[’comment’] = comment 66 67 68 69 70 elif resp.status_code == 401: ret[’result’] = False else: raise Exception("{0} {1}".format(resp.status_code, resp.content)) return ret 84 71 72 73 def normalise(records): 74 ’’’Return a data with structure same as which returned from API’’’ 75 ret = {} 76 for domain in records: 77 li = [] 78 for rectype in records[domain]: 79 data = {} 80 data[’record_type’] = rectype 81 recs = records[domain][rectype] 82 for recname in recs: 83 data[’name’] = recname 84 data.update(recs[recname]) li.append(data) 85 ret[domain] = li 86 87 return ret 88 89 90 def records_existed(name, email, token, records): 91 ’’’ 92 Use returning ASAP when have any error happen So if nothing change, 93 result is true 94 95 sls example 96 97 98 records_exists: email: 85 token: 99 records: 100 blahblah.com: 101 A: 102 www: 103 104 content: 123.11.1.11 105 ttl: 123 106 prio: blog: 107 content: 122.2.2.2 108 adomain.org: 109 A: 110 www: 111 112 content: 12.1.1.2 113 114 ’’’ 115 116 ret = {’name’: ’existed’, 117 ’changes’: {}, 118 ’result’: True, 119 ’comment’: ’’} 120 121 ses = auth_session(email, token) 122 existing_records = {} 123 for domain in records: 124 path = "/domains/{0}/records".format(domain) 125 data = json.loads(ses.get(BASE_URL + path).content) 126 data = [i[’record’] for i in data] 86 127 existing_records[domain] = data 128 129 to_update = {} 130 to_create = {} 131 new_records = normalise(records) 132 id2erc = {} 133 for domain in records: 134 ex_records = existing_records[domain] 135 new_domain_records = new_records[domain] 136 to_update[domain] = {} 137 for nrc in new_domain_records: 138 need_create = True 139 for erc in ex_records: 140 if nrc[’name’] == erc[’name’]: 141 # some records have same name, check their type for makeing 142 # sure correct update/create 143 # (DNSimple default have NS record with name ’’) 144 if erc[’name’] == ’’: 145 146 if erc[’record_type’] != nrc[’record_type’]: continue 147 148 id2erc[erc[’id’]] = erc 149 diff = {} 150 for k, v in nrc.items(): 151 if erc[k] != v: 152 diff[k] = v 153 154 if diff != {}: 87 to_update[domain][erc[’id’]] = diff 155 156 need_create = False 157 break 158 159 if need_create: if to_create == {}: 160 to_create[domain] = [] 161 to_create[domain].append(nrc) 162 log.info("To create: {0}".format(to_create)) 163 log.info("To update: {0}".format(to_update)) 164 165 166 if opts [’test’]: return {’name’: name, 167 ’changes’: {}, 168 ’result’: None, 169 ’comment’: ’Records {0} is set to be created\nRecords {1} is \ 170 set to be updated’.format(to_create, to_update)} 171 172 173 for domain in to_create: for r in to_create[domain]: 174 path = "/domains/{0}/records".format(domain) 175 data = {"record": r} 176 resp = ses.post(BASE_URL + path, json.dumps(data)) 177 log.info("{0} {1}".format(resp.status_code, resp.content)) 178 if resp.status_code == 201: 179 180 ret[’changes’]["{0}:{1}".format(domain, r[’name’])] = "created" elif resp.status_code == 400: 181 ret[’result’] = False 182 ret[’comment’] = resp.content 88 183 184 185 return ret elif resp.status_code == 404: if "Couldn\’t find Domain with name" in resp.content: 186 ret[’result’] = False 187 ret[’comment’] = "Couldn’t find domain {0}".format(domain) 188 return ret 189 else: 190 assert resp.status_code != 422 191 ret[’comment’] = "{0} {1} {2}".format(domain, r, resp.status_code) 192 193 return ret 194 195 196 for dom in to_update: for rid in to_update[dom]: 197 path = "/domains/{0}/records/{1}".format(dom, rid) 198 record_changes = to_update[dom][rid] 199 resp = ses.put(BASE_URL + path, 200 json.dumps({"record": record_changes})) 201 log.info("{0} {1}".format(resp.status_code, resp.content)) 202 if resp.status_code == 200: 203 changes = [] 204 for k, v in record_changes.items(): 205 changes.append("{0}: {1} => {2}".format( 206 k, 207 id2erc[rid][k], 208 json.loads(resp.content)[’record’][k])) 209 ret[’changes’]["{0} {1}".format(dom, id2erc[rid][’name’])] = changes 210 89 211 else: 212 ret[’result’] = False 213 ret[’comment’] = "{0} {1}".format(resp.status_code, resp.content) 214 215 return ret 90 ... hình tập trung 2.5 Lợi ích sử dụng trình quản lý cấu hình để triển khai hệ thống cloud OpenStack Sử dụng chương trình quản lý cấu hình trình triển khai hệ thống cloud OpenStack mang lại lợi ích... 31 2.4 Những khó khăn triển khai thủ công hệ thống cloud OpenStack 2.5 2.6 32 Lợi ích sử dụng trình quản lý cấu hình để triển khai hệ thống cloud OpenStack ... hợp với hệ thống logging monitor để tự động theo dõi quản lý cloud nhờ tính phân tán mơ hình quản lý cấu hình • Cấu hình hệ thống cloud sử dụng lại cần triển khai hệ thống khác Nếu thực tốt, cấu

Ngày đăng: 04/08/2020, 21:10

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan