linux:pgpouncer

文書の過去の版を表示しています。


PgBouncer

 PgBouncer は、PostgreSQL へのコネクションをプールして、接続時間や接続を管理するのに必要なリソースを、劇的に減少させる事ができる。

  1. libevent より libevent をダウンロードする。
    $ mkdir ~/work
    $ cd ~/work
    $ curl -L -O https://github.com/downloads/libevent/libevent/libevent-2.0.20-stable.tar.gz
  2. ファイルを解凍する。
    $ tar zxvf libevent-2.0.20-stable.tar.gz
  3. libevent のビルドとインストールを行う。
    $ cd libevent-2.0.20-stable
    $ ./configure
    $ make
    $ sudo make install
  4. libevent をシステムに登録するための定義ファイルを作成する。
    $ sudo vi /etc/ld.so.conf.d/libevent2-x86_64.conf
    /usr/local/lib/
  5. libevent をシステムに登録する。
    $ sudo ldconfig
  1. PgFoundry: PgBouncer: ファイルリスト より PgBouncer をダウンロードする。
    $ mkdir ~/work
    $ cd ~/work
    $ curl -O http://pgfoundry.org/frs/download.php/3369/pgbouncer-1.5.3.tar.gz
  2. ファイルを解凍する。
    $ tar zxvf pgbouncer-1.5.3.tar.gz
  3. PgBouncer のビルドとインストールを行う。
    $ cd pgbouncer-1.5.3
    $ ./configure --prefix=/usr/local --with-libevent=/usr/local
    $ make
    $ sudo make install
  4. ディレクトリを作成する。
    $ sudo mkdir -p /var/log/pgbouncer
    $ sudo mkdir -p /var/run/pgbouncer
  5. 実行ユーザーを作成する。
    $ sudo useradd pgbouncer
  6. オーナーとパーミッションの設定を行う。
    $ sudo chown pgbouncer:pgbouncer /var/log/pgbouncer
    $ sudo chown pgbouncer:pgbouncer /var/run/pgbouncer
  7. rc スクリプトを作成する。
    $ sudo vi /etc/rc.d/init.d/pgbouncer

    <sxh bash>

#!/bin/sh # pgbouncer This is the init script for starting up the pgbouncer # # chkconfig: - 64 36 # description: Starts and stops the pgbouncer daemon. # # processname: pgbouncer # pidfile: /var/run/pgbouncer/pgbouncer.pid # # v2.0 Devrim GUNDUZ devrim@CommandPrompt.com # - Adjust order of startup and kill. # # v2.1 Devrim GUNDUZ devrim@gunduz.org # - Fix chkconfig line # - Start pgbouncer in daemon mode, so that it won't log twice # - to the same log file. # # v2.2 Devrim GUNDUZ devrim@gunduz.org # - Sleep 2 seconds before getting pid during start(), like # we do in PostgreSQL init script, to avoid false positive # startup errors.

# Source function library. INITD=/etc/rc.d/init.d . $INITD/functions

# Get function listing for cross-distribution logic. TYPESET=`typeset -f|grep “declare”`

# Get config. . /etc/sysconfig/network

# Find the name of the script NAME=`basename $0` if [ ${NAME:0:1} = “S” -o ${NAME:0:1} = “K” ] then

      NAME=${NAME:3}

fi

# For SELinux we need to use 'runuser' not 'su' if [ -x /sbin/runuser ] then

  SU=runuser

else

  SU=su

fi

# Override defaults from /etc/sysconfig/pgbouncer if file is present [ -f /etc/sysconfig/${NAME} ] && . /etc/sysconfig/${NAME}

# Check that networking is up. [ “${NETWORKING}” = “no” ] && exit 0

script_result=0

start(){

      BOUNCER_START=$"Starting ${NAME} service: "
      # Make sure startup-time log file is valid
      if [ ! -e "$BOUNCERLOG" -a ! -h "$BOUNCERLOG" ]
      then
              touch "$BOUNCERLOG" || exit 1
              chown pgbouncer:pgbouncer "$BOUNCERLOG"
              chmod go-rwx "$BOUNCERLOG"
              [ -x /usr/bin/chcon ] && /usr/bin/chcon -u system_u -r object_r -t postgresql_log_t "$BOUNCERLOG" 2>/dev/null
      fi
      # Make sure that pgbouncer is not already running:
      if [ -f /var/run/${NAME}/${NAME}.pid ]
      then
              echo "${NAME} is already running"
              echo_failure
              echo
              exit 1
      fi
      echo -n "$BOUNCER_START"
      [ -d /var/run/${NAME} ] || mkdir /var/run/${NAME}
      chown pgbouncer:pgbouncer /var/run/${NAME}
      $SU -l pgbouncer -c "pgbouncer -d '$BOUNCERCONF' & " >> "$BOUNCERLOG" 2>&1 < /dev/null
      sleep 2
      pid=`pidof -s pgbouncer`
      if [ $pid ]
      then
        success "$BOUNCER_START"
        touch /var/lock/subsys/${NAME}
        echo
      else
        failure "$BOUNCER_START"
        echo
        script_result=1
      fi

}

stop(){

      echo -n $"Stopping ${NAME} service: "
      if [ -f /var/run/${NAME}/${NAME}.pid ]
      then
              kill -TERM `cat "/var/run/${NAME}/${NAME}.pid"`
              ret=$?
              if [ $ret -eq 0 ]
              then
                      echo_success
              else
                      echo_failure
                      script_result=1
              fi
              echo
                rm -f "/var/run/${NAME}/${NAME}.pid"
                rm -f "/var/lock/subsys/${NAME}"
      else
              echo "   ${NAME} is not running."
              echo_failure
              echo
              exit 1
      fi

}

restart(){

  stop
  start

}

condrestart(){

  [ -e /var/lock/subsys/${NAME} ] && restart

}

condstop(){

  [ -e /var/lock/subsys/${NAME} ] && stop

}

reload(){

  $SU -l pgbouncer -c "kill -HUP `cat /var/run/${NAME}/${NAME}.pid`" > /dev/null 2>&1 < /dev/null

} pause(){

  $SU -l pgbouncer -c "kill -USR1 `cat /var/run/${NAME}/${NAME}.pid`" > /dev/null 2>&1 < /dev/null

} resum(){

 $SU -l pgbouncer -c "kill -USR2 `cat /var/run/${NAME}/${NAME}.pid`" > /dev/null 2>&1 < /dev/null

} # See how we were called. case “$1” in

start)
      start
      ;;
stop)
      stop
      ;;
status)
      status pgbouncer
      script_result=$?
      ;;
restart)
      restart
      ;;
pause)
      pause
      ;;
continue)
      resum
      ;;
condrestart)
      condrestart
      ;;
condstop)
      condstop
      ;;
reload|force-reload)
      reload
      ;;
*)
      echo $"Usage: $0 {start|stop|status|restart|pause|continue|reload|force-reload|condrestart|condstop}"
      exit 1

esac

exit $script_result </sxh>

  • linux/pgpouncer.1352287782.txt.gz
  • 最終更新: 2019/05/18 02:23
  • (外部編集)