puppet負荷等化nginx+mongrel



  
  
  
  
  1. yum install -y rubygem-mongrel 
  2. echo -e "PUPPETMASTER_PORTS=( 18140 18141 18142 18143 18144 )\nPUPPETMASTER_EXTRA_OPTS=\"—servertype=mongrel  --ssl_client_header=HTTP_X_SSL_SUBJECT\"" > /etc/sysconfig/puppetmaster 
  3. useradd www 
  4. groupadd www 
  5. CORE_NUM=`cat /proc/cpuinfo | grep "model name" | wc -l`   
  6. cd $path 
  7. tar -zxvf pcre-8.10.tar.gz 
  8. cd pcre-8.10/ 
  9. make clean 
  10. ./configure --disable-shared --with-pic 
  11. make && make install 
  12. cd ../ 
  13. tar -zxvf nginx-1.2.1.tar.gz  
  14. cd ./nginx-1.2.1/ 
  15. ./configure --prefix=$path_nginx --with-http_stub_status_module --with-http_ssl_module 
  16. make && make install 
  17. touch $path_nginx/html/index.php 
  18. process () {      
  19.     ZERO=`for((i=1;i<=$CORE_NUM;i++));do echo -n "0";done;`     
  20.     for (( i = $CORE_NUM; i > o; i-- )); do     
  21.         echo -n ${ZERO:0:$i-1}"1"${ZERO:$i}" "     
  22.     done     
  23. }  
  24. sed -i "s/worker_processes.*/worker_processes $CORE_NUM;
    worker_cpu_affinity $(process);/" $path_nginx/conf/nginx.conf    
  25. sed -i "s/#user.*/user www www;/" $path_nginx/conf/nginx.conf 
  26. sed -i "s/index.html index.htm;/index.php &/" $path_nginx/conf/nginx.conf 
  27. sed -i "47 a#
    location ~ \\\.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/\$fastcgi_script_name;
    include fastcgi_params;
    include fastcgi.conf;}#" $path_nginx/conf/nginx.conf 
  28.  
  29. ###### ########################## 
  30. sed -i "s/^http {/&
        server_tokens off;/" $path_nginx/conf/nginx.conf 
  31. ###################################nginx ######################################## 
  32. #sed -i "s#^path_nginx=.*#path_nginx=$path_nginx#" $path/nginxd 
  33. cp $path/nginxd /etc/init.d/ 
  34. mv $path_nginx/conf/nginx.conf $path_nginx/conf/nginx.conf.bak 
  35. mv $path/nginx.conf $path_nginx/conf 
  36. chmod 755 /etc/init.d/nginxd 
  37. chkconfig --add nginxd 
  38. chkconfig nginxd on 
  39. kill -9 `/usr/sbin/lsof -i:8140 | grep 8140 |awk '{print $2}'` 
  40. echo "############################################" 
  41. echo "                status              " 
  42. service nginxd start 
  43. service puppetmaster start 

