Heartbeat+DRBD+mysql+Amoeba 集群

.项目实验拓扑图; 

 

 

.项目实验思路及重点内容(步骤及重难知 识点); 

 

1.环境: 

主机 

操作系统 

ip 地址 

主要软件 

linux1

Centos 6.5

添加一块硬盘 sdb

192.168.100.150

heartbeat-3.0.4-2.el6. x86_64 (1).rpm

drbd-8.4.3.tar.gz mysql-server-5.1.71-1

.el6.x86_64

linux2

Centos 6.5

添加一块硬盘 sdb

192.168.100.151

heartbeat-3.0.4-2.el6. x86_64 (1).rpm

drbd-8.4.3.tar.gz mysql-server-5.1.71-1

.el6.x86_64

slave1

Centos 6.5

192.168.100.152

mysql-server-5.1.71-1

.el6.x86_64

slave2

Centos 6.5

192.168.100.153

mysql-server-5.1.71-1

.el6.x86_64

 

amoeba

Centos 6.5

192.168.100.154

amoeba-mysql-binary

-2.2.0.tar.gz

jdk-6u14-linux-x64.bi n

Linux1linux2  VIP 地址 

 

192.168.100.253

 

客户端 

Centos 6.5

192.168.100.156

mysql 客户端 

 

2.实施步骤: 

步骤 

说明 

第一步 

在所有 mysql 节点上安装 mysql 软件程序,并且设置域名解析以及

ntp 同步时间; 

第二步 

分别在 linux1  linux2 两个节点上安装 drbd  heartbaet 程序;

第三步 

分别配置 linux1  linux2 两个节点上的 drbd 服务; 

第四步 

分别配置在 linux1  linux2 两个节点的 drbd 块设备; 

第五步 

 linux1 节点初始化 drbd 设备,测试挂载; 

第六步 

 linux2 节点上进行测试挂载; 

第七步 

配置 linux1 节点的 mysql 服务数据文件的存放位置为 drbd 块设备

的挂载点; 

第八步 

 drbd 块设备由 linux1 切换到 linux2,并访问测试 mysql 中数

据; 

第九步 

配置 linux1 节点的 heartbeat 服务实现高可用; 

第十步 

配置 linux2 节点的 heartbeat 服务实现高可用; 

第十一步 

配置 linux1 主节点的复制服务; 

第十二步 

配置 linux2 主节点的复制服务; 

第十三步 

配置 slave1  slave2 两个从节点的复制服务(注意 server-id 

同); 

第十四步 

 linux 主节点授权允许 amoeba 连接; 

第十五步 

安装并配置 amoeba 代理程序; 

第十六步 

客户端验证主从复制; 

第十七步 

客户端验证读写分离; 

 

 

3.重点、难点: 

重点一 

所有主机的 YUM 仓库源位置指定的都是统一的环境 192.168.100.100  ftp  

务器,服务器目录为 centos6.5 dvd1dvd2 两光盘的软件包组合; 

 

 

重点二 

heartbeat Linux-HA)的工作原理:heartbeat 最核心的包括两个部分,心跳 

监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持  余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的 时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模 块来接管运 行在对方主机上的资源或者服务。 

重点三 

DRBD Distributed Replicated Block Device,分布式复制块设备)叫做分布式 

复制块设备,这是一种基于软件,无共享,复制的解决方案。在服务器之间的 块设备(包括硬盘、分区、逻辑卷)进行镜像。也就是说当某一个应用程序完 成写操作后,它提交的数据不仅仅会保存在本地块设备上,DRBD 也会将这份数 据复制一份,通过网络传输到另一个节点的块设备上,这样,两个节点上的块 设备上的数据将会保存一致,这就是镜像功能。DRBD 相当于一网络 RID1 卷。 drbd 共有两部分组成:内核模块和用户空间的管理工具。 

DRBD 具有如下特性: 

1)实时性:当某个应用程序完成对数据的修改时,复制功能立即发生 

2)透明性:应用程序的数据存储在镜像块设备上是独立透明的,他们的数据在 两个节点上都保存一份,因此,无论哪一台服务器宕机,都不会影响应用程序 读取数据的操作,所以说是透明的。 

