Zinst
DevOps management tool for distributed linux systems.(such as the yinst of Yahoo!, Ansible)
Install / Use
/learn @ralfyang/ZinstREADME
-
! This repository Supports for Redhat or CentOS 6.x version under
-
You just can run the zinst reopsitory server by docker container as below
docker run -d -v /data/dist:/data/dist:rw -p 80:80/tcp zinst/zinst_repository
- Detail information about of zinst repository via docker: https://hub.docker.com/r/zinst/zinst_repository/
If you want to show detail video please click the GIF image :)
-
You just can type this command
-
curl -sL bit.ly/online-install |bash
-
Requires: sudo, BASH, SSH
-
Feel free to contact me if you have any Question :) (한국어 지원)
-
Contact: goody80762@gmail.com or ralf.yang@gsshop.com
-
Links:
Zinst 메뉴얼
개요
- zinst는 분산된 서버군의 효율적인 관리와 제어를 위해 개발 되었으며, 이를 위해 별도의 agent의 설치를 필요로 하지 않습니다.
- 예를 들어 특정 리눅스 장비 하나를 관리용도의 메니저 서버로 구성 한 다음, 해당 서버에서 다른 서버로 ssh를 통해 접속이 가능하다면, 한번의 명령어를 바탕으로 복수개의 서버를 관리 할 수 있습니다.
- 예) 192.168.1.101 서버부터 192.168.1.199 까지 하드웨어 스펙을 확인하는 command
$ zinst ssh '/data/bin/hwconfig -c' -h 192.168.1.1[01-99]
- Zinst는 리눅스 시스템 운영에 필수적으로 사용되는 명령어를 기반으로, 작업을 간단하게 처리 할 수 있도록 제작 되었습니다.
- 예) Load-balancer에 해당 서버를 등록하기 위해 Virtual IP를 loopback으로 등록하는 작업
$ zinst set vipctl.vips=192.168.2.10 -set vipctl.name=DEFAULT
$ zinst start vipctl
$ ifconfig lo:DEFAULT
lo:DEFAULT Link encap:Local Loopback
inet addr:192.168.2.10 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:65536 Metric:1
$ zinst stop vipctl
$ ifconfig lo:DEFAULT
lo:DEFAULT Link encap:Local Loopback
UP LOOPBACK RUNNING MTU:65536 Metric:1
- 위 예제와 같은 결과를 얻기 위해 직접 리눅스 명령어를 사용하게 된다면 많은 과정을 거치게 됩니다. 또한 해당 설정 내역에 관련하여 동적으로 관리가 힘들 수도 있습니다.
- 위 내용과 같이 해당 리눅스 시스템에 구성되어있는 zinst set 값은 아래와 같이 확인이 가능 합니다.
$ zinst set
vipctl.name=DEFAULT
vipctl.onboot=yes
vipctl.DIR=/data/src/html
vipctl.Check_file=l4-check.html
hwconfig.nameserver1=8.8.8.8
hwconfig.nameserver2=168.126.63.1
vipctl.vips=192.168.2.10
server_default_setting.name1=8.8.8.8
server_default_setting.name2=211.44.62.40
.
.
.
- 동일 VIP를 사용하는 다수의 시스템(192.168.2.101~192.168.2.110)의 loopback을 동시에 관리 하기 위해 아래와 같이 활용이 가능 합니다.
$ zinst set vipctl.vips=192.168.2.10 -h 192.168.1.1[01-10]
$ zinst start vipctl -h 192.168.1.1[01-10]
- 이처럼, zinst는 특정 리눅스 장비의 개별 관리에서 부터 복수개 이상의 서버군을 관리하는 목적으로 만들어졌습니다.
- ip범위 또는 host명의 범위(예 web101.test.com ~ web110.test.com)를 정규표현식 형태로 입력받아 수많은 서버 장비를 관리 할 수 있습니다.
- 마찬가지로 다양한 서버군에 대해 file의 복사, Daemon의 stop/start/restart 등을 수행 할 수 있으며, Crontab의 확인/수정, 특정 작업을 위해 제작한 스크립트를 패키지화 하여 설치/제거/설정변경 등을 수행 할 수 있습니다.
- 일련의 모든 작업은 history에 기록이 되어 작업 tracking이 가능합니다.
- zinst는 Puppet이나 chef 처럼 시스템 Orchestration을 위해 만들어졌으나, 복잡한 설치등이 동반되지 않음으로, yum, rpm, puppet,chef, docker 등과 함께 사용 할 수 있습니다.
- 쉽게 말해서 사람이 하는 일련의 작업을 Zinst package라는 형태로 wrapping하여 처리한다고 이해 하시면 됩니다.
- Enterprise system의 운영을 위해서는, 심플한 구성의 Infrastructure, 각 요소에 대한 자체 검증, 정규화를 기반으로한 시스템구축이 기본적으로 선행되어야 합니다.
- 이에 따라, 자체 검증 및 최적화된 application을 package 형태로 제작하여 내제화 하고, 중앙에서 전체 시스템을 총괄하여 관리 할 수 있는 방향으로 관리 형태를 일원화 할 수 있게 됩니다.
- Zinst Package 구성에는 set값을 별도로 할당 할 수 있습니다. 즉 하나의 package로 다양한 구성의 적용이 가능합니다.
- 예를 들어, Apache를 설치 시,
httpd_serverpackage를 사용하여 설치 할 수 있으며, 설치와 동시에set값을 변경하여 구성을 달리 할 수 있습니다.
$ zinst i httpd_server \
-set httpd_server.DocumentRoot=/data/src/html \
-set httpd_server.hostname=www.ralfyang.com \
-set httpd_server.port=8080
시작하기
Download & install
- zinst는 두가지 형태로 설치가 가능합니다.
- 쉬운 구성 설치를 위해 github.io를 repository화 하여 사용이 가능합니다.
curl -sL bit.ly/online-install | sh
-
위와 같이 설치 진행 시, sudo package가 필요하여 yum을 통해 자동 설치 진행 됩니다.
-
RedHat계열의 OS의 경우, yum을 통한 sudo 설치가 가능하나, Ubuntu 또는 Darwin의 경우는 그에 맞게 설치 command를 수정 하여 진행 해야 합니다.
-
참고로, zinst 자체는 bash가 설치 된 모든 Linux, Unix 등에서 사용이 가능하나, 작업을 위한 일부 명령어(curl, bc, awk, sed, echo, printf, tar)는 OS 및 해당 명령어의 Version에 따라 다르게 출력 될 수 있습니다.
-
github.io를 통해 설치 가능한 package를 적용하는 경우가 아닌, 자체적인 Package repository를 구축하고자 할 경우 아래와 같이 github의 source를 clone하여 사용 할 수 있습니다.
$ git clone https://github.com/goody80/Ralf_Dev.git
$ cd Ralf_Dev/1_zinst_starters_package/
$ install.sh
- 자체 repository를 구축 시, Apache web server가 설치됩니다.
zinst help
- zinst는 별도의
man-page가 없습니다. 이는 zinst 명령어의 확산성을 위한 사상에서 시작합니다. - A라는 서버에 zinst 명령을 통해 B라는 서버로 작업을 수행 시,
zinstfile은 자동으로 B 서버에 복제가 되어 업무를 수행합니다. - 따라서 불필요한, file 및 config는 별도로 생성하지 않고, 오직 zinst 파일 하나에 모든것을 담아야 합니다.
- 이는, 리눅스 시스템 관리의 편의를 위해 command 형태로 유용하게 사용되기 위해 고안된 방법입니다.
- 반복적인 명령어 작업 등을 package화 하여 설치 실행 등을 수행하기 위해서는, 디렉토리 구조, default 작업 환경등의 셋팅을 위해
server_default_setting이라는 package를 설치하여, 시스템 초기 구성을 진행 할 수 있습니다.
$ zinst i server_default_setting -stable
- zinst는
man-page대신, 자체 manual을 command를 통해 확인 할 수 있습니다.
$ zinst
------------------------------------------------------------------------------------------------------
zinst [Command] [Option Types] [Target Names] [-h or -H] [Targe Host]
------------------------------------------------------------------------------------------------------
ssh [Command] *Host requires
......................................................................................................
mcp [local-files] [Destination DIR] *Host requires
keydeploy *Host requires
------------------------------------------------------------------------------------------------------
install [Package]
[-same] [Package]
[-downgrade] [Package]
[-stable] [Package without version]
remove [Package]
[-force] [Package]
......................................................................................................
list [Blank for list-up] or [Package]
[-file] [Package] or [/DIR/File-name]
[-zicf] [Package]
[-dep] [Package]
......................................................................................................
sync [-file] [Save fie for the Package set sync]
[-url] [Save fie from URL for the Package set sync]
restore [-file] [Saved file_name]
[-igor] * Not available yet
------------------------------------------------------------------------------------------------------
set [Blank for list-up]
[Package] -set [Package.option=value]
------------------------------------------------------------------------------------------------------
start/stop/restart/run [Daemon_name]
on/off [Daemon_name]
......................................................................................................
crontab [-e] or [-l]
------------------------------------------------------------------------------------------------------
find [Blank for list-up] or [Package]
getset [Package with version exactly]
------------------------------------------------------------------------------------------------------
track [Blank for list-up]
[Package or hostname]
[Package or hostname] [-file]
[Package or hostname] [-file=Export_File_name]
"user" or "sudo_user"
[User_Package_name] [-file]
[User_Package_name] [-file=Export_File_name]
------------------------------------------------------------------------------------------------------
history [Number of Range]
......................................................................................................
-pass Option for Multi-host password automation
self-config ip=x.x.x.x host=xxx.xxx.xxx dir=xxx
self-update
-version
*, help
------------------------------------------------------------------------------------------------------
-h is target host, -H is targe file of hostlist
ex) zinst i sample_a sample_b -stable -set sample_a.key=111 -H ./server_list.txt
ex) zinst i sample-1.0.0.zinst -h web01.news.kr[1,3] web[03-12].news[1,3]
------------------------------------------------------------------------------------------------------
* Current zinst setup: [ Repo: http://goody80.github.io/Zinst_packages - goody80.github.io/Zinst_packages ], [ ROOT-DIR: /data ]
------------------------------------------------------------------------------------------------------
- 좀 더 상세한 설명을 위해서는
-helpoption을 사용 할 수 있습니다.
$ zinst -help
------------------------------------------------------------------------------------------------------
zinst [Command] [Option Types] [Target Names] [-h or -H] [Targe Host]
------------------------------------------------------------------------------------------------------
+ For remote work
- Remote control: You can send a command to seperated hosts
ssh [Command] *Host requires
......................................................................................................
- File copy to remote: You can send a file(s) to seperated hosts(mcp = Multi CoPier)
mcp [local-files] [Destination DIR] *Host requires
- ssh-key copy to remote: You can send a ssh-key file to seperated hosts
keydeploy *Host requires
------------------------------------------------------------------------------------------------------
+ For Package
- Package manage: You can install/remove a pack