注意:nginx.confの内容は以下の通りです.自分の環境に合わせて修正してください.
 

  
  
  
  
  1. user www www; 
  2. worker_processes 1; 
  3. worker_cpu_affinity 1 ; 
  4.  
  5. error_log  logs/error.log; 
  6. #error_log  logs/error.log  notice; 
  7. #error_log  logs/error.log  info; 
  8.  
  9. pid        /usr/local/nginx/nginx.pid; 
  10.  
  11.  
  12. events { 
  13.     worker_connections  1024; 
  14.  
  15.  
  16. http { 
  17.     server_tokens off; 
  18.     include       mime.types; 
  19.     default_type  application/octet-stream; 
  20.  
  21.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' 
  22.     #                  '$status $body_bytes_sent "$http_referer" ' 
  23.     #                  '"$http_user_agent" "$http_x_forwarded_for"'; 
  24.  
  25.     #access_log  logs/access.log  main; 
  26.  
  27.     sendfile        on; 
  28.     #tcp_nopush     on; 
  29.  
  30.     #keepalive_timeout  0; 
  31.     keepalive_timeout  65; 
  32.     upstream puppetmaster {    
  33.     server 127.0.0.1:18140;    
  34.     server 127.0.0.1:18141;    
  35.     server 127.0.0.1:18142;    
  36.     server 127.0.0.1:18143;    
  37.     server 127.0.0.1:18144;    
  38.     } 
  39.     #gzip  on; 
  40.     server {   
  41.     listen 8140;   
  42.     root /etc/puppet;   
  43.     access_log /usr/local/nginx/logs/puppet_access.log; 
  44.     error_log /usr/local/nginx/logs/puppet_error.log; 
  45.     ssl on;   
  46.     ssl_session_timeout 5m;   
  47.     # Puppetmaster    
  48.     ssl_certificate /var/lib/puppet/ssl/certs/server.domain.com.pem;   
  49.     ssl_certificate_key /var/lib/puppet/ssl/private_keys/server.domain.com.pem;   
  50.     ssl_client_certificate /var/lib/puppet/ssl/ca/ca_crt.pem;   
  51.     ssl_crl /var/lib/puppet/ssl/ca/ca_crl.pem;   
  52.     ssl_verify_client optional;   
  53.     # File sections   
  54.     location /production/file_content/files/ {   
  55.     types { }   
  56.     default_type application/x-raw;   
  57.     # , files    
  58.     alias /etc/puppet/files/;   
  59.     }      
  60.     # Modules files sections   
  61.     location ~ /production/file_content/modules/.+/ {   
  62.     root /etc/puppet/modules;   
  63.     types { }   
  64.     default_type application/x-raw;   
  65.     #rewrite ^/production/file_content/modules/(.+)/(.+)$ /$1/files/$2 break;   
  66.     rewrite ^/production/file_content/modules/([^/]+)/(.+)$ /$1/files/$2 break; 
  67.     }   
  68.     location / {   
  69.     # puppetmaster    
  70.     proxy_pass http://puppetmaster;   
  71.     proxy_redirect off;   
  72.     proxy_set_header Host $host;   
  73.     proxy_set_header X-Real-IP $remote_addr;   
  74.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
  75.     proxy_set_header X-Client-Verify $ssl_client_verify;   
  76.     proxy_set_header X-SSL-Subject $ssl_client_s_dn;   
  77.     proxy_set_header X-SSL-Issuer $ssl_client_i_dn;   
  78.     proxy_buffer_size 10m;   
  79.     proxy_buffers 1024 10m;   
  80.     proxy_busy_buffers_size 10m;   
  81.     proxy_temp_file_write_size 10m;   
  82.     proxy_read_timeout 120;   
  83.     }   
  84.    
  85.     }  

また、シナリオのnginxdとは、nginxの起動スクリプトのことで、以下の内容があります.
 

  
  
  
  
  1. #!/bin/sh 
  2. # nginx - this script starts and stops the nginx daemin 
  3. # chkconfig:   - 85 15  
  4. # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \ 
  5. #               proxy and IMAP/POP3 proxy server 
  6. # processname: nginx 
  7. # config:      /usr/local/nginx/conf/nginx.conf 
  8. # pidfile:     /usr/local/nginx/logs/nginx.pid 
  9.  
  10. # Source function library. 
  11. . /etc/rc.d/init.d/functions 
  12.  
  13. # Source networking configuration. 
  14. . /etc/sysconfig/network 
  15.  
  16. # Check that networking is up. 
  17. [ "$NETWORKING" = "no" ] && exit 0 
  18.  
  19. nginx="/usr/local/nginx/sbin/nginx" 
  20. prog=$(basename $nginx) 
  21.  
  22. NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" 
  23.  
  24. lockfile=/var/lock/subsys/nginx 
  25.  
  26. start() { 
  27.     [ -x $nginx ] || exit 5 
  28.     [ -f $NGINX_CONF_FILE ] || exit 6 
  29.     echo -n $"Starting $prog: " 
  30.     daemon $nginx -c $NGINX_CONF_FILE 
  31.     retval=$? 
  32.     echo 
  33.     [ $retval -eq 0 ] && touch $lockfile 
  34.     return $retval 
  35.  
  36. stop() { 
  37.     echo -n $"Stopping $prog: " 
  38.     killproc $prog -QUIT 
  39.     retval=$? 
  40.     echo 
  41.     [ $retval -eq 0 ] && rm -f $lockfile 
  42.     return $retval 
  43.  
  44. restart() { 
  45.     configtest || return $? 
  46.     stop 
  47.     start 
  48.  
  49. reload() { 
  50.     configtest || return $? 
  51.     echo -n $"Reloading $prog: " 
  52.     killproc $nginx -HUP 
  53.     RETVAL=$? 
  54.     echo 
  55.  
  56. force_reload() { 
  57.     restart 
  58.  
  59. configtest() { 
  60.   $nginx -t -c $NGINX_CONF_FILE 
  61.  
  62. rh_status() { 
  63.     status $prog 
  64.  
  65. rh_status_q() { 
  66.     rh_status >/dev/null 2>&1 
  67.  
  68. case "$1" in 
  69.     start) 
  70.         rh_status_q && exit 0 
  71.         $1 
  72.         ;; 
  73.     stop) 
  74.         rh_status_q || exit 0 
  75.         $1 
  76.         ;; 
  77.     restart|configtest) 
  78.         $1 
  79.         ;; 
  80.     reload) 
  81.         rh_status_q || exit 7 
  82.         $1 
  83.         ;; 
  84.     force-reload) 
  85.         force_reload 
  86.         ;; 
  87.     status) 
  88.         rh_status 
  89.         ;; 
  90.     condrestart|try-restart) 
  91.         rh_status_q || exit 0 
  92.             ;; 
  93.     *) 
  94.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 
  95.         exit 2 
  96. esac 

これで大体のシリーズシナリオは終わりました.
Puppetについては、実際にはfuncと組み合わせて使用することもできます.具体的なインストール過程は広さんのブログを探すことができます.
また、最近、saltという自動化された導入ツールがあることを知ったばかりで、最近テストしてもいい感じなので、勉強を続けることにしました.saltのインストールプロセスについてはすでにリリースされており、興味があれば一緒に勉強することができます.
OVER!!!!