一.项目实验拓扑图;
二.项目实验思路及重点内容(步骤及重难知 识点);
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 |
Linux1、linux2 的 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 dvd1、dvd2 两光盘的软件包组合; |
重点二 | heartbeat (Linux-HA)的工作原理:heartbeat 最核心的包括两个部分,心跳 监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持 冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的 时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模 块来接管运 行在对方主机上的资源或者服务。 |
重点三 | DRBD (Distributed Replicated Block Device,分布式复制块设备)叫做分布式 复制块设备,这是一种基于软件,无共享,复制的解决方案。在服务器之间的 块设备(包括硬盘、分区、逻辑卷)进行镜像。也就是说当某一个应用程序完 成写操作后,它提交的数据不仅仅会保存在本地块设备上,DRBD 也会将这份数 据复制一份,通过网络传输到另一个节点的块设备上,这样,两个节点上的块 设备上的数据将会保存一致,这就是镜像功能。DRBD 相当于一网络 RID1 卷。 drbd 共有两部分组成:内核模块和用户空间的管理工具。 DRBD 具有如下特性: 1)实时性:当某个应用程序完成对数据的修改时,复制功能立即发生 2)透明性:应用程序的数据存储在镜像块设备上是独立透明的,他们的数据在 两个节点上都保存一份,因此,无论哪一台服务器宕机,都不会影响应用程序 读取数据的操作,所以说是透明的。 3)同步镜像和异步镜像:同步镜像表示当应用程序提交本地的写操作后,数据 后会同步写到两个节点上去;异步镜像表示当应用程序提交写操作后,只有当 本地的节点上完成写操作后,另一个节点才可以完成写操作。 |
| DRBD 的三种协议: 协议 A:本地完成写入,且数据包已在发送队列中,则认为写入完成。 在一 个节点发生故障时,可能发生数据丢失。常用与物理上分开的节点。 协议 B.本地完成写入,并收到远程主机的收到数据确认后,则认为写入完成。 在两个节点同时发生故障时,可能发生数据丢失。因为在数据传输过程中, 数据未必能提交到磁盘。 协议 C.本地完成写入,并收到远程主机的写入确认后,则认为写入完成。 没有任何数据丢失,因此这是最常用的模式。 |
重点四 | 对于 web,db,负载均衡(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
-
-
-
- linux1
- 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
-
-
-
- linux1
- linux2
- slave1
- slave2
- 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
-
-
-
- linux1
- linux2
- slave1
- slave2
- 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
-
-
-
- linux1
- linux2
- slave1
- slave2
- 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
- log-bin=mysql-bin
- 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
- log-bin=mysql-bin
- log-slave-updates=true
:wq
Ø 配置 slave1 与 slave2 两个从节点的复制服务(注意 server-id 不同);
[root@slave1 ~]# vi /etc/my.cnf 7 server-id=2
- relay-log=relay-log-bin
- 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
- <property name="writePool">master</property> ## 注意删除<!--
-->的注释
- <property name="readPool">slaves</property>
:set nu ##显示行号
:wq
[root@amoeba ~]# vim/usr/local/amoeba/conf/dbServers.xml
-
- <!-- mysql user -->
- <property name="user">linuxfan</property> ##该用户必 须是上一步授权的用户
27
- <!-- mysql password --> ##修改
- <property name="password">123123</property> ##删除下 一行的“-->”
- <dbServer name="master" parent="abstractServer"> ##修改为 master
- <factoryConfig>
- <!-- mysql ip -->
- <property name="ipAddress">192.168.100.253</property>
##指定正确的 master 的 ip
- <dbServer name="slave1" parent="abstractServer"> ##修改为 slave1
- <factoryConfig>
- <!-- mysql ip -->
- <property name="ipAddress">192.168.100.152</property>
##指定 slave1 的 ip 地址
- </factoryConfig>
- </dbServer>
- <dbServer name="slave2" parent="abstractServer"> ##添加如下 6 行,指定
slave2 的 ip
- <factoryConfig>
- <!-- mysql ip -->
- <property name="ipAddress">192.168.100.153</property>
- </factoryConfig>
- </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