3)同步镜像和异步镜像:同步镜像表示当应用程序提交本地的写操作后,数据 后会同步写到两个节点上去;异步镜像表示当应用程序提交写操作后,只有当 本地的节点上完成写操作后,另一个节点才可以完成写操作。 

 

 

DRBD 的三种协议: 

协议 A:本地完成写入,且数据包已在发送队列中,则认为写入完成。 在一 个节点发生故障时,可能发生数据丢失。常用与物理上分开的节点。 

协议 B.本地完成写入,并收到远程主机的收到数据确认后,则认为写入完成。 在两个节点同时发生故障时,可能发生数据丢失。因为在数据传输过程中, 

数据未必能提交到磁盘。 

协议 C.本地完成写入,并收到远程主机的写入确认后,则认为写入完成。 没有任何数据丢失,因此这是最常用的模式。 

重点四 

对于 webdb,负载均衡(lvs,haproxy,nginx)等,heartbeat  keepalived 都可 

以实现; 

mysql 双主多从,NFS/MFS 存储,他们的特点是需要数据同步,这样的业务最 好使用 heartbeat,因为 heartbeat 有自带的 drbd 脚本。 

 

 

 

 

 

 

.项目实验步骤(操作截图或者操作命令) 

Ø 在所有 mysql 节点上安装 mysql 软件程序,并且设置域名解析以及 ntp 同步时间;

[root@linux1 ~]# yum -y install mysqlmysql-server [root@linux1 ~]# vi /etc/hosts

        1. linux1
        2. linux2

 

server 127.127.1.0

fudge 127.127.1.0 stratum 8 END

[root@linux1 ~]# /etc/init.d/ntpd restart [root@linux1 ~]# chkconfig ntpd on [root@linux1 ~]# netstat -utpln |grep ntp

 

[root@linux2 ~]# yum -y install mysqlmysql-server [root@linux2 ~]# vi /etc/hosts

        1. linux1
        2. linux2
        3. slave1
        4. slave2
        5. amoeba

[root@linux2 ~]# yum -y install ntpdate [root@linux2 ~]# /usr/sbin/ntpdate 192.168.100.150

 

[root@slave1 ~]# yum -y install mysqlmysql-server [root@slave1 ~]# /etc/init.d/mysqld start [root@slave1 ~]# vi /etc/hosts

        1. linux1
        2. linux2
        3. slave1
        4. slave2
        5. amoeba

[root@slave1 ~]# yum -y install ntpdate [root@slave1 ~]# /usr/sbin/ntpdate 192.168.100.150

 

[root@slave2 ~]# yum -y install mysqlmysql-server [root@slave2 ~]# /etc/init.d/mysqld start [root@slave2 ~]# vi /etc/hosts

        1. linux1
        2. linux2
        3. slave1
        4. slave2
        5. amoeba

[root@slave2 ~]# yum -y install ntpdate

 

[root@slave2 ~]# /usr/sbin/ntpdate 192.168.100.150

 

 

  • 分别在 linux1  linux2 两个节点上安装 drbd  heartbeat 软件程序; [root@linux1 ~]# yum -y install perl-TimeDate cluster-glue-libs kernel-devel kernel-headers flex resource-agents

[root@linux1 ~]# mount /dev/cdrom/mnt/ [root@linux1 ~]# cd /mnt/Packages/

[root@linux1 Packages]# rpm -ivh PyXML-0.8.4-19.el6.x86_64.rpm [root@linux1 Packages]# rpm -ivh cluster-glue-1.0.5-6.el6.x86_64.rpm [root@linux1 Packages]# cd

[root@linux1 ~]# rpm -ivh heartbeat-libs-3.0.4-2.el6.x86_64\ \(1\).rpm --nodeps [root@linux1 ~]# rpm -ivh heartbeat-3.0.4-2.el6.x86_64\ \(1\).rpm  [root@linux1 ~]# tar zxvf drbd-8.4.3.tar.gz

[root@linux1 ~]# cd drbd-8.4.3

[root@linux1 drbd-8.4.3]# ./configure --prefix=/usr/local/drbd --with-km --with-heartbeat [root@linux1 drbd-8.4.3]# make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64/ &&make install [root@linux1 drbd-8.4.3]# echo $?

[root@linux1 drbd-8.4.3]# mkdir -p /usr/local/drbd/var/run/drbd [root@linux1 drbd-8.4.3]# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d/ [root@linux1 drbd-8.4.3]# chkconfig --add drbd

