麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
1360
2023-04-07
Amoeba是一个类似MySQL Proxy的分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项目
说明:要实现mysql的主从读写分离,目前主要有以下几种方案:1.通过程序实现,网上很多现成的代码,比较复杂,如果添加从服务器要更改多台服务器的代码。2.通过mysql-proxy来实现,由于mysql-proxy的主从读写分离是通过lua脚本来实现,目前lua的脚本的开发跟不上节奏,而写没有完美的现成的脚本,因此导致用于生产环境的话风险比较大,据网上很多人说mysql-proxy的性能不高。3.自己开发接口实现,这种方案门槛高,开发成本高,不是一般的小公司能承担得起。4.利用阿里巴巴的开源项目Amoeba来实现,具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库,并且安装配置非常简单,但是目前还不支持事务。本文主要讲如何通过amoeba实现mysql读写分离。
3.配置java的用户环境变量
# vi ~/.bash_profile 修改为以下内容:PATH=$PATH:$HOME/bin:/usr/local/amoeba/binJAVA_HOME=/usr/java/jdk1.6.0_41export JAVA_HOMEexport PATH# source ~/.bash_profile //立即生效
4.1 /usr/local/amoeba/conf/dbServers.xml配置,此文件定义由Amoeba代理的数据库如何连接,比如最基础的:主机IP、端口、Amoeba使用的用户名和密码等等。Amoeba for mysql读写分离主要涉及两个文件:/usr/local/amoeba/conf/dbServers.xml和/usr/local/amoeba/conf/amoeba.xmlabstractServer配置
此部分定义真实mysql服务器的端口,数据库名称,mysql用户及密码。主从数据库定义:
此部分定义主服务器,从服务器,及从服务器连接池。这里只定义数据库地址,它们的用户及密码就是上面的abstractServer里的设置。注意用来连接真实mysql服务器的用户必须拥有远程连接权限。4.2 /usr/local/amoeba/conf/amoeba.xml配置,此文件定义了amoeba代理的相关配置amoeba连接验证配置:
这里定义连接amoeba时用来验证的用户及密码。读写分离配置:
defaultPool:配置了默认的数据库节点,一些除了SELECTUPDATEINSERTDELETE的语句都会在defaultPool执行。writePool :配置了数据库写库,通常配为Master,如这里就配置为之前定义的Master数据库。readPool :配置了数据库读库,通常配为Slave或者Slave组成的数据库池,如这里就配置之前的virtualSlave数据库池。5.amoeba启动
# amoeba start //此命令以前台的方式启动,会输出启动时的信息,检查没有错误信息后,中断,并后台运行:# amoeba start & //后台运行
6.测试在amoeba上登8066端口跟amoeba远程登陆主mysql服务器效果一样。
# /usr/local/mysql/bin/mysql -uroot -p123456 -h127.0.0.1 -P8066# /usr/local/mysql/bin/mysql -uroot -p123456 -h192.168.45.7 -P3306
附录:1.启动amoeba时出现The stack size specified is too small, Specify at least 160k#vim /usr/loca/amoeba/bin/amoeba文件,修改 DEFAULT_OPTS=”-server -Xms256m -Xmx256m -Xss128k”为 DEFAULT_OPTS=”-server -Xms256m -Xmx256m -Xss256k”保存,再次启动即可2.amoeba查询数据库时出现:java.util.NoSuchElementException: Could not create a validated object, cause: ValidateObject failed
> select * from user;ERROR 2013 (HY000): Lost connection to MySQL server during querymysql> java.util.NoSuchElementException: Could not create a validated object, cause: ValidateObject failed at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1191) at com.meidusa.amoeba.net.poolable.GenericObjectPool.borrowObject(GenericObjectPool.java:381) at com.meidusa.amoeba.mysql.handler.CommandMessageHandler.startSession(CommandMessageHandler.java:633) at com.meidusa.amoeba.mysql.handler.MySqlCommandDispatcher.handleMessage(MySqlCommandDispatcher.java:123) at com.meidusa.amoeba.mysql.net.MysqlClientConnection$2.run(MysqlClientConnection.java:291) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:662)
仔细检查dbServers.xml配置后发现factoryConfig中 password默认是被注释掉的,取消注释后正常。
# vim /usr/local/amoeba/conf/dbServers.xml,删除
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。