Centos7中MySQL5.7服务群集(实现主从复制、读写分离功能)
2018-07-10 19:38
676 查看
根据上一博文我们了解到在MySQL群集中主从复制服务详解,本文将结合MySQL服务器主从复制同步服务实现读写分离操作。
当业务量非常大时,一台服务器的性能无法满足需求,就可以通过配置主从复制实现读写分离来分摊负载,避免因负载太高而造成无法及时响应请求。
用于主从服务器之间时间同步,保证所有数据库复制及同步在同一时间点。保证复制同步的及时以及准确性。
Amoeba代理服务软件
Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。
yum install ntp -y //安装ntp软件,若没有,请用yum安装
vim /etc/ntp.conf
末行添加:
关闭防火墙,开启服务
systemectl stop firewalld.service
setenforce 0
systemctl start ntpd.service
vim /etc/my.cnf
重启服务
systemctl restart mysqld.service
设置主从复制账户验证
mysql -u root -p
到此,主服务器设置完成。
yum install ntp -y
关闭防火墙,开启服务,进行与主服务器时间同步
systemctl stop firewalld.service
setenforce 0
systemctl start ntpd.service
/usr/sbin/ntpdate 192.168.100.102 //进行时间同步
mysql -u root -p
另一从服务器配置类上。
setenforce 0
cp jdk-6u14-linux-x64.bin /usr/local/ //将JDK安装命令复制到系统中
./jdk-6u14-linux-x64.bin //执行安装
安装完成后,在/usr/local下可看到一个jdk工作目录,将目录重命名,方便后面工作目录指定
mv jdk1.6.0_14/ /usr/local/jdk1.6
将Java环境加入环境变量
vim /etc/profile
source /etc/profile //刷新环境变量
创建amoeba工作目录
mkdir /usr/local/amoeba
解压软件包
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
显示amoeba start|stop说明安装成功
mysql -u root -p
grant all on . to 'test'@'192.168.100.%' identified by '123.com';
vim conf/amoeba.xml //amoeba主配置文件
配置amoeba访问数据库配置文件
vim conf/dbServers.xml
启动amoeba服务,查看启动状态
/usr/local/amoeba/bin/amoeba start&
netstat -anpt | grep java
当查看到amoeba可以监听所有MySQL服务器时即表示配置成功。
yum install mysql -y
mysql -u amoeba -p123456 -h 192.168.100.101 -P8066
此上,通过amoeba代理服务软件实现了MySQL数据库服务的读写分离。
为什么要实现读写分离操作?
在MySQL数据库中,在存储数据过程中,我们需要为不同数据类型以及表类型引用不同的存储引擎,比如MyISAM和InnoDB存储引擎。而这些存储引擎提供的读写机制会使得行或者表锁定,当用户访问调取数据时,若后台工作人员正在修改数据,导致行表锁定,进而使得客户端服务中断,带来的损失不可估量,进而需要实现修改数据与读取数据分割,而不影响服务。当业务量非常大时,一台服务器的性能无法满足需求,就可以通过配置主从复制实现读写分离来分摊负载,避免因负载太高而造成无法及时响应请求。
MySQL读写分离原理
简而言之,读写分离要实现的功能就是在主服务器上写入数据,只在从服务器上读取数据。基本原理是让主数据库处理事务性查询,而从数据库处理select查询。数据库复制被用来把事务性查询导致的变更同步到群集中的从数据库。实验部署
实验环境拓扑
实验操作环境
主机 | 系统环境 | IP地址 | 操作软件 |
---|---|---|---|
Amoeba | centos7.3 x86_64 | 192.168.100.101 | Amoeba |
MySQL主 | centos7.3 x86_64 | 192.168.100.102 | ntp、MySQL 5.7 |
MySQL从1 | centos7.3 x86_64 | 192.168.100.103 | ntp、MySQL 5.7 |
MySQL从2 | centos7.3 x86_64 | 192.168.100.104 | ntp、MySQL 5.7 |
MySQL-client | Redhat6.5 x86_64 | 192.168.100.105 | MySQL 5.5 |
软件功能简介
ntp时间同步软件用于主从服务器之间时间同步,保证所有数据库复制及同步在同一时间点。保证复制同步的及时以及准确性。
Amoeba代理服务软件
Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。
主服务器设置
设置时间同步
MySQL主服务器为时间源yum install ntp -y //安装ntp软件,若没有,请用yum安装
vim /etc/ntp.conf
末行添加:
server 127.127.100.0 //本地是时钟源,请注意本机所在网段是100 fudge 127.127.100.0 stratum 8 //设置时间层级为8(限制在15内)
关闭防火墙,开启服务
systemectl stop firewalld.service
setenforce 0
systemctl start ntpd.service
安装MySQL
请参见MySQL5.7安装主服务器的主从复制配置
开启二进制日志vim /etc/my.cnf
server-id = 11 //设置主服务器ID号 log-bin=master-bin //主服务器日志文件// log-slave-updates=true //从服务器更新二进制日志//
重启服务
systemctl restart mysqld.service
设置主从复制账户验证
mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.100.%' IDENTIFIED BY '123456'; //赋予从服务器同步权限 FLUSH PRIVILEGES; //刷新MySQL命令,使立即生效 show master status; //查看主状态 +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | master-bin.000002 | 339 | | | +-------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
到此,主服务器设置完成。
从服务器设置
从服务器不论有多少个,除了每一个服务器本身IP地址不一样以及在MySQL配置文件中server-id不同,其他配置主从复制完全相同。设置时间同步
安装ntp软件yum install ntp -y
关闭防火墙,开启服务,进行与主服务器时间同步
systemctl stop firewalld.service
setenforce 0
systemctl start ntpd.service
/usr/sbin/ntpdate 192.168.100.102 //进行时间同步
安装MySQL5.7
设置slave状态
vim /etc/my.cnfserver-id = 22 //修改ID号,切记!每一个MySQL服务器都不一样 relay-log=relay-log-bin //从主服务器上同步日志文件记录到本地 relay-log-index=slave-relay-bin.index //定义relay-log的位置和名称
mysql -u root -p
change master to master_host='192.168.100.101',master_user='myslave',master_password='123456',master_log_file='master-bin.000002',master_log_pos=339; start slave; show slave status\G; //查看状态//
另一从服务器配置类上。
配置Amoeba服务实现读写分离
systemctl stop firewalld.servicesetenforce 0
cp jdk-6u14-linux-x64.bin /usr/local/ //将JDK安装命令复制到系统中
./jdk-6u14-linux-x64.bin //执行安装
安装完成后,在/usr/local下可看到一个jdk工作目录,将目录重命名,方便后面工作目录指定
mv jdk1.6.0_14/ /usr/local/jdk1.6
将Java环境加入环境变量
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 //指定amoeba工作目录 export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile //刷新环境变量
创建amoeba工作目录
mkdir /usr/local/amoeba
解压软件包
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
显示amoeba start|stop说明安装成功
在MySQL服务器上授予amoeba访问权限
每一台MySQL服务器进入数据库mysql -u root -p
grant all on . to 'test'@'192.168.100.%' identified by '123.com';
amoeba配置读写分离
cd /usr/local/amoebavim conf/amoeba.xml //amoeba主配置文件
---30行-- <property name="user">amoeba</property> ----32行--------- <property name="password">123456</property> //客户端登录amoeba验证 ---117-去掉注释- <property name="defaultPool">master</property> //默认数据库池为master <property name="writePool">master</property> //设置可写入数据池的服务器为master <property name="readPool">slaves</property> //设置可读数据库服务器为slaves
配置amoeba访问数据库配置文件
vim conf/dbServers.xml
--25行---- <!-- mysql schema --> <property name="schema">test</property> //amoeba默认寻找test数据库,注意test存在否,若不存在可以在主服务器创建,也可注释,也可更改为mysql数据库 --26-29--去掉注释-- <property name="user">test</property> <property name="password">123.com</property> //amoeba访问数据库池验证 -----42行-主服务器地址--- <dbServer name="master" parent="abstractServer"> <property name="ipAddress">192.168.100.102</property> --52行-从服务器主机名- <dbServer name="slave1" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.100.103</property> </factoryConfig> </dbServer> <dbServer name="slave2" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.100.104</property> </factoryConfig> </dbServer> <dbServer name="slaves" virtual="true"> //切记,从服务器池名slaves <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"> --末尾-- <property name="poolNames">slave1,slave2</property> </poolConfig>
启动amoeba服务,查看启动状态
/usr/local/amoeba/bin/amoeba start&
netstat -anpt | grep java
当查看到amoeba可以监听所有MySQL服务器时即表示配置成功。
tcp6 0 0 127.0.0.1:25138 :::* LISTEN 68768/java tcp6 0 0 :::8066 :::* LISTEN 68768/java tcp6 0 0 192.168.100.101:38906 192.168.100.102:3306 ESTABLISHED 68768/java tcp6 0 0 192.168.100.101:60784 192.168.100.103:3306 ESTABLISHED 68768/java tcp6 0 0 192.168.100.101:57670 192.168.100.104:3306 ESTABLISHED 68768/java
客户端测试读写分离
客户端首先MySQL,然后通过客户端访问amoeba服务器IP即可,注意端口P为大写。yum install mysql -y
mysql -u amoeba -p123456 -h 192.168.100.101 -P8066
此上,通过amoeba代理服务软件实现了MySQL数据库服务的读写分离。
相关文章推荐
- mysql-proxy主从服务架构下读写分离和负载均衡实现及原理
- mysql-proxy主从服务架构下读写分离和负载均衡实现及原理
- 基于 EntityFramework 的数据库主从读写分离架构(1) - 原理概述和基本功能实现
- mysql-proxy主从服务架构下读写分离和负载均衡实现及原理
- 配置Memcache实现主从复制repcached功能
- 读写分离主从复制集群分库分表的总体理解
- php实现带读写分离功能的MySQL类完整实例
- MariaDB数据库主从复制、双主复制、半同步复制、基于SSL的安全复制实现及其功能特性介绍(三)
- CFile读写文件 实现复制文件功能
- mysql读写分离和主从复制
- 详解Spring AOP 实现主从读写分离
- 配置Memcache服务器并实现主从复制功能
- redis主从复制,读写分离以及哨兵的配置
- mysql 主从复制,读写分离
- 搭建mysql的主从复制和读写分离
- 第40课 mysql主从复制、读写分离及mysql-proxy及问题解答
- Mysql通过配置主从,读写分离简单实现数据备份,负载均衡
- 配置Memcache服务器并实现主从复制功能(repcached)
- MariaDB数据库主从复制、双主复制、半同步复制、基于SSL的安全复制实现及其功能特性介绍 推荐
- MYSQL参数调优之见解分析,mysql主从(读写)分离来实现负载均衡