[root@linux1 drbd-8.4.3]# cd drbd [root@linux1 drbd]# make clean

[root@linux1 drbd]# make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64/ [root@linux1 drbd]# echo $?

 

Ø 分别配置 linux1  linux2 两个节点上的 drbd 服务;

[root@linux1 drbd]# cp drbd.ko /lib/modules/2.6.32-431.el6.x86_64/kernel/lib/ [root@linux1 drbd]# depmod ##加载上述 lib 文件

[root@linux1 drbd]# cp -R /usr/local/drbd/etc/ha.d/resource.d/* /etc/ha.d/resource.d/ ##

复制 drbd 的样例资源配置文件到 heartbeat 的目录

[root@linux1 drbd]# cd /usr/local/drbd/etc/drbd.d/

[root@linux1 drbd.d]# cat /usr/local/drbd/etc/drbd.conf ##主配置文件中的*.res  文件为 资源文件

# You can find an example in /usr/share/doc/drbd.../drbd.conf.example

 

include "drbd.d/global_common.conf"; include "drbd.d/*.res";

[root@linux1 drbd.d]# cp global_common.conf{,-$(date+%s)} ##备份全局配置文件

[root@linux1 drbd.d]# ls

global_common.conf global_common.conf-1502485489 r0.res

 

[root@linux1 drbd.d]# modprobe drbd ##加载系统 drbd 模块 

[root@linux1 drbd.d]# lsmod |grep drbd

 

[root@linux1 drbd.d]# vi  global_common.conf ##编辑全局配置文件 global {

usage-count yes; ##是否对使用信息做统计

}

common {

startup {

wfc-timeout 120; ##在启用 DRBD 块时,初始化脚本 drbd 会阻塞启动进程的 运行,直到对等节点的出现。该选项就是用来限制这个等待时间的,默认为 0,即不限制, 永远等待。

degr-wfc-timeout 120; ##也是用于限制等待时间,只是作用的情形不同:它作 用于一个降级集群(即那些只剩下一个节点的集群)在重启时的等待时间。

}

options {

# cpu-mask on-no-data-accessible

}

disk {

on-io-error detach; ##配置 I/O 错误处理策略为分离

}

net {

protocol C; ##使用 drbd 的同步协议,第三种

}

}

[root@linux1 drbd.d]# vi  r0.res ##指定节点的配置文件 resource r0 {

on linux1 {

device /dev/drbd0; ##逻辑设备名称 disk /dev/sdb1; ##物理设备名称

address  192.168.100.150:7788; ##指定主节点 ip 地址和端口 

meta-disk internal; ##源数据的存放方式 

}

on linux2 {

device /dev/drbd0; disk /dev/sdb1;

address  192.168.100.151:7788;

meta-disk internal;

}

}

 

 

 

Ø 分别配置在 linux1  linux2 两个节点上的 drbd 块设备;

 

[root@linux1 drbd.d]# fdisk/dev/sdb ##为添加到 drbd 的物理设备分区

n--p--1--回车--回车--p--w

[root@linux1 drbd.d]# yum -y install parted [root@linux1 drbd.d]# partprobe /dev/sdb [root@linux1 drbd.d]# partprobe/dev/sdb1

[root@linux1 drbd.d]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=1 [root@linux1 drbd.d]# drbdadm create-mdr0 ##创建 r0 设备, 此处确保主机名必须为 linux1 和 linux2,不然导致失败

[root@linux1 drbd.d]# /etc/init.d/drbd start [root@linux1 drbd.d]# netstat -anpt |grep 7788

 

Ø linux1  节点初始化 drbd 设备,测试挂载;

[root@linux1 drbd.d]# drbdadm -- --overwrite-data-of-peer primary r0 [root@linux1 drbd.d]# cat /proc/drbd ##等待 100% [root@linux1 drbd.d]# mkfs.ext4 /dev/drbd0

[root@linux1 drbd.d]# mkdir /mysqldata

[root@linux1 drbd.d]# mount /dev/drbd0 /mysqldata/ [root@linux1 drbd.d]# mount

[root@linux1 drbd.d]# ls /mysqldata/

[root@linux1 drbd.d]# echo benet >/mysqldata/file [root@linux1 drbd.d]# ls /mysqldata/

