Как установить Repcached (Memcached репликация) для более 2 узлов на Ubuntu 11.04

Рейтинг:  1 / 5

Звезда активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

UbuntuЭто краткое руководство на основе практическими рекомендациями MarcusSpiegel найденых здесь. Это, как покроет недостающие части для установки Repcached на сервере Ubuntu 11.04. Это копировать/вставить дружественных учебник это, используя замазку сделает это намного проще.

Это, как покажет вам, как установить и построить Memcached с репликацией, создать сценарий запуска и настройки PHP использовать Memcache для сессий, а не хранить их в виде файлов. Это руководство предполагает, что вы создали 2 серверов для репликации информации закончена.

Моя установка

В этой демонстрации я буду создания repcache на 2 хозяев, они будут иметь как Lighttpd и repcache на них установлены.

  • Веб-сервер 1: server1.example.com , IP-адрес: 10.10.20.10; Это будет называться server1.
  • Веб-сервер 2: server2.example.com , IP-адрес: 10.10.20.11 ; Это будет называться server2 .

Установка repcache

Прежде всего, необходимо посетить repcached.lab.klab.org и скачать последнюю версию (последняя на момент написания: 2.2-1.2.8). После загрузки файла tar, мы должны установить некоторые дополнительные пакеты. Выполните это это на обоих узлах.

  • apt-get install libevent-dev g++ make

Отсюда мы можем продолжить установку:

  • tar xvf memcached-1.2.8-repcached-2.2.tar
  • cd memcached-1.2.8-repcached-2.2/
  • ./configure --enable-replication
  • make
  • make install

Настройка repcache

Repcache теперь устанавливается, бинарные располож/usr/local/bin/memcachedached. Отсюда мы создадим конфигурационный файл и сценарий запуска. Выполните это на обоих узлах. Сначала откройте файл:

  • nano /etc/memcachedrep

Затем введите следующую, не забудьте изменить IP адрес в конце. Этот IP будет другой сервер на который Вы хотите, повторять.

## extra commandline options to start memcached in replicated mode
# -x < ip_addr > hostname or IP address of the master replication server
# -X < num > TCP port number of the master (default: 11212)
DAEMON_ARGS="-m 64 -p 11211 -u root -P /var/run/memcachedrep.pid -d -x 10.10.20.11"

После сохранения файла мы должны создать сценарий.

  • nano /etc/init.d/memcachedrep
#! /bin/sh
### BEGIN INIT INFO
# Provides:             memcached
# Required-Start:       $syslog
# Required-Stop:        $syslog
# Should-Start:         $local_fs
# Should-Stop:          $local_fs
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    memcached - Memory caching daemon replicated
# Description:          memcached - Memory caching daemon replicated
### END INIT INFO
# Author: Michael <Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.>
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="memcachedrep"
NAME=memcached
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="--options args"
PIDFILE=/var/run/memcachedrep.pid
SCRIPTNAME=/etc/init.d/$DESC
VERBOSE="yes"
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/$DESC ] && . /etc/$DESC
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
        || return 1
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
        $DAEMON_ARGS \
        || return 2
    # Add code here, if necessary, that waits for the process to be ready
    # to handle requests from services started subsequently which depend
    # on this one.  As a last resort, sleep for some time.
}
#
# Function that stops the daemon/service
#
do_stop()
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    #   other if a failure occurred
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    # Wait for children to finish too if this is a daemon that forks
    # and if the daemon is only ever run from this initscript.
    # If the above conditions are not satisfied then add some other code
    # that waits for the process to drop all resources that could be
    # needed by services started subsequently.  A last resort is to
    # sleep for some time.
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
    [ "$?" = 2 ] && return 2
    # Many daemons don't delete their pidfiles when they exit.
    rm -f $PIDFILE
    return "$RETVAL"
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
    #
    # If the daemon can reload its configuration without
    # restarting (for example, when it is sent a SIGHUP),
    # then implement that here.
    #
    start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
    return 0
}
case "$1" in
  start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
    do_start
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  stop)
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    do_stop
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  #reload|force-reload)
    #
    # If do_reload() is not implemented then leave this commented out
    # and leave 'force-reload' as an alias for 'restart'.
    #
    #log_daemon_msg "Reloading $DESC" "$NAME"
    #do_reload
    #log_end_msg $?
    #;;
  restart|force-reload)
    #
    # If the "reload" option is implemented then remove the
    # 'force-reload' alias
    #
    log_daemon_msg "Restarting $DESC" "$NAME"
    do_stop
    case "$?" in
      0|1)
        do_start
        case "$?" in
            0) log_end_msg 0 ;;
            1) log_end_msg 1 ;; # Old process is still running
            *) log_end_msg 1 ;; # Failed to start
        esac
        ;;
      *)
          # Failed to stop
        log_end_msg 1
        ;;
    esac
    ;;
  *)
    #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
    exit 3
    ;;
esac
:</Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.>

Сохраните введитя следующем:

  • chmod +x /etc/init.d/memcacherep
  • update-rc.d memcachedrep defaults

Это позволит запускать repcache каждый раз, когда сервер перезагружается.

Тестирование

Прежде чем мы продолжен мы будем тестировать, что 2 узлов выполняют репликацию.

server1:

  • telnet 127.0.0.1 11211

Затем введите:

  • set foo 0 0 3
  • bar

Вы должны увидеть слово STORED появившееся под ним. Введите:

  • quit

и он вернется к консоли. Перейдите на другой сервер и введите следующее.

server2:

  • telnet 127.0.0.1 11211

Затем введите:

  • get foo

и она должна возвратить значение, введенное на первом сервере. Если это так, то репликация работает.

Настройка PHP

Здесь я покажу Вам, как установить PHP использовать кэше. Потому что я использую Lighttpd каталогов могут отличаться от тех, кто использует apache2 или Nginx. Введите следующее в консоли и повторить для вторичного сервера.

  • nano /etc/php5/cgi/php.ini

Поиск по файлу вниз, пока не найдете следующее:

[Session]
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
session.save_handler = files

Вам нужно будет изменить этj чтобы выглядело следующим образом:

[Session]
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
extension = memcache.so
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"

Как только эти было сохранено просто введите (не забудьте изменить это программное обеспечение, которое Вы используете для хостинга):

  • /etc/init.d/lighttpd force-reload

Теперь просто перезагрузите оба сервера. И можно проверить, что PHP использует их правильно, создав на одной сессии и чтение этой сессии на другом.