안녕하세요. OPS의 코미야입니다.
redis 소스와 CHEF-SOLO를 설치해 달라고 했으니 녹음하겠습니다.
★ 요구 사항
버전은 2.8.4를 사용해 주세요. (최신 출처는 2014/1 기준)
★ 다음 임무들
・rpm으로 진입하는 버전을 확인하세요 (*같은 환경에서 서버에서 yum으로 확인)
redis.x86_64 0:2.4.10-1.el6
*소스 설치는 요구사항을 충족하지 않으므로 필요합니다.
・셰프 솔로 준비
[shell]$ ssh-copy-id -i ~/.ssh/id_dsa.pub 서버2 $ ssh-copy-id -i ~/.ssh/id_dsa.pub 서버1
$ 칼 솔로 준비 서버1 $ 칼 솔로 준비 서버2[/shell]
·역할 창조
[shell]$ vi roles/rankingAPI.json { "name":"rankingAPI", "chef_type": "role", "json_class":"Chef::: Role", "default_attributes":{ "base_setting": { "swappiness": "0", "tcp_tw_reuse": "0", "tcp_tw_recycle": "0", "tcp_fin_timeout": "10", "tcp_max_syn_backlog": "8192", "somaxconn": "8192", "ntpserver1": "ntp.nict.jp" }, "override_attributes":{}, "description":"rankingAPI의 role", "run_list": [ "recipe[roles::rankingAPI]" ] }
$ vi site-cookbooks/roles/recipes/rankingAPI.. rb include_recipe "base_setting::common-pkgs" include_recipe "base_setting::sysctl" include_recipe "base_setting::ntpd" #include_recipe "base_setting:::rps_cpus" include_recipe "login-users::create_user" include_recipe "login-users:key_copy" #include_recipe "java::java" #include_recipe "ngix::nginx" #include_recipe "play::p lay" #include_recipe "mysqld::mysql-client" #include_recipe "git::git" include_recipe "redis::redis"[/shell]
*작업 대상이 아닌 레시피는 현재로서는 코멘트가 삭제되었습니다.
・노드 편집
[shell]$ vi nodes/server1.json $ vi nodes/server2.json { "run_list":[ "role[rankingAPI]" ] }[/shell]
・요리책 제작
[shell]$ CD ~/chef-repo $ 칼 요리책 레디스 -오 사이트-요리책[/shell]
·필요한 서류, _bags, 레시피 준비
[shell]$ mkdir -p site-cookbooks/redis/files/default/usr/local/src $ CD 사이트-쿡북/redis/files/default/usr/local/src $ wget http://download.redis.io/releases/redis-2.8.4.tar.gz $ CD ~/chef-repo $ 나이프 솔로 데이터 가방 생성 pkg_versions redis { "id": "redis", "version": "2.8.4" } $ 나이프 솔로 데이터 가방 편집 PKG_versions REDIS
$ vim site-cookbooks/redis/recipes/redis.rb ---------------------------------------- version = data_bag_item('pkg_versions','redis')['version'] redis_pkg="redis-#{version}" cookbook_file "/usr/local/src/#{redis_pkg}.tar.gz" 하지 마세요_if "ls /usr/local/src/#{redis_pkg}.tar.gz" 소스 "USR/local/src/#{REDIS_pkg}.tar.gz" 끝"
%W{tcl make gcc}.each do |pkg| package pkg do action :install not_if "'rpm -qa|grep #{pkg}" end end
bash: "redis-install" 하지 마세요_if "어떤 redis-cli" 코드 <-EOC cd="" sr/local/src="" tar="" zxf="" #{redis_pkg}.tar.gz="" cd="" #{redis_pkg}="" make="" -j="" &&="" make="" install="" eoc="" end="" directory="" "/etc/redis"="" do="" not_if="" "ls="" tc/redis"="" mode="" 0755="" action="" :create="" recursive="" false="" end="" directory="" "/usr/local/redis"="" do="" not_if="" "ls="" sr/local/redis"="" mode="" 0755="" action="" :create="" recursive="" false="" end="" cookbook_file="" "/etc/init.d/redis"="" do="" source="" "/etc/init.d/redis"="" mode="" 0754="" end="" cookbook_file="" "/etc/redis/6379.conf"="" do="" source="" "etc/redis/6379.conf"="" mode="" 0644="" notifies="" :restart,="" 'service[redis]'="" end="" cookbook_file="" "/etc/logrotate.d/redis"="" do="" source="" "etc/logrotate.d/redis"="" mode="" 0644="" end="" service="" "redis"="" do="" not_if="" "ps="" -ef|grep="" redis|grep="" -v="" grep"="" supports="" :status=""> true, :restart => true action [ :enable, :start ] 종료 ----------------------------------------
$ 칼 요리책 테스트 레디스
$ sudo CP -p utils/redis_init_script /etc/init.d/redis $ diff /etc/init.d/redis /usr/local/src/redis-2.8.4/utils/redis_init_script 5, 9d4 < # chkconfig: - 85 15 < # processname: redis < prog=$(basename $EXEC) 15a10 >< < # description: redis-server < . /etc/rc.d/init.d/functions 14d8 PIDFILE=/var/run/redis_${REDISPORT}.pid 17d11 < PIDFILE=`grep pidfile ${CONF} |awk '{print $2}'` 19c13,14 < start() { --- > 케이스 "$1" in > start) 26,27d20 < sleep 2 < echo -100 > /proc/'cat $PIDFILE'/oom_score_adj 29,30c22,23 < } < stop() { --- > ;; > stop) 45,60d37< start < start) < ;; < case "$1" in < < stop) < stop < restart) < start 62,64d38 < ;; < status) < rh_status < } < rh_status() { < ;;
$ mkdir -p site-cookbooks/redis/files/default/etc/init.d $ vim site-cookbooks/redis/files/default/etc/init.d/redis ---------------------------------------- #!/bin/sh # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. # chkconfig: - 85 15 # description: redis-server # processname: redis
. /etc/rc.d/init.d/functions
REDISPORT=6379 EXEC=/usr/local/bin/redis-server CLIEXEC=/usr/local/bin/redis-cli prog=$(basename $EXEC)
CONF="/etc/redis/${REDISPORT}.conf" PIDFILE=`grep pidfile ${CONF} |awk '{print $2}'`
start() { if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF sleep 2 echo -100 >< < status $prog < } < stop /proc/'cat $PIDFILE'/oom_score_adj fi } stop() { 만약 [ ! -f $PIDFILE ] 그럼 에코 "$PIDFILE 존재하지 않습니다, 프로세스가 실행 중" 그렇지 않으면 PID=$(cat $PIDFILE) 에코 "중지 ..." $CLIEXEC -p $REDISPORT 종료 시 [ -x /proc/${PID} ] 에코 "Redis 종료 대기 중" 수면 1 완료 에코 "레디스가 멈췄어" fi }
rh_status() { 상태 $prog }
"$1" in start) 시작 ;; stop) stop ;; restart) stop start ;; status) rh_status ;; *) 에코 "start 또는 stop을 첫 번째 인자로 사용해 주세요" ;; esac ----------------------------------------[/shell]는 chkconfig, restart, status, oom_killer 대응책과 PID를 설정에서 읽을 수 있도록 수정되었습니다.
재시작이나 상태 확인이 안 되면 셰프 쪽 서비스 자원으로 시작할 수도 없는 것 같았어요.
소스 패키지에 포함된 시작 스크립트는 rh OS용이 아닌 것 같았습니다.
[shell]CD site-cookbooks/redis/files/default/usr/local/src $ tar xf redis-2.8.4.tar.gz redis-2.. 8.4/redis.conf mkdir -p ~/chef-repo/site-cookbooks/redis/files/default/etc/redis cp -p redis-2.8.4/redis.conf ~/chef-repo/site-cookbooks/redis/files/default/etc/redis/6379.conf vi ~/chef-repo/site-cookbooks/redis/files/default/etc/redis/6379.conf $ diff ~/chef-repo/site-cookbooks/redis/files/default/etc/redis/6379.conf redis-2.8.4/redis.conf 37c37 < daemonize yes --- > daemonize no 94C94 < logfile "/var/log/redis.log" --- > 로그파일 "" 178,179c178 < #dir ./ < dir /usr/local/redis --- > dir ./
$ CD ~/chef-repo $ mkdir -p site-cookbooks/redis/files/default/etc/logrotate.d/ $ vi site-cookbooks/redis/files/default/etc/logrotate.d/redis /var/log/redis.log { 주간 missingok copytruncate rotate 12 compress notifempty }[/shell]
·레시피 적용
[shell]$ 칼 솔로 요리사 서버1 $ 칼 솔로 요리사 서버2[/shell]
・확인 (SSH 후)
[shell]$ logrotate -d /etc/logrotate.d/redis $ PS -ef|grep redis $ netstat -lnpt $ sudo service redis 상태 redis-server (PID 21560) 실행 중... $ redis-cli $ cat /proc/'cat /var/run/redis.pid'/oom_score_adj -100 $ 꼬리 /etc/sysctl.conf $ ll /home $ sudo su - $ sudo ls -lha /home/*/.ssh/ $ ntpq -p[/shell]
·참고문헌
Sakura VPS(CentOS 6.3)에 Redis 설치 및 chkconfig 등록 - Entatsu Records Redis 2.2.12 설치 노트(amazon Linux) - 개발자 일지Redis CentOS/Mac OSX 설치 지침 - Memcache 유사 키-값 메서드 및 인메모리 DB, 지속 지원 - 사케와 티어, 루비, 레일
[[CentOS]redis 설치 - Qiita[Keita]] (http://qiita.com/sora083/items/a3b7e754cfaffdb9a51c)
[여러 가지 사용해 본 것들의 노트 - 레디스 - 키타 [케이타]] (http://qiita.com/A-gen/items/345c07d830205a7ea6cb)
redis-debian/src/etc/logrotate.d/redis-server at master · mpillar/redis-debian · GitHub다운로드 – Redis OOM Killer에 의해 죽지 마세요 - 지금 바로 시작하세요! 리눅스 시스템 관리 / Vol.238
위 내용을 시청해 주셔서 감사합니다.
</-EOC>