实验1 (MySQL主从异步复制备份案例)环境 一主两从
MySQL-master 192.168.200.111
MySQL-slave1 192.168.200.112
MySQL-slave2 192.168.200.113
所有服务器关闭防火墙
所有服务器安装 yum -y install mariadb mariadb-server
systemctl start mariadb //启动mariadb
建立时间同步环境,在主服务器上安装配置NTP时间同步服务器
主:yum -y install ntpdate
vim /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 startum 8
systemctl start ntpd
修改配置文件:vim /etc/my.cnf
[mysqld]
server_id=1
log-bin=mysql-binlog
log-slave-updates=true
systemctl restart mariadb
mysql 登录数据库
给从服务器授权
MariaDB [(none)]> grant replication slave on *.* to 'slave'@'192.168.200.%' identified by '123123';
MariaDB [(none)]> flush privileges;
配置从服务器
yum -y install ntpdate
ntpdate
[mysqld]
server-id=2 #主从服务器的server-id不能相同!,两个从的server-id也不能一样
relay-log=relay-log-bin ##开启中继日志
relay-log-index=slave-relay-bin.index
systemctl restart mariadb
mysql #登录MySQL
MariaDB [(none)]> change master to master_host='192.168.200.111',master_user='slave',master_password='123123',master_log_file='mysql-binlog.000001',master_log_pos=245;
MariaDB [(none)]> start slave; #开启主从复制功能
MariaDB [(none)]> show slave status\G;
测试,在111上创建数据库,看看从服务器是否写入
二。Amoeba实现MySQL读写分离
实验环境:
192.168.200.111 MySQL-master
192.168.200.112 MySQL-slave1
192.168.200.113 MySQL-slave2
192.168.200.114 Amoeba
192.168.200.115 客户机
先实现MySQL数据库的主从复制,方法见上面所写
1.安装Amoeba上安装Java环境 (推荐安装jdk1.5,或1.6,不建议安装1.7版本)
需要的软件包有
amoeba-mysql-binary-2.2.0.tar.gz
jdk-6u14-linux-x64.bin
chmod +x jdk-6u14-linux-x64.bin
./jdk-6u14-linux-x64.bin
一路空格,输入yes,回车完成
mv jdk1.6.0_14/ /usr/local/jdk1.6
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export AMOEBA_HOME=/usr/local/amoeba/
export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile
java -version
查看版本是不是1.6
如果不是rm -rf /usr/bin/java
安装配置Amoeba
mkdir /usr/local/amoeba
tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
3.配置amoeba实现mysql-slave1,mysql-slave2读负载均衡
在三台MySQL服务器上对amoeba授权
MariaDB [(none)]> grant all on *.* to 'admin'@'192.168.200.%' identified by '123123';
cd /usr/local/amoeba/conf/
MariaDB [(none)]> flush privileges;
编辑配置amoeba.xml配置文件,设置读写分离
cp amoeba.xml amoeba.xml.bak
vim amoeba.xml
11 <property name="port">8066</property> //默认端口8066,无需修改
30 <property name="user">amoeba</property> //设置一个用户,后面客户端访问时使用
32 <property name="password">123123</property> //设置登录密码
115 <property name="defaultPool">master</property> //默认的服务器池
117 <property name="writePool">master</property> //写服务器池
118 <property name="readPool">slaves</property> //读服务器池
有些上面有注释<!-- --> ,把他删掉
编辑dbServer.xml配置文件,设置登录MySQL服务器的用户及密码,MySQL服务器节点的IP地址,负载均衡算法
cp dbServers.xml dbServers.xml.bak
vim dbServers.xml
20 <property name="port">3306</property> //设置MySQL连接端口,默认为3306
26 <property name="user">admin</property> //设置访问MySQL服务器所用的用户名
29 <property name="password">123123</property> //设置访问MySQL服务器所用的密码
45 <dbServer name="master" parent="abstractServer"> //设置MySQL服务器及IP地址
48 <property name="ipAddress">192.168.200.111</property> //主MySQL服务器IP地址
52 <dbServer name="slave1" parent="abstractServer">
55 <property name="ipAddress">192.168.200.112</property> //从服务器slave1 IP地址
58 <dbServer name="slave2" parent="abstractServer">
61 <property name="ipAddress">192.168.200.113</property> //从服务器slave 2 IP地址
因为没有slave2的配置,所以复制 slave1 的配置 ,添加并修改
65 <dbServer name="slaves" virtual="true"> // 服务器池
71 <property name="poolNames">slave1,slave2</property> //前面定义的服务器节点名
4. 启动amoeba
/usr/local/amoeba/bin/amoeba start &
netstat -lnpt | grep 8066
5.测试
此时的三台MySQL服务器是主从备份
在mysql-master 创建db_test 库及该库下的test表
MariaDB [(none)]> create database db_test;
MariaDB [db_test]> create table test(id int(10),name varchar(20));
可以在112和113上查看该库
show databases;
在112和113 服务器上停止主从备份
MariaDB [(none)]> stop slave;
在111上添加表内容
MariaDB [db_test]> insert into test values('1','master');
此前在服务器上同步了表,所以在从服务器上可以直接手动插入其他内容
在slave1 上:
MariaDB [(none)]> insert into db_test.test values('2','slave1');
在slave2上:
MariaDB [(none)]> insert into db_test.test values('3','slave2');
在客户机115上进行读测试:
yum -y install mariadb
mysql -uamoeba -p123123 -h 192.168.200.114 -P8066
(1) 读测试
(2)写测试:
MySQL [(none)]> insert into db_test.test values('4','clieent');
在master服务器上查看是否写入:
实验完成