如何在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和另外两个节点。 您现在可以测试并查看您的复制是否正常工作,您可以通过拔下其以太网连接来关闭一个节点,将数据写入另一个节点,然后重新打开另一个节点。
有关更多信息:
$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;