Red Hat Cluster Manager: Руководство по установке и администрированию Red Hat Cluster Manager | ||
---|---|---|
Назад | Глава 5. Службы баз данных | Вперед |
Служба MySQL предоставляет данные приложению базы данных, обеспечивая при этом высокую степень доступности. Приложение может в свою очередь предоставить сетевой доступ к базе данных клиентским системам, например Web-серверам. В случае отказа службы, приложение обращается к данным общей базы данных, используя другую кластерную систему. Доступной по сети службе базы данных обычно назначается IP адрес, который переносится вместе со службой, таким образом сохраняется прозрачное подключение клиентов к данным.
В приведенном ниже примере службы MySQL:
Сервер MySQL и экземпляр базы данных располагаются в файловой системе, размещенной в дисковом разделе общего хранилища. При этом база данных и информация о состоянии выполнения, которая требуется для переноса, доступна для каждой кластерной системы. В этом примере, в точку /var/mysql подключена файловая система, расположенная в разделе общего диска /dev/sda1.
Службе MySQL присваивается IP адрес, для сетевого подключения клиентов к базе данных. Этот IP адрес будет автоматически переноситься на другой узел кластера в случае отказа службы. В приведённом примере, этот IP адрес равен 10.1.16.12.
Сценарий, используемый для запуска и остановки сервера MySQL, это стандартный сценарий init системы System V, настроенный на файловую систему, содержащую базу данных.
По умолчанию, подключение клиента к базе данных MySQL будет разорвано после восьми часов бездействия. Этот интервал можно изменить, установив значение переменной wait_timeout при запуске демона mysqld. Например, чтобы задать таймаут равным 4 часам, запустите демон MySQL следующим образом:
mysqld -O wait_timeout=14400 |
Чтобы определить, истек ли таймаут работы сервера MySQL, выполните команду mysqladmin version и проверьте время работы сервера. Выполните запрос еще раз, чтобы автоматически подключиться к серверу.
В зависимости от версии Linux, при таймауте MySQL-сервера генерируется одно из сообщений:
CR_SERVER_GONE_ERROR CR_SERVER_LOST |
Пример сценария, запускающего и останавливающего сервер MySQL, приведенный ниже, расположен в файле /usr/share/cluster/doc/services/examples/mysql.server:
#!/bin/sh # Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB # This file is public domain and comes with NO WARRANTY of any kind # Mysql daemon start/stop script. # Usually this is put in /etc/init.d (at least on machines SYSV R4 # based systems) and linked to /etc/rc3.d/S99mysql. When this is done # the mysql server will be started when the machine is started. # Comments to support chkconfig on RedHat Linux # chkconfig: 2345 90 90 # description: A very fast and reliable SQL database engine. PATH=/sbin:/usr/sbin:/bin:/usr/bin basedir=/var/mysql bindir=/var/mysql/bin datadir=/var/mysql/var pid_file=/var/mysql/var/mysqld.pid mysql_daemon_user=root # Run mysqld as this user. export PATH mode=$1 if test -w / # determine if we should look at the root config file then # or user config file conf=/etc/my.cnf else conf=$HOME/.my.cnf # Using the users config file fi # The following code tries to get the variables safe_mysqld needs from the # config file. This isn't perfect as this ignores groups, but it should # work as the options doesn't conflict with anything else. if test -f "$conf" # Extract those fields we need from config file. then if grep "^datadir" $conf > /dev/null then datadir=`grep "^datadir" $conf | cut -f 2 -d= | tr -d ' '` fi if grep "^user" $conf > /dev/null then mysql_daemon_user=`grep "^user" $conf | cut -f 2 -d= | tr -d ' ' | head -1` fi if grep "^pid-file" $conf > /dev/null then pid_file=`grep "^pid-file" $conf | cut -f 2 -d= | tr -d ' '` else if test -d "$datadir" then pid_file=$datadir/`hostname`.pid fi fi if grep "^basedir" $conf > /dev/null then basedir=`grep "^basedir" $conf | cut -f 2 -d= | tr -d ' '` bindir=$basedir/bin fi if grep "^bindir" $conf > /dev/null then bindir=`grep "^bindir" $conf | cut -f 2 -d=| tr -d ' '` fi fi # Safeguard (relative paths, core dumps..) cd $basedir case "$mode" in 'start') # Start daemon if test -x $bindir/safe_mysqld then # Give extra arguments to mysqld with the my.cnf file. This script may # be overwritten at next upgrade. $bindir/safe_mysqld --user=$mysql_daemon_user --pid-file=$pid_file --datadir=$datadir & else echo "Can't execute $bindir/safe_mysqld" fi ;; 'stop') # Stop daemon. We use a signal here to avoid having to know the # root password. if test -f "$pid_file" then mysqld_pid=`cat $pid_file` echo "Killing mysqld with pid $mysqld_pid" kill $mysqld_pid # mysqld should remove the pid_file when it exits. else echo "No mysqld pid file found. Looked for $pid_file." fi ;; *) # usage echo "usage: $0 start|stop" exit 1 ;; esac |
В следующем примере показано, как с помощью cluadmin добавить службу MySQL.
cluadmin> service add The user interface will prompt you for information about the service. Not all information is required for all services. Enter a question mark (?) at a prompt to obtain help. Enter a colon (:) and a single-character command at a prompt to do one of the following: c - Cancel and return to the top-level cluadmin command r - Restart to the initial prompt while keeping previous responses p - Proceed with the next prompt Currently defined services: databse1 apache2 dbase_home mp3_failover Service name: mysql_1 Preferred member [None]: devel0 Relocate when the preferred member joins the cluster (yes/no/?) [no]: yes User script (e.g., /usr/foo/script or None) [None]: \ /etc/rc.d/init.d/mysql.server Do you want to add an IP address to the service (yes/no/?): yes IP Address Information IP address: 10.1.16.12 Netmask (e.g. 255.255.255.0 or None) [None]: [Return] Broadcast (e.g. X.Y.Z.255 or None) [None]: [Return] Do you want to (a)dd, (m)odify, (d)elete or (s)how an IP address, or are you (f)inished adding IP addresses: f Do you want to add a disk device to the service (yes/no/?): yes Disk Device Information Device special file (e.g., /dev/sda1): /dev/sda1 Filesystem type (e.g., ext2, reiserfs, ext3 or None): ext2 Mount point (e.g., /usr/mnt/service1 or None) [None]: /var/mysql Mount options (e.g., rw, nosuid): rw Forced unmount support (yes/no/?) [no]: yes Do you want to (a)dd, (m)odify, (d)elete or (s)how devices, or are you (f)inished adding device information: f Disable service (yes/no/?) [no]: yes name: mysql_1 disabled: yes preferred node: devel0 relocate: yes user script: /etc/rc.d/init.d/mysql.server IP address 0: 10.1.16.12 netmask 0: None broadcast 0: None device 0: /dev/sda1 mount point, device 0: /var/mysql mount fstype, device 0: ext2 mount options, device 0: rw force unmount, device 0: yes Add mysql_1 service as shown? (yes/no/?) y Added mysql_1. cluadmin> |