[Oracle] Ksplice로 다운타임 최소화

웨비나 : Ksplice로 다운타임 없이 컴플라이언스, 보안 그리고 무결성 사전 예방 (https://talkit.tv/Event/1738)

시작하기 전에…

오라클 DBA와 서버를 겸업하고 있다보니 오라클의 신제품에 대해서 관심을 많다. 세미나나 컨퍼런스 같은 행사들은 자주 참석하기는 어렵고, 책과 인터넷 자료를 통해서 텍스트로만 기술자료를 보는 것도 쉽지 않다. 다행히도 요즘엔 웨비나를 통해서 최근 기술들에 대한 동향과 정보를 얻을 수 있다. 그리고 더 장점인 것은 오프라인 세미나나 컨퍼런스에서는 질문이 어려운데(뻘줌…) 온라인 상에서 이루어지는 것이다보니 질문도 보다 쉽게 할 수 있다는 장점이 있는 것 같다. 문제는 주로 사무실에서 짧게는 1시간 길게는 2시간정도 동영상을 시청해야하니 눈치가 약간 보이기도 하고 업무전화가 오게되면 웨비나 시청에 약간 방해가 된다는 점이다. 그래도 다시 볼 수 있도록 유투브나 스트리밍 사이트에 자료가 남아있으니 다시 보기나 이어보기를 하면 되니 조금만 노력하면 더 많은 기술정보를 볼 수 있을 것 같다.

Ksplice?

Ksplice라는 것은 결국에 리눅스 커널을 재부팅없이 적용할 수 있는 기술이다. 단, 모든 경우에 해당되지는 않지만 보안취약점과 같은 빠르게 적용이 필요한 커널패치들은 부담없이 적용이 가능한 것 같다. 간단하게 웨비나로 들은 설명으로 옮겨보자면, 기존에 커널패치는 디스크에 커널패치를 하고, 적용을 위해서 재부팅이라는 필수적인 작업을 필요로 했다. 이는 커널이 메모리에 로드하면 디스크에 있는 커널데이터를 참조하지 않고 메모리에 로드된 바이너리만 참조하여 사용하기 때문이라고 한다. Ksplice는 이 점에 착안하여 신규적용할 패치를 커널에 직접 로드해서 바로 적용이 가능하도록 하는 기술인 것 같다.

시스템을 운영하는 운영자 측면에서 핫픽스 성격의 패치를 적용하기 위해서 매번 재부팅을 하는 것은 많은 부담감을 가진다. 그렇다고 언제까지 미루고 위험에 방치할 수 만은 없으므로 Ksplice는 그런 영역에서 시스템 관리자에게 많은 장점을 줄 것이라고 본다.

위험성을 판단해서 Ksplice로 커널패치를 진행하고,  정기적인 재부팅을 통해서 안정화(=메모리 회수)를 취하거나, 응급으로 Ksplice로 패치를 적용하여 취약점을 방어해두고 메모리 정리를 위해서 비운영시간 대에 재부팅을 하는 선 Ksplice 후 재부팅하는 형태 등 다양한 운영방식을 결정할 수 있을 것 같다.  기존에는 위험성이 있더라도 서비스가 우선이라면 위험성을 안고 서비스를 하는 방법 밖에 없었는데, 응급조치가 가능하다는 점에서 장점은 충분할 것 같다.

의문점

웨비나를 시청하면서 궁금했던 점은 질문으로 올려봤다.

“Ksplice를 통해서 신규 패치를 메모리에 로드하고 적용하면, 그 전에 로드되어있던 커널의 메모리도 회수가 되는건가요?”

패치를 적용하기 위해서 시스템의 메모를 사용해야하고, 적용하면 그 전에 사용하던 커널메모리가 회수가 되는지가 의문이었다. 기대한 것은 회수까지 되면 좋겠다였지만… 역시나 old 커널에 대한 메모리는 회수가 되지 않는단다.

제한점은?

위키의 Ksplice 문서를 읽어보니 패치적용을 위해서 일시적으로 서비스를 freeze가 필요하단다.(당연하다) 웨비나의 설명에 의하면 초단위 이하로 발생하는 것이니 서비스에 큰 영향은 없을 것이라고 하지만… 정말 위급한 핫픽스를 해야하는 경우가 아니라면 주운영시간대(산업군이나 서비스별로 다름..)는 피해서 작업하는 것이 좋을 것 같다.

각 서버나 서비스별로 상황은 너무 천차만별이라 Ksplice를 적용해보지 않은 서버라면 검증을 위해서라도 단계별로 접근이 필요할 것 같다. 현재 관리 중인 서버가 대부분 유닉스와 윈도우즈라 적용해볼 방법은 없지만, 진행 중인 차세대 프로젝트에서는 OS 선정 시에 리눅스가 제일 큰 고려대상이라 관심을 가지며 테스트서버에서 적용해볼 생각이다.

특히, 메모리 크기가 제한적인 서버라면 정규 재부팅 스케쥴과 함께 Ksplice 적용전략을 잘 세워야할 것 같다.(old 커널메모리의 회수가 안되니..) 다른 자원(cpu, disk i/o 등)의 성능이슈가 있다면 비운영시간이나 부하가 적은 시간대를 선택해서 단계별로 적용해보고 최종적으로 제일 부하가 많이 발생하는 운영시간 대에 적용이 가능한지 모니터링을 해봐야할 것 같다.

호환성은?

일단은 오라클 리눅스를 타겟으로 개발됬으니 오라클 리눅스는 당연하고, 오라클 리눅스의 모태인 RHEL(레드햇 엔터프라이즈 리눅스)는 지원한다고 나와있다.(CentOS의 경우에는 RHEL과 쌍둥이이니 지원하지 않을까 싶다.)

데스크탑 버전은 Free로 사용이 가능한데, 레드햇 계열인 페도라와 가장 많은 사용자층이 있는 우분투를 지원하고 있다. 현재 개인적인 용도로 서버셋팅 중인데 적용대상 버전인 Ubuntu 18.04는 아직 지원하고 있지 않다.(아직 beta라 그런 듯…)

Inspector

Ksplice 홍보를 위한 페이지로 추측되는데, uname 명령어 결과를 붙이면 Ksplice를 통해서 패치하여 대응이 가능한 CVE 목록을 제공하고 있다. 테스트용으로 운영 중인 CentOS 서버를 이용해서 테스트해봤다.

[root@localhost ~]# echo “`uname -s`//`uname -m`//`uname -r`//`uname -v`”
Linux//x86_64//3.10.0-514.26.2.el7.x86_64//#1 SMP Tue Jul 4 15:04:05 UTC 2017
[root@localhost ~]#

Ksplice Inspector 페이지에 안내된 명령어를 해당 서버에 실행해서 결과를 웹페이지에 붙여넣고 실행해보니 아래처럼 나왔다.RHEL과 쌍둥이이다보니 CentOS의 정보로 지원되는 CVE 목록이 나온다. 그 말은 CentOS에서도 RHEL과 동일하게 적용이 가능할 것으로 추측된다.

계획

아무래도 개인적인 용도라면 상용의 솔루션보다 오픈소스 솔루션을 활용하고 싶다.(비용의 문제가 있다보니..) 그렇지만 기업에서 사용할 용도라면 상용 솔루션이 더 나을 수 있다고 판단한다.(책임의 문제가 비용보다 더 커질 수 있으며 유지보수의 측면에서 도입비용보다 위험비용이 더 커질 수 있으므로..)

1차적으로는 개인운영 서버(Ubuntu)에서 비용과 무관하게 적용해서 운영 및 테스트를 진행해보고, 차세대를 준비하는 테스트서버(CentOS)에서 오라클 데이터베이스와 함께 Ksplice Trial 운영을 해봐서 검증을 진행해본다. 동시에 Ksplice를 대체할 수 있는 오픈소스 솔루션을 찾아보는 것을 병행할 생각이다.