[root@linux1 drbd.d]# umount /dev/drbd0 ##卸载分区 [root@linux1 drbd.d]# drbdadm secondary  r0 ##进行降级 

 

Ø  linux2 节点进行测试挂载;

[root@linux2 ~]# drbdadm primary r0 ##升级设备 r0 [root@linux2 ~]# mkdir /mysqldata

[root@linux2 ~]# mount /dev/drbd0 /mysqldata/ [root@linux2 ~]# ls /mysqldata/

[root@linux2 ~]# umount /dev/drbd0

[root@linux2 ~]# drbdadm secondary r0 ##降级设备 r0

 

Ø 配置 linux1 节点的 mysql 服务数据文件的存放位置为 drbd 块设备的挂载点;

[root@linux1 ~]# drbdadm primary r0 [root@linux2 ~]# mount /dev/drbd0 /mysqldata/ [root@linux1 ~]# vi /etc/my.cnf

2 datadir=/mysqldata/mysql

:wq

[root@linux1 ~]# chown -R mysql:mysql /mysqldata [root@linux1 ~]# chkconfig mysqld on

[root@linux1 ~]# /etc/init.d/mysqld start ##将 mysql 初始化的文件初始化到 drbd 设备

[root@linux1 ~]# mysqladmin -uroot password 123123 [root@linux1 ~]# mysql -uroot -p123123

mysql> create database auth; mysql> exit

[root@linux1 ~]# /etc/init.d/mysqld stop

 

[root@linux1 ~]# umount /dev/drbd0 [root@linux1 ~]# drbdadm secondary r0

 

  •  drbd 设备由 linux1 切换到 linux2,并访问测试 mysql 中数据;

[root@linux2 ~]# drbdadm primary r0 [root@linux2 ~]# mount /dev/drbd0 /mysqldata/ [root@linux2 ~]# vi /etc/my.cnf

2 datadir=/mysqldata/mysql

[root@linux2 ~]# chown mysql:mysql /mysqldata/ -R [root@linux2 ~]# /etc/init.d/mysqld restart [root@linux2 ~]# mysql -uroot -p123123

mysql> show databases; mysql> exit

 

  • 配置 linux1 节点的 heartbeat 服务实现高可用;

[root@linux1 drbd.d]# cd /usr/share/doc/heartbeat-3.0.4/

[root@linux1 heartbeat-3.0.4]# cp ha.cf authkeys haresources /etc/ha.d/ [root@linux1 heartbeat-3.0.4]# cd/etc/ha.d/

[root@linux1 ha.d]# vi ha.cf 29 logfile /var/log/ha-log

34 logfacility local0

48 keepalive 2 ##多长时间检测一次

56 deadtime 10 ##连接多长时间后,判定为对方挂掉

61 warntime 5 ##连续多长时间没有联系开始警告提示

71 initdead 100 ##主要是给重启后预留的一段忽略时间

76 udpport 694 ##UDP 端口 

121 ucast eth0 192.168.100.151 ##填写对方 linux2 的主机 ip 地址

157 auto_failback on ##节点修复后是否切换回来

 

 

211 node

linux1

##节点名称

212 node

linux2

##节点名称

253 respawn hacluster /usr/lib64/heartbeat/ipfail ##控制 IP 切换的程序

:wq

[root@linux1 ha.d]# vi haresources

150 linux1 IPaddr::192.168.100.253/24/eth0:0 drbddisk::r0 Filesystem::/d ev/drbd0::/mysqldata::ext4  mysqld

###此为一行,注意主机名,VIP    地址,挂载点和设备名,分区文件系统类型、服务类型 

:wq

[root@linux1 ha.d]# vi authkeys ##文件 authkeys 决定了配置心跳的加密方式认证密钥。 共有三种认证方式:crc,md5,和 sha1。如果您的 Heartbeat 运行于安全网络之上,如本例 中的交叉线,可以使用 crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全, 但您也希望降低 CPU 使用,则使用 md5。最后,如果您想得到最好的认证,而不考虑 CPU 使用情况,则使用 sha1,它在三者之中最难破解。 

23 auth 1 ##开启认证

24 1 crc ##认证风湿为 crc

:wq

 

