오픈스택 커뮤니티 - 제1회 공개 SW 커뮤니티데이 (2017년 9월 정기 세미나 대체)
- 일시: 9월 22일 금요일
- 발표자: 장태희 (운영진, 스터디 매니저)
- 행사 정보: https://www.facebook.com/groups/openstack.kr/permalink/1826976907316452/
2015. 09. 05 도커 서울 밋업 4번째(Open Container Korea 주최).
elasticsearch에 은전한닢 한국어 형태소 분석기를 적용하고 운영한 사례 발표.
- 사용자 사전별로 이미지를 만들기
- nginx를 이용해 http basic auth 적용하기
SELinux(Security-Enhanced Linux)는 미국 국가 안보국(NSA)에서 개발한 것으로,
관리자가 시스템 엑세스 권한을 효과적으로 제어할 수 있게 하는 Linux 시스템용 보안 아키텍처입니다.
특정 서비스의 구동이 원활하지 않거나 혹은 관리의 번거로움 등으로 인해 SELinux를 Disable 하는 경우가 많은데요,
SELinux를 사용해야 하는 이유와 작동 방식에 대해 설명합니다,
본 슬라이드는 Windows환경에서 NginX구동을 실습하기 위해, PHP를 예로 들어 진행하고 있습니다. NginX는 PHP 동적웹페이지에 대한 처리보다, 정적 HTTP 서버에 적합 합니다.
본 슬라이드는 시작과 구동에 초점을 맞추고 있습니다. 설정관련 내용은 아래 공식 문서를 참조할 수 있습니다.
http://nginx.org/en/docs/beginners_guide.html
.NET을 처음 접한 프로그래머가 P2P 네트워킹 기능을 구현하면서 마주쳤던 문제와 해결 방법등 개발 경험 전반에 걸쳐서 이야기 해 보려 합니다. 또한 C# 8.0에 추가되는 비동기 스트림을 미리 써볼 수 있는 AsyncEnumerable과 비동기 잠금(lock) 등의 편리한 기능을 갖춘 AsyncEx등의 라이브러리들도 소개합니다.
2015. 09. 05 도커 서울 밋업 4번째(Open Container Korea 주최).
elasticsearch에 은전한닢 한국어 형태소 분석기를 적용하고 운영한 사례 발표.
- 사용자 사전별로 이미지를 만들기
- nginx를 이용해 http basic auth 적용하기
SELinux(Security-Enhanced Linux)는 미국 국가 안보국(NSA)에서 개발한 것으로,
관리자가 시스템 엑세스 권한을 효과적으로 제어할 수 있게 하는 Linux 시스템용 보안 아키텍처입니다.
특정 서비스의 구동이 원활하지 않거나 혹은 관리의 번거로움 등으로 인해 SELinux를 Disable 하는 경우가 많은데요,
SELinux를 사용해야 하는 이유와 작동 방식에 대해 설명합니다,
본 슬라이드는 Windows환경에서 NginX구동을 실습하기 위해, PHP를 예로 들어 진행하고 있습니다. NginX는 PHP 동적웹페이지에 대한 처리보다, 정적 HTTP 서버에 적합 합니다.
본 슬라이드는 시작과 구동에 초점을 맞추고 있습니다. 설정관련 내용은 아래 공식 문서를 참조할 수 있습니다.
http://nginx.org/en/docs/beginners_guide.html
.NET을 처음 접한 프로그래머가 P2P 네트워킹 기능을 구현하면서 마주쳤던 문제와 해결 방법등 개발 경험 전반에 걸쳐서 이야기 해 보려 합니다. 또한 C# 8.0에 추가되는 비동기 스트림을 미리 써볼 수 있는 AsyncEnumerable과 비동기 잠금(lock) 등의 편리한 기능을 갖춘 AsyncEx등의 라이브러리들도 소개합니다.
This presentation start from basic concept such as container and container orchestration
And then go through Kubernetes internal especially Master Node components and Work Node components and show and explain core mechanism with codes.
모바일 게임 서버 런칭 과정 중 겪었던 경험들을 공유합니다.
Docker, Amazon ElasticBeanstalk, Kinesis, Elastic Stack, Elasticsearch, 부하테스트에 대한 내용을 담았습니다.
Github : https://github.com/YonghoChoi
Blog : http://yongho1037.tistory.com
오픈 소스 Actor Framework 인 Akka.NET 을 통해 온라인 게임 서버를 어떻게 구현할 수 있는지를 설명합니다. Actor Model 에 대한 기본 이해부터 Scale-out 가능한 게임 서버 구축까지 전반적인 내용에 대해 알 수 있습니다. 설명을 위해 클라이언트는 Unity3D 를 사용할 예정입니다.
드랍박스, nDrive 등과 같은 클라우드 스토리지 서비스들은 데이터를 어떻게 저장하는지에 대한 이론적 내용과 실제 구현 내용을 살펴봅니다. 이 발표에서는 OpenStack 의 swift라는 Object Storage 를 이용하여 이론이 어떻게 구현되어있는지 알아봅니다.
2018년 10월 19일 금요일, 오픈스택 한국 커뮤니티 정기 세미나에서 발표주셨던 자료입니다.
- 행사 정보: http://festa.io/events/118
- 발표자: 김용기 부장님
> Sr. Solution Architect, Red Hat
> Administrator, Ansible Facebook Usergroup
3. 2017년 Openstack Swift 분석 스터디
▪ Study Lead : 조성수
▪ Study Period : 2017.04.11 ~ 2017.07
▪ 장소 제공 : Naver D2
▪ 산출물 공유 : Github(https://git.io/vdvHv)
4.
5. What is Swift?
▪ OpenStack Object Store project(Object Storage)
▪ Store data as objects.
▪ Offers cloud storage software, store and retrieve lots of data
with a simple API.
▪ swift-proxy, account, container, object로 구성됩니다.
▪ Swift-proxy는 account, container, object를 관리, Object API를 제공
▪ Account, Container는 DB로 데이터가 관리되며, Object는 저장공간에
직접 저장되는 방식으로 설계 되어 있습니다.
▪ User는 API를 통하여 데이터를 저장하거나 다운로드
For more information, please visit https://docs.openstack.org/swift/latest
Source) http://naleejang.tistory.com/104
6. Swift URl
▪ http://host/v1/account/container/object
▪ v1 : api version
▪ account : account name in swift
▪ container : container name
▪ object : object name
For more information, please visit https://docs.openstack.org/swift/latest
7. Swift APIs
▪ account – accounts in swift.
▪ container – same concept of Amazon S3 bucket. objects are stored in
container.
▪ object - data such as documents, files, and movies. Available to save w
ith metadata
11. Swift Components
▪ proxy-server
▪ Provide Swift API and relay requests to backend servers(accout,
container, object)
▪ account-server
▪ Save swift account information. Shows information amounts of
container per accounts, storage usage.
▪ container-server
▪ Save container information of accounts
12. Swift Components
▪ object-server
▪ Store real objects. Each objects has basically 3 replications.
▪ Daemon
▪ Numeral daemons must be executed due to the fact that swift is
eventual consistency system so that it should sustain consistency.
28. /swift/common/middleware/tempauth.py
▪ token 인증을 처리하는 부분
▪ URL은 어떻게 제공되는가?
▪ 원하는 대상 정하기
▪ request에 보낸 내용을 가지고 보기
▪ request를 보내는 것이 없으면 log를 가지고 (log가 찍혔다면
code가 지나간 자리이므로) 해당 부분을 검색하여 string을 검
색
29. /swift/common/middleware/tempauth.py
▪ account_user = account + ':' + user -> 유저 인증 시작 부분(user와
group이 정상적인지 이전에 확인)
▪ if self.users[account_user]['key'] != key -> 키 검사
▪ account_id = self.users[account_user]['url'].rsplit('/', 1)[-1] -> 계정
id 가져오기
▪ if not token: -> token이 생성되는 과정을 볼 수 있다
▪ resp = Response(request=req, headers={ -> token이 모두 발급 된
것을 확인
▪ X-Auth Token을 언제 가져오는가?
▪ token = env.get('HTTP_X_AUTH_TOKEN',
env.get('HTTP_X_STORAGE_TOKEN'))
30. /swift/common/middleware/tempauth.py
▪ 유효성 검사
▪ breaking point : groups = self.get_groups(env, token)
▪ memcache_token_key = '%s/token/%s' % (self.reseller_prefix,
token)
▪ memcache_token_key = '%s/token/%s' % (self.reseller_prefix,
token)
▪ token의 문자열을 검사 하는 것이 아니라, memcache에서 무엇
인가를 가져와서 비교하는구나 라고 알게 됨.
31. /swift/commom/middleware/proxy-logging.py
▪ Logging middleware for the Swift proxy.
▪ `client_ip remote_addr datetime request_method request_path
protocol status_int user_agent auth_token bytes_recvd
bytes_sent client_etag transaction_id headers request_time
source log_info request_start_time request_end_time`
▪ url 인코딩되고, 스페이스로만 구분되므로 `split()`으로 간단히
구분이가능
32. /swift/commom/middleware/proxy-logging.py
▪ `remote_addr` : `REMOTE_ADDR` 환경변수 값
▪ `client_ip` : `X-Forwarded-For` 해더, `x-Cluster_Ip` 해더,
`REMOTE_ADDR` 환경 변수 값들을 나타낸다.
▪ `source` : WSGI 환경에서의 `swift.source` 를 나타낸다. 요청을 생성
한 코드를 나타냄
▪ `log_info`WSGI 환경에서의 `swfit.log_info` 값을 나타낸다.
▪ `x-delete-at` 값이나 일반 로그 정보에서 감지할 수 없는 <b>뒤에서
동작하는</b> 코드들에 대한 추가 정보를 내보냄.
▪ 로그 추가시`env.setdefault('swift.log_info', []).append(your_info)` 를
이용하여 다른 사람들과의 로그와 충돌이 없도록 해야 함.
▪ 헤더 값이 없거나, 누락된 값, 0은 일반적으로 `-` 로 표기.
33. /swift/commom/middleware/proxy-logging.py
▪ config 값
▪ `self.log_hdrs`
▪ `access_log_haders` 가 있으면 해당 값을 읽어오고 없으면
`log_headers`를 읽어오는데 그것도 없으면 `no`로 설정
▪ `log_hdrs_only` : `access_log_headers_only` 값이 존재하면
`log_hdrs_only` 값에다가 리스트로 가지고 있음.
▪ `self.valid_methods` : `access_log_statsd_valid_http_methods` 값을
가져오며, 없으면 `log_statsd_valid_http_methods` >
`GET,HEAD,POST,PUT,DELETE,COPY,OPTIONS` 순으로 값을 가져오게
된다.
▪ 해당내역도 각 항목별로 string list로 구성된다.
34. DLO / SLO
▪ /swift/commom/middleware/dlo.py
▪ D(Dynamic)LO : 파일을 무한정 올릴 수 있다. multipart 종료 시점을 알
수 없음.
▪ req = Request() 객체를 어떻게 잘 활용하는지, Debugging point, 분기
를 눈에 익히는것이 목적
▪ /swift/commom/middleware/slo.py
▪ S(Static)LO : multipart 업로드 종료 이후 더이상 part 업로드 불가.
35.
36.
37. Custom Middleware Development
▪ `def filter_factory`
▪ closer 기법을 통한 작성
class MyMiddleware:
def filter_factory(global_conf, **local_conf):
conf.update
def my_filter(app):
return MyMiddleware(app, conf)
return my_filter
For more information, https://docs.openstack.org/swift/pike/development_middleware.html
38. Custom Middleware Development
▪ pipeline에서 동작시 wsgi.py module이 어느 클래스를 로드 할지
결정.(paste.filter_factory 부분)
▪ wsgi가 각 middleware의 클래스들을 초기화 시켜준다.
▪ 각 middleware별 특정 변수들은 local_conf에 저장
▪ app parameter는 다음에 호출 할 middleware를 가리킴.
▪ 문서에 나온것과 달리 middleware는 따로 repository를 만들어서
관리. 이후 설치할 수 있는 설치형으로 만듬.
▪ setup.py에 pbr 설정을 한 뒤 setup.cfg에 swift를 설치하듯이 설치.
39. proxy/server.py __call__
▪ wsgi가 부르는 함수, 한번 인증된 키에 대해서는 memcached
가 가지고 있어 Keystone으로 갈 필요가 없음
▪ proxy server -> proxy/containers/server.py 가 핵심
40. Cluster
▪ cluster에서 region을 생성한다.(여러개가 될 수 있음)
▪ 여러개의 region
▪ region 간은 독립된 환경이어야 함. (전기, 네트워크 등)
▪ region 안에 여러개의 zone
▪ 여러개의 rack을 묶어 region을 만들 수도 있고, 하나의 데이터
센터를 region으로 할 수도 있다.
▪ 각 region은 독립된 전원과 네트워크 등을 사용해야 한다.
41. Cluster
▪ zone은 하나의 rack이라고 보면 된다.
▪ zone은 하나의 랙이라고 봐도 무방
▪ 한 열이 zone이 될수도, 랙 여러개가 zone이 될수도 있음
▪ zone안에 여러개의 node
▪ node는 서버라고 봐도 무방
▪ node안에 여러개의 하드디스크
▪ node는 각 서버 장비라고 보면 된다.
▪ hash 알고리즘은 md5를 기본으로 사용.
42. 분산 시스템 - consistence hash ring
Source) http://www.paperplanes.de/2011/12/9/the-magic-of-consistent-hashing.html
43. Account / Container
▪ account와 container는 database에 접근하는 코드 구조가 비슷
▪ account/server.py
▪ PUT -> proxy 서버에서 request를 받을 때에는
http://prox_svr/v1/account/container/obj
▪ PUT에서 database로 request를 보낼 때에는
http://account_server/v1/sdb1/70/account/obj 로 바뀌어 보내
게 된다.
▪ account 생성 == db file 생성
44. Account / Container
▪ db.py -> initialize == sqlite에 table을 만드는 것 까지만 진행
▪ PUT 요청 -> db 파일을 하나 생성하고 원하는 이름은 rename
으로 db 파일을 생성한다. PUT 명령이 오면 실제 sqlite에 바로
쓰는것이 아니라 pending 파일에 기록하고, pending 파일이 일
정 capacity를 넘어서면 .lock 파일로 모든 요청을 잠시 막고 db
에 기록한다.
45. Account / Container
▪ GET 요청 -> 모든 요청을 잠시 막고 pending에 있는 것을 db에
merge시킨 뒤 db를 읽어온다.
▪ DELETE -> table field에 DELETED라고 flag 표시만 하고 실제
지우지는 않는다. 나중에 auditor daemon이 돌면서 실제 파일
을 지운다.