如何使用Tungsten和MySQL代理设置多主机复制MySQL高可用性在Ubuntu 10.04.3 LTS

如何使用Tungsten和MySQL代理设置多主机复制MySQL高可用性在Ubuntu 10.04.3 LTS 本教程基于

如何在Ubuntu 10.04.3 LTS上使用钨和MySQL代理设置多主机复制用于MySQL高可用性

本教程基于我的经验,为客户端的生产设置设置了Tungsten Replicator和MySQL-Proxy。

我的设置

对于本教程,我将使用3个虚拟机

Web服务器1:web1 IP地址192.168.56.101
Master 1: master1 IP地址192.168.56.10
Master 2: master2 IP地址192.168.56.11

2.设置Web服务器

$ sudo su
$ tasksel

选择LAMP服务器,然后单击确定。

3.在Web服务器上配置MySQLProxy

$sudo apt-get -y install mysql-proxy

$vi /etc/default/mysql-proxy

ENABLED="true"
OPTIONS="--defaults-file=/root/mysql-proxy.cnf"

defaults-file选项应指向您保存/root/mysql-proxy.cnf的位置

[mysql-proxy]
daemon = true
proxy-address = 127.0.0.1:3305
proxy-skip-profiling = true
keepalive = true
event-threads = 50
pid-file = /var/run/mysql-proxy.pid
log-file = /var/log/mysql-proxy.log
log-level = debug
proxy-backend-addresses = 192.168.56.10:3306,192.168.56.11:3306
proxy-lua-script=/usr/lib/mysql-proxy/lua/proxy/balance.lua

我们不需要启动mysql-proxy,因为我们仍然需要配置我们的后端。

4.配置MySQL服务器

我实际上只配置了一个,只是在我设置完所有内容之后才克隆它,只是修改了/ etc / hostname / etc / hosts/ etc / network / interfaces来匹配第二个服务器的设置。

sudo su apt-get install -y mysql-server

5.准备用于钨复制器安装的MySQL服务器

主机要求可以在这里找到https://s3.amazonaws.com/releases.continuent.com/doc/replicator-2.0.4/html/Tungsten-Installation-Guide-mysql/content/ch05.html但是我已经准备了一个简短的列表,我必须配置以使我的设置工作。

MySQL

$ cat /etc/mysql/my.cnf

[mysqld]
# Master replication settings.
server-id=1
# set increment for up to 4 servers
auto_increment_increment = 4
# increment offset for this server, next server would be 2
auto_increment_offset = 1
log-bin=mysql-bin
# Required InnoDB parameter settings for Tungsten.  Buffer pool size may be 
# larger but should not be smaller for production deployments. 
innodb_buffer_pool_size = 512M
# Recommended InnoDB settings for Tungsten.  
default-table-type=InnoDB
innodb_flush_log_at_trx_commit=2
sync_binlog=0
# Recommended general settings.  max_allowed_packet must be greater than
# the size of the largest transaction. 
max_allowed_packet=48m

MySQL用户权限

Tungsten使用此帐户重新创建交易:

$ mysql -u root -p

mysql> grant all on *.* to tungsten@'%' identified by 'secret' with grant option;

红Gem

$ apt-get install -y ruby libopenssl-ruby

去测试:

$ echo "p 'hello'" | ruby -ropenssl

"hello"

JAVA虚拟机

$ apt-get install openjdk-6-jre
$ echo $JAVA_HOME # Should point to Sun JDK install location
$ java -version

如何设置您的JAVA_HOME

编辑/etc/bash.bashrc并在文件末尾附加以下内容。

JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export JAVA_HOME

重新加载bash设置:

$source /etc/bash.bashrc

网络

uname -n

应该解决主机的唯一名称。

hostname --ip-address

解决了真正的IP,私有IP被接受。

cat /etc/hosts

... 
192.168.56.10	master1 
192.168.56.11	master2 
...

SSH

基于证书的ssh登录用于运行钨的帐户,我使用root帐户。 用于设置钨的机器必须能够在没有密码的情况下使用其他机器。

$ sudo su
$ ssh-keygen
$ cat .ssh/id_rsa.pub

在其他机器上,将id_rsa.pub的内容复制到.ssh / authorized_keys

$ chmod 0600 .ssh/authorized_keys

6.安装钨复制器

您只需要在一台机器上安装钨,从那里可以安装其他节点的附加服务。