[root@linux1 ha.d]# chmod 600 authkeys ##此文件权限必须为 600,不然 heartbeat

启 动失败

[root@linux1 ha.d]# /etc/init.d/heartbeat start    ##因为设置的是 10s  所以等待十秒后会出现

VIP

[root@linux1 ha.d]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host

valid_lft forever preferred_lft  forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:29:7c:9c brd ff:ff:ff:ff:ff:ff

inet 192.168.100.150/24 brd 192.168.100.255 scope global eth0

inet 192.168.100.253/24 brd 192.168.100.255 scope global secondary eth0:0 inet6 [root@linux1 ha.d]# netstat -utpln |grep 694

udp 0 0 0.0.0.0:694 0.0.0.0:* 23119/heartbeat: wr [root@linux1 ha.d]# vimchk_mysql.sh

#!/bin/bash mysql="/etc/init.d/mysqld" while true

do

mysqlpid=$(ps -C mysqld --no-header | wc -l) if [ $mysqlpid -eq 0 ];then

$mysql start sleep 3

mysqlpid=$(ps -C mysqld --no-header | wc -l) if [ $mysqlpid -eq 0 ];then

/etc/init.d/heartbeat stop

echo "heartbeat stopped,please check your mysql !" | tee -a /var/log/messages sleep 2

   /etc/ha.d/expect.sh 192.168.100.151 root pwd@123 "/etc/init.d/mysqld restart" fi

fi done

[root@linux1 ha.d]# vi /etc/ha.d/expect.sh

#!/usr/bin/expect

set ip [lindex $argv 0] set user [lindex $argv 1]

set password [lindex $argv 2] set com [lindex $argv 3]

set timeout 10

spawn ssh $user@$ip $com expect {

"*yes/no" { send "yes\r"; exp_continue} "*password:" { send "$password\r" }

}

interact

[root@linux1 ha.d]# chmod +x /etc/ha.d/expect.sh [root@linux1 ha.d]# sh chk_mysql.sh &

[root@linux1 ha.d]# echo “bash chk_mysql.sh &” >> /etc/rc.local

 

 

  • 配置 linux2 节点的 heartbeat 服务实现高可用;

[root@linux2 drbd.d]# cd /usr/share/doc/heartbeat-3.0.4/

[root@linux2 heartbeat-3.0.4]# cp ha.cf authkeys haresources /etc/ha.d/ [root@linux2 heartbeat-3.0.4]# cd/etc/ha.d/

[root@linux2 ha.d]# vim ha.cf 29 logfile /var/log/ha-log

34 logfacility local0

48 keepalive 2 ##多长时间检测一次

56 deadtime 10 ##连接多长时间后,判定为对方挂掉

61 warntime 5 ##连续多长时间没有联系开始警告提示

71 initdead 100 ##主要是给重启后预留的一段忽略时间

76 udpport 694 ##UDP 端口 

121 ucast eth0 192.168.100.150 ##填写对方 linux1 的主机 ip 地址

157 auto_failback on ##节点修复后是否切换回来

 

 

211 node

linux1

##节点名称

212 node

linux2

##节点名称

253 respawn hacluster /usr/lib64/heartbeat/ipfail ##控制 IP 切换的程序

:wq

[root@linux2 ha.d]# vi haresources

150 linux2 IPaddr::192.168.100.253/24/eth0:0 drbddisk::r0 Filesystem::/dev/drbd0::/mysqldata::ext4  mysqld

###此为一行,注意主机名,VIP    地址,挂载点和设备名,分区文件系统类型、服务类型 

:wq

[root@linux2 ha.d]# vi authkeys 23 auth 1

24 1 crc

:wq

[root@linux2 ha.d]# chmod 600 authkeys [root@linux2 ha.d]# /etc/init.d/heartbeat start [root@linux2 ha.d]# netstat -utpln |grep 694 [root@linux2 ha.d]# vimchk_mysql.sh

#!/bin/bash mysql="/etc/init.d/mysqld" while true

do

mysqlpid=$(ps -C mysqld --no-header | wc -l) if [ $mysqlpid -eq 0 ];then

$mysql start sleep 3

mysqlpid=$(ps -C mysqld --no-header | wc -l) if [ $mysqlpid -eq 0 ];then

/etc/init.d/heartbeat stop

