amoeba高可用mysql_MMM+Amoeba搭建MySQL高可用负载均衡群集

本文详细介绍了如何利用MMM和Amoeba搭建MySQL高可用集群,包括主从复制、读写分离和负载均衡。通过在虚拟机环境中模拟六台服务器的配置,实现了双主双从架构,确保数据的安全性和服务的连续性。在遇到单点故障时,VIP会自动迁移,保证系统的高可用性。
摘要由CSDN通过智能技术生成

MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。MySQL的读写分离就是只在主服务器上写,只在从服务器上读。基本原理就是让主数据库处理事务性查询,而从服务器处理select查询。数据库复制被用来事务性查询导致的变更同步到群集中的从数据库。

Amoeba主要为应用层访问MySQL时充当sql路由,并具有负载均衡、高可用性、SQL过滤、读写分离、可路由相关到目标数据库、可并发请求多台数据库。通过Amoeba能够完成数据源的高可用、负载均衡和数据切片等功能。

MMM(MySQL主主复制管理器)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个Slave的read负载均衡。

amooeba在实际使用中存在单点故障的问题,所以在学习了MMMM之后,我就尝试了使用mmm+amoeba的架构来避免主库的单点故障,接下来我就为大家在虚拟机上模拟服务的搭建过程

项目环境

使用六台服务器模拟搭建,拓扑图如下:

虚拟机规划

主机

操作系统

IP地址

VIP

主要软件

Master1

CentOS-7

192.168.100.101

192.168.100.200

mysql-5.7、mysql-mmm

Master1

CentOS-7

192.168.100.102

192.168.100.200

mysql-5.7、mysql-mmm

Slave1

CentOS-7

192.168.100.111

192.168.100.166

mysql-5.7、mysql-mmm

Slave2

CentOS-7

192.168.100.112

192.168.100.188

mysql-5.7、mysql-mmm

Amoeba

CentOS-7

192.168.100.130

MMM

CentOS-7

192.168.100.120

mysql-mmm

项目实施

安装MySQL

本次实验中我所使用的MySQL版本为MySQL5.7,有关于mysql5.7的安装方式,请参考Centos7中编译安装MySQL(mysql-5.7)

搭建MySQL-MMM双主双从架构

之前我有写过一篇MariaDB-MMM高可用群集,MariaDB与MySQL同属一脉。MariaDB是完全兼容MySQL的,包括API和命令行,使其能轻松成为MySQL的代替品,所以有关于MMM的搭建方式自然也是一样的,请参考前文。

经过本人手动测试,方法都是共通的,关于搭建MySQL-MMM架构与MariaDB-MMM唯一的不同点就是/etc/my.cnf配置文件的修改.[mysqld]修改为如下内容。

[mysqld]

user = mysql

basedir = /usr/local/mysql

datadir = /usr/local/mysql/data

port = 3306

character_set_server=utf8

pid-file = /usr/local/mysql/mysqld.pid

socket = /usr/local/mysql/mysql.sock

server-id = 1

binlog-ignore-db=mysql,information_schema

log_bin=mysql_bin

log_slave_updates=true

sync_binlog=1

auto_increment_increment=2

auto_increment_offset=1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

搭建MySQL读写分离

MySQL的主从复制在搭建MMM架构时已经完成,此时我们只需要利用Amoeba搭建读写分离即可。

建立时间同步

建立时间同步环境,在Master1上搭建时间同步服务器

yum -y install ntp

配置NTP服务器

修改ntp配置文件,添加配置。

vim /etc/ntp.conf

server 127.127.100.0 //本地是时钟源,本地地址为192.168.100.101,此处地址则也为100段

fudge 127.127.100.0 stratum 8 //stratum 8 时间层级为8(限制在15内)

关闭防火墙

systemctl disable firewalld.service

systemctl stop firewalld.service

setenforce 0

启动服务

systemctl start ntpd

在master2、slave1、slave2上进行时间同步

yum -y install ntp ntpdate //若是使用centos7系统,一般都已默认安装

systemctl stop firewalld.service

setenforce 0

systemctl start ntpd //三台服务器的创建方式一致

/usr/sbin/ntpdate 192.168.100.101 //与主服务器进行时间同步,IP地址为主服务器地址

搭建Amoeba服务器

关闭防火墙及selinux

systemctl stop firewalld.service

setenforce 0

安装环境(jdk1.6)

cp /opt/jdk-6u14-linux-x64.bin /usr/local/

cd /usr/local

./jdk-6u14-linux-x64.bin

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=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin

export AMOEBA_HOME=/usr/local/amoeba

export PATH=$PATH:$AMOEBA_HOME/bin

#source /etc/profile //刷新使环境变量立即生效

安装amoeba

tar zxf /opt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba

chmod -R 755 /usr/local/amoeba/ //解压即完成安装

/usr/local/amoeba/bin/amoeba //测试amoeba是否安装成功

在MySQL上为Amoeba授权

这里授权的账户和密码是方便amoeba连接后台数据库所设置的密码,只需授权一主两从即可,双主之间是相互复制的,数据都会完全同步。用户名和密码自定义。

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

配置Amoeba服务器

修改/usr/local/amoeba/conf/amoeba.xml

amoeba

123456 //访问amoeba的账户和密码

master

master

slaves

修改/usr/local/amoeba/conf/dbServers.xml

修改的是Amoeba访问数据库的用户名和密码,因为系统默认的用户是test,当你不使用默认账号时,就需要对默认账号进行注释,或者修改为“mysql”

mysql //修改或者直接删除

chen

123123

设置数据库服务器地址

//数据库名称master

192.168.100.200 //此处填写的为VIP地址,方便故障切换

192.168.100.166 //slave1,地址为vip地址

192.168.100.188 //slave2,地址为VIP地址

//读数据库池

1 //1 代表轮询

slave1,slave2 //包括slave1,slave2

启动Amoeba

/usr/local/amoeba/bin/amoeba start&

netstat -anpt | grep java

测试可用性

安装mysql客户端

yum install -y mysql

登陆测试

测试是否正常访问

mysql -u amoeba -p123456 -h 192.168.100.130 -P8066 //IP地址为amoeba服务器地址

show databases;

测试数据是否同步

use python

create table java (id int,name varchar(10),sorce decimal(5,2)); //在python库中创建java表

登陆各台服务器,python库中的Java表都存在,则表明双主双重同步成功

测试读写分离

insert into java (id,name,sorce) values (1,'master',1);//在master1表中插入一条数据

insert into java (id,name,sorce) values (2,'slave1',2);//在slave1表中插入一条数据

insert into java (id,name,sorce) values (3,'slave2',3);//在slave2表中插入一条数据

mysql -u amoeba -p123456 -h 192.168.100.130 -P8066

use python

select * from java; //登陆amoeba查看数据库中数据

测试单点故障

systemctl stop mysqld //关闭master1

VIP 发生迁移

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值