二进制构建下载:

$ wget http://tungsten-replicator.googlecode.com/files/tungsten-replicator-2.0.4.tar.gz
$ tar -zxvf tungsten-replicator-2.0.4.tar.gz
$ cd tungsten-replicator-2.0.4

我使用以下脚本来配置主服务器。

$ cat setup-masters.sh

#! /bin/bash
TUNGSTEN_HOME=/opt/replication
MASTER1=master1
MASTER2=master2
./tools/tungsten-installer \
    --master-slave \
    --master-host=$MASTER1 \
    --datasource-user=tungsten \
    --datasource-password=secret \
    --service-name=zoid \
    --home-directory=$TUNGSTEN_HOME \
    --cluster-hosts=$MASTER1 \
    --start-and-report
  ./tools/tungsten-installer \
    --master-slave \
    --master-host=$MASTER2 \
    --datasource-user=tungsten \
    --datasource-password=secret \
    --service-name=linus \
    --home-directory=$TUNGSTEN_HOME \
    --cluster-hosts=$MASTER2 \
    --start-and-report

运行上述脚本后,将会填充钨主目录,这是/ opt / replication / 。 在该文件夹内部执行脚本以设置每个主站的从属服务。 我们的设置基本是这样的:

主人1
主服务 - 主人1
从服务 - master2 - 从master1复制事件并将其传输到master2主服务

主人2
主服务 - master2
从服务 - master1 - 从master2复制事件并将其传输到master1主服务

$ cd /opt/replication/tungsten
$ cat setup-slaves.sh

#! /bin/bash
MASTER1=master1
MASTER2=master2
TUNGSTEN_TOOLS=tools
$TUNGSTEN_TOOLS/configure-service \
   --host $MASTER1 \
   -C -q \
   --local-service-name=zoid \
   --role=slave \
   --service-type=remote \
   --datasource=$MASTER1 \
   --master-thl-host=$MASTER2 \
   --svc-start linus
$TUNGSTEN_TOOLS/configure-service \
  --host $MASTER2 \
  -C -q \
  --local-service-name=linus \
  --role=slave \
  --service-type=remote \
  --datasource=$MASTER2 \
  --master-thl-host=$MASTER1 \
  --svc-start zoid

现在我们检查我们的服务是否正在运行。

root@master1:/opt/replication/tungsten# tungsten-replicator/bin/trepctl services

Processing services command...
NAME              VALUE
----              -----
appliedLastSeqno: 2296
appliedLatency  : 2.178
role            : slave
serviceName     : linus
serviceType     : remote
started         : true
state           : ONLINE
NAME              VALUE
----              -----
appliedLastSeqno: 1611
appliedLatency  : 0.953
role            : master
serviceName     : zoid
serviceType     : local
started         : true
state           : ONLINE
Finished services command...

master2上

root@master1:/opt/replication/tungsten# tungsten-replicator/bin/trepctl services

Processing services command...
NAME              VALUE
----              -----
appliedLastSeqno: 2296
appliedLatency  : 2.178
role            : slave
serviceName     : linus
serviceType     : remote
started         : true
state           : ONLINE
NAME              VALUE
----              -----
appliedLastSeqno: 1611
appliedLatency  : 0.953
role            : master
serviceName     : zoid
serviceType     : local
started         : true
state           : ONLINE
Finished services command...

7.启动MySQL代理

$ /etc/init.d/mysql-proxy start

验证它是否正在运行:

$ netstat -tulnap | grep 3305

8.测试复制

我们来测试一下phpmyadmin,下载并安装phpmyadmin并进行配置。 在您的浏览器中,请访问http://192.168.56.101/phpmyadmin/ ,并在服务器列表中,您可以连接到mysql-proxy和另外两个节点。 您现在可以测试并查看您的复制是否正常工作,您可以通过拔下其以太网连接来关闭一个节点,将数据写入另一个节点,然后重新打开另一个节点。

有关更多信息:

  • 钨访问他们的维基
  • Mysql Proxy访问其主页
$i++;
/* Authentication type */ 
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['port'] = '3305'; 
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
$i++;
/* Authentication type */ 
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = '192.168.56.10';
$cfg['Servers'][$i]['port'] = '3306'; 
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
$i++;
/* Authentication type */ 
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = '192.168.56.11';
$cfg['Servers'][$i]['port'] = '3306'; 
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;