8.12.2 amoeba
8.12.2.1 amoeba安装
? 安装JDK
http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
? 安装amoeba
http://sourceforge.net/projects/amoeba/files/
https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz/download
tar -zxvf amoeba-mysql-binary-2.1.0-RC5.tar.gz -C /usr/local/amoeba
可使用命令[/usr/local/amoeba/bin/amoeba]验证Amoeba是否安装成功。
8.12.2.2 配置Mysql主从授权
设置读写分离的权限
禁止mysql.user表同步
主: grant select,insert,update,delete on . to [email protected]‘%‘ identified by ‘123456‘
从: grant select on . to [email protected]‘%‘ identified by ‘123456‘
mysql读写分离的授权方案
mysql库不同步,再对主从进行授权
主: web_r 123456 10.204.1.100 3306 (select,insert,delete,update)
从: web_w 123456 10.204.1.101 3306 (select)
缺隐:从接替主的时候,没有修改权限,替补方案是,做一台从专门冷备,用来接替主
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
mysql库同步,在主上授权同步到从
主: web_r 123456 10.204.1.100 3306 (select,insert,delete,update)
如果防止从被写入,设置配置文件参数read-only,
注意:read-only对root用户不生效
生产环境如何确保从库只读
- mysql从服务器中加入read-only参数或者从服务器启动时加该参数
- 忽略mysql库及information_schema库同步
- 授权从库用户仅授权select权限
8.12.2.3 amoeba配置
├── bin
│ ├── amoeba
├── conf
│ ├── amoeba.xml
├── dbServers.xml
vim amoeba.xml
配置ameoba访问的用户名和密码 IP 端口提供给web连接
${clientConnectioneManager}
128
64
# amoeba本地的用户名和密码
root
${amoeba.home}/conf/access_list.conf
查询路由设置
${amoeba.home}/conf/rule.xml
${amoeba.home}/conf/ruleFunctionMap.xml
${amoeba.home}/conf/functionMap.xml
1500
# 设置默认的服务器(此处为master池)
# 设定可写节点,节点定义见dbServers.xml文件
masterPool
masterPool #设置写的库
salvePool # 设置读的库
true
修改 vim dbServers.xml
定义抽象服务器,为每个后端MySQL服务器提供默认连接配置
★
${defaultManager}
64
128
test
# 用户密码这一段只需要设置一次,下面子服务器共享上面的参数
500
500
10
600000
600000
true
true
★ # 以上多台mysql时,可配置多个…
定义后端MySQL的IP地址,一个master,一个slave
192.168.0.45
192.168.0.46
定义读池和写池 分别设置server列表,设置负载均衡方式
master-pool 定义池名和关联服务器
# 设置负载均衡参数 1=轮询 2=权重 3=Hash
1
server1
slave-pool 定义池名和关联服务器
# 设置轮询方式
1
server2
8.12.2.4 amoeba测试
重台启动
/usr/local/amoeba/bin/amoeba start &
连接测试
mysql -h127.0.0.1 -uroot -p -P8066 # amoeba默认监听端口为8066
这里连接的是ameoba的IP
8.12.2.5 Amoeba调优
20①
30②
30③
500④
60⑤
①readThreadPoolSize –用于处理客户端连接发送过来的数据,跟数据库服务器返回的数据的线程数 量这个可以根据客户端连接数量来调整。
②clientSideThreadPoolSize –在读线程读完客户端的请求数据包以后,这个线程将会接手处理具体 的业务逻辑(比如:解析SQL、SQL 路由)。
③serverSideThreadPoolSize –在server端读取数据库返回的数据包,合并多数据库返回的数据,将数 据包发送到客户端。
④statementCacheSize –连接池缓存的Prepared Statement数量。
⑤queryTimeout –语句执行超时时间设置。
128①
64②
true③
①
sendBufferSize – 属性设置在SocketChannel.Write 方法的调用中期望发送的字节数。实际上, 此属性的操作对象是为发送操作所分配的网络缓冲区空间。网络缓冲区应至少与应用程序缓冲 区同样大小,这样才能确保在一次操作中就能存储和发送所需的数据。使用 SendBufferSize 属 性设置此大小。如果应用程序要发送批量数据,需为 Write 方法提供足够大的应用程序缓冲区。 如果网络缓冲区小于提供给 Write 方法的数据量,则对 Write 方法的每次调用都将多次执行网 络发送操作。通过确保网络缓冲区至少与应用程序缓冲区同样大小,可获得更大的数据吞吐量。
②
receiveBufferSize–设置你希望在接收缓冲区中为每次读操作存储的字节数。实际上,此属性的操作对象是为 接收传入数据所分配的网络缓冲区空间。网络缓冲区应至少与应用程序缓冲区同样大小,这样才能确保在调用SocketChannel.Read 方法时所需的数据是可用的。使用 ReceiveBufferSize 属性 设置此大小。如果应用程序将要接收批量数据,应为Read方法提供非常大的应用程序缓冲区。 如果网络缓冲区小于在 Read 方法中所请求的数据量,你将无法在一次读取操作中检索到所需的 数据量。这将导致增加对 Read 方法的调用次数,进而增加系统开销。
③
tcpNoDelay–如果禁用延迟,则为 true;否则为 false。默认值为 true。 如果该参数设为 false,则直到 TcpClient 收集到相当数量的输出数据之后,它才会通过网络发 送数据包。由于 TCP 段中系统开销的数量,发送少量数据时效率比较低。但是,也存在这样情 况:你可能要发送极少量的数据或者期望立即从你发送的每个数据包得到响应。你应该在网络效率与应用程序响应要求中取舍。
Table 5.1. JVM(Java Virtual Machine)内存参数设置
JVM选项 含义
-Xms 初始Heap大小
-Xmx Java Heap最大值
-Xmn Young Generation的Heap大小
-Xss 每个线程的Stack大小
8.12.2.6 amoeba报错
? The stack size specified is too small, Specify at least 228k
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
解决方法:
vim bin/amoeba
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"
改成256
? Exception in thread "main" com.meidusa.amoeba.config.ConfigurationException: Initialisation [email protected] error
8.12.3 MySQL + MMM架构
8.12.3.1 mysql-mmm 概述
MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。
MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。MMM项目来自Google:http://code.google.com/p/mysql-master-master
官方网站为:http://mysql-mmm.org
mysql-mmm主要功能由下面三个脚本提供
mmm_mond 负责所有的监控工作的监控守护进程,决定节点的移除等等
mmm_agentd 运行在mysql服务器上的代理守护进程,通过简单远程服务集提供给监控节点
mmm_control 通过命令行管理mmm_mond进程
mysql-mmm的监管端会提供多个虚拟IP(VIP),包括一个可写VIP,多个可读VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某一台mysql宕机时,监管会将VIP迁移至其他mysql。
在整个监管过程中,需要在mysql中添加相关授权用户,以便让mysql可以支持监理机的维护。授权的用户包括一个mmm_monitor用户和一个mmm_agent用户,如果想使用mmm的备份工具则还要添加一个mmm_tools用户。!DOCTYPE>?xml>!-->!-->!-->!-->!-->!DOCTYPE>?xml>!-->!-->!-->!-->!-->!-->!-->!-->!--
>!-->!-->!-->以上是关于amoeba读写分离安装详细教程的主要内容,如果未能解决你的问题,请参考以下文章
利用amoeba实现mysql读写分离
使用Amoeba实现mysql读写分离机制
MySQL数据库--主从复制读写分离
Mysql主从同步 读写分离
MySQL主从复制与读写分离的理论+实操(配有详细图释)
Amoeba 实现MySQL读写分离