echo "heartbeat stopped,please check your mysql !" | tee -a /var/log/messages sleep 2

   /etc/ha.d/expect.sh 192.168.100.150 root pwd@123 "/etc/init.d/mysqld restart" fi

fi done

 

[root@linux2 ha.d]# vi /etc/ha.d/expect.sh

#!/usr/bin/expect

set ip [lindex $argv 0] set user [lindex $argv 1]

set password [lindex $argv 2] set com [lindex $argv 3]

set timeout 10

spawn ssh $user@$ip $com expect {

"*yes/no" { send "yes\r"; exp_continue} "*password:" { send "$password\r" }

}

interact

[root@linux2 ha.d]# chmod +x /etc/ha.d/expect.sh [root@linux2 ha.d]# sh chk_mysql.sh &

[root@linux2 ha.d]# echo “bash chk_mysql.sh &” >> /etc/rc.local

 

Ø 配置 linux1 主节点的复制服务;

[root@linux1 ~]# vi

/etc/my.cnf 7 server-id=1

  1. log-bin=mysql-bin
  2. log-slave-updates=true

:wq

[root@linux1 ~]# /etc/init.d/mysqld restart [root@linux1 ~]# mysql -uroot -p123123

mysql> grant replication slave on *.* to 'myslave'@'192.168.100.%' identified by '123456'; mysql> flush privileges;

mysql> show master status;

+------------------+----------+--------------+-------------

-----+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000008 | 106 | | |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec) mysql> exit

 

Ø 配置 linux2 主节点的复制服务;

[root@linux2 ~]# vi/etc/my.cnf 7 server-id=1

  1. log-bin=mysql-bin
  2. log-slave-updates=true

:wq

 

Ø 配置 slave1  slave2 两个从节点的复制服务(注意 server-id 不同);

[root@slave1 ~]# vi /etc/my.cnf 7 server-id=2

  1. relay-log=relay-log-bin
  2. relay-log-index=slave-relay-bin.index

:wq

 [root@slave1 ~]# mysql -uroot -p123123 mysql>stop slave;

 

mysql> change master to master_host='192.168.100.253',master_user='myslave',master_password='123456',master_log_f ile='mysql-bin.000008',master_log_pos=106;

mysql> start slave;

mysql> show slave status\G;

*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.100.253 Master_User: myslave Master_Port: 3306

Connect_Retry: 60 Master_Log_File: mysql-bin.000008

Read_Master_Log_Pos: 106 Relay_Log_File: relay-log-bin.000002 Relay_Log_Pos: 251

Relay_Master_Log_File: mysql-bin.000008 Slave_IO_Running: Yes Slave_SQL_Running: Yes

mysql> exit

 

Ø  linux 1 节点中授权允许 amoeba 连接;

[root@linux1 ~]# mysql -uroot -p123123

mysql> grant all on *.* to linuxfan@'192.168.100.%' identified by '123123'; mysql> flush privileges;

mysql> show grants for 'linuxfan'@'192.168.100.%'; mysql>exit

 

Ø 安装并配置 amoeba 代理程序;

[root@amoeba ~]# wget ftp://192.168.100.100/tools/amoeba-mysql-binary-2.2.0.tar.gz [root@amoeba ~]# wget ftp://192.168.100.100/tools/jdk-6u14-linux-x64.bin [root@amoeba ~]# yum -y remove java

[root@amoeba ~]# chmod +x jdk-6u14-linux-x64.bin [root@amoeba ~]# ./jdk-6u14-linux-x64.bin [root@amoeba ~]# mv jdk1.6.0_14/ /usr/local/jdk1.6 [root@amoeba ~]# vi /etc/profile

export JAVA_HOME=/usr/local/jdk1.6

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin export  AMOEBA_HOME=/usr/local/amoeba

export PATH=$PATH:$AMOEBA_HOME

:wq

[root@amoeba ~]# source /etc/profile [root@amoeba ~]# java -version [root@amoeba ~]# mkdir /usr/local/amoeba

[root@amoeba ~]# tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ [root@amoeba ~]# chmod -R 755 /usr/local/amoeba/

[root@amoeba ~]# vim/usr/local/amoeba/conf/amoeba.xml

30 <property

 

name="user">amoeba</property> ##设置客户端连接代理服务器的用户密码 31

32 <property

name="password">123456</property>

115 <property   name="defaultPool">master</property> 116

  1. <property name="writePool">master</property> ## 注意删除<!--

-->的注释

  1. <property name="readPool">slaves</property>

:set nu ##显示行号

:wq

[root@amoeba ~]# vim/usr/local/amoeba/conf/dbServers.xml

    1. <!-- mysql user -->
    2. <property name="user">linuxfan</property> ##该用户必 须是上一步授权的用户

27

  1. <!-- mysql password --> ##修改
  2. <property name="password">123123</property> ##删除下 一行的“-->”

 

  1. <dbServer name="master" parent="abstractServer"> ##修改为 master
  2. <factoryConfig>
  3. <!-- mysql ip -->
  4. <property name="ipAddress">192.168.100.253</property>

##指定正确的 master 的 ip

 

  1. <dbServer name="slave1" parent="abstractServer"> ##修改为 slave1
  2. <factoryConfig>
  3. <!-- mysql ip -->
  4. <property name="ipAddress">192.168.100.152</property>

##指定 slave1 的 ip 地址 

  1. </factoryConfig>
  2. </dbServer>

 

  1. <dbServer  name="slave2" parent="abstractServer"> ##添加如下 6 行,指定 

slave2 的 ip

  1. <factoryConfig>
  2. <!-- mysql ip -->
  3. <property name="ipAddress">192.168.100.153</property>
  4. </factoryConfig>
  5. </dbServer>

64 <dbServer name="slaves"  virtual="true"> ##修改为 slaves

70 <property    name="poolNames">slave1,slave2</property> ##

修改集群的成员名称用逗号隔开

:wq

[root@amoeba ~]# /usr/local/amoeba/bin/amoeba start& ##后台启动代理服务 [root@amoeba ~]# netstat -utpln |grep 8066 ##验证

 

Ø 客户端验证主从复制;

 

[root@lwh ~]# mysql -uamoeba -p123456 -h 192.168.100.154 -P 8066   ## 登陆 amoeba

代理服务器的 ip 地址端口等

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| a |

| auth |

| autha |

| mysql |

| test |

+--------------------+

6 rows in set (0.04 sec) mysql> use a;

Database changed

mysql> create table linuxfan(id int(10),name varchar(10),address varchar(20)); Query OK, 0  rows affected (0.08 sec)

mysql> exit

 

[root@linux1 ~]# mysql -uroot -p123123 mysql> use a;

mysql> show tables;

+-------------+

| Tables_in_a |

+-------------+

| linuxfan |

+-------------+

1 row in set (0.00 sec) mysql> exit

 

[root@slave1 ~]# mysql -uroot -p123123 mysql> use a;

mysql> show tables;

+-------------+

| Tables_in_a |

+-------------+

| linuxfan |

+-------------+

1 row in set (0.00 sec) mysql> exit

 

[root@slave2 ~]# mysql -uroot -p123123

 

mysql> use a; mysql> show tables;

+-------------+

| Tables_in_a |

+-------------+

| linuxfan |

+-------------+

1 row in set (0.00 sec) mysql> exit

 

Ø 客户端验证读写分离; [root@linux1 ~]# mysql -uroot -p123123 mysql> use a;

mysql> insert into linuxfan values(1,'hehe','this ismaster');

mysql> exit

 

[root@slave1 ~]# mysql -uroot -p123123 mysql> stop slave;

mysql> insert into linuxfan values(2,'hehe','this is slave1'); mysql> use a;

mysql> exit

 

[root@slave2 ~]# mysql -uroot -p123123 mysql> stop slave;

mysql> use a;

mysql> insert into linuxfan values(3,'hehe','this is slave2'); mysql> exit

 

[root@lwh ~]# mysql -uamoeba -p123456 -h 192.168.100.154 -P 8066 mysql> use a;

mysql> select * from linuxfan;

+------+------+----------------+

| id | name | address |

+------+------+----------------+

| 2 | hehe | this is slave1 |

+------+------+----------------+

1 row in set (0.23 sec)

mysql> select * from linuxfan;

+------+------+----------------+

 

 

 

| id | name | address |

+------+------+----------------+

| 3 | hehe | this is slave2 |

 

+------+------+----------------+

1 row in set (0.23 sec) mysql> exit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值