单机Mysql情况下,我们这样用:

java应用通过jdbc(Mybatis,Hibernate等)连接到mysql,中间需要配置连接URL:

jdbc:mysql://192.168.1.1:3306/xxx?user=root&password=xxx&userUnicode=true

很熟悉吧?对,这个URL里的192.168.1.1和3306就是Mysql的IP和端口

主从复制的集群咋办?

很显然不能在上面的URL里面写上两个IP和端口吧!请欢迎我们的大神Atlas出场。

Atlas是奇虎360公司开源的数据库中间件,可以作为代理,实现数据库集群情况下一系列复杂的功能。


Atlas能干啥?

  • 读写分离
  • 从库负载均衡
  • 自动分表
  • IP过滤
  • SQL语句黑白名单
  • DBA可平滑上下线DB
  • 自动摘除宕机的DB

看看这一堆功能,头晕,我们先实现一个小目标:配置Mysql连接URL的时候把IP和端口换成Atlas的IP和端口,Atlas就能自动帮我们实现读写分离!把我们的Java应用跑起来!

补充一点:同样作为数据库中间件,Mysql官方也有一个,不过那个玩意实在不咋地!一身毛病。Atlas是以那个为蓝本修改的。

再补充一点:别的公司还有很多别的中间件,比如mycat,cobar等等。我没用过, 有兴趣的请自己百度


Atlas安装部署:

wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm

yum install Atlas-2.2.1.el6.x86_64.rpm


下面命令是加密,加密啥呢?Atlas作为代理要连接Mysql,需要用户名密码,Atlas需要把mysql的密码保存在配置文件中,那么很显然不能保存明文吧?于是我们用下面命令加密一下,然后写到配置文件中,用眼睛看到的是xxxooo乱码,但是Atlas能看懂!

执行命令:

/usr/local/mysql-proxy/bin/encrypt 要加密的mysql密码

得到 xxxooo 一堆,好了,保存好,后面要用


修改配置文件:

vi /usr/local/mysql-proxy/conf/test.cnf

给Atlas配置一个管理员用户名:

admin-username = user

管理员密码:

admin-password = xoxoxo

Atlas监听的工作接口IP和端口;下面表示1234端口连接Atlas来发送SQL请求。

proxy-address = 0.0.0.0:1234

上一篇我们配置好的主Mysql的ip和端口:

proxy-backend-addresses = 192.168.1.1:3306

从Mysql的ip和端口配置(可以配置多个从mysql,中间加,),每个从Mysql后面可以加@,再加数字,用来表示权重的高低,不加的话表示权重相同。另外,默认情况下这里配置的mysql都是只读(就是“只读取数据”,写入数据会自动分配到主Mysql),如果也想从主mysql读,需要把主mysql的IP和端口也配置进去

proxy-read-only-backend-addresses = 192.168.1.2:3306,192.168.1.3:3306

数据库密码配置,上面加密出来的那个xxxooo还记得么?用在这里!另外,主从Mysql要配置一个相同的用户myuser(同用户名,同密码),方便Atlas使用。

pwds = myuser:xxxooo


启动Atlas

进入/usr/local/mysql-proxy/bin

./mysql-proxyd test start 启动Atlas。

./mysql-proxyd test restart 重启Atlas。

./mysql-proxyd test stop 停止Atlas。


启动后测试

ps -ef | grep mysql-proxy

查看进程是否存在。没问题的话执行如下:

mysql -hAtlas主机的ip -P1234 -u用户名 -p

回车,填写密码,回车!这个用法跟mysql连接是一致的。看看是否能连接上,如果连上了,请注意!这可是用atlas

作为代理实现的连接!不再是直接连接mysql了!


回归到Java应用

做到了上面几步,说明atlas已经成功跑起来了,再用java应用连接时URL配置IP和端口使用atlas的IP和端口,后面Atlas会自动将写入请求发送到主Mysql,将读请求发送到从Mysql,而你写入到主Mysql的信息会自动的同步到从Mysql(同步这个事是Mysql自己干的,跟Atlas没关系了)

OK!就说到这里,其实我写的东西,在github上也都有!这里只帮你先跑起来,后面详细的研究请多多实践!


补充一点,昨天有朋友问我,主从复制的情况下,会不会出现主库写完以后,同步到从库有延迟?答案是100%的,虽然绝大部分情况下延迟较小,但是也不能忽略,毕竟哪怕1ms在某些业务中也是不允许的,怎么办?Atlas提供了方案:

执行select 时,在select语句前加上 /*master*/ 这样就会从主Mysql强制读了!

java 集成 atlas相关推荐

  1. 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA

    [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...

  2. 6.Java集成开发环境

    转载请保留原文链接: http://dashidan.com/article/java/basic/6.html 6.Java集成开发环境 工欲善其事, 必先利其器.--<论语·卫灵公篇> ...

  3. Groovy与Java集成常见的坑--转

    https://yq.aliyun.com/articles/2357 groovy特性 Groovy是一门基于JVM的动态语言,同时也是一门面向对象的语言,语法上和Java非常相似.它结合了Pyth ...

  4. Groovy与Java集成常见的坑

    groovy特性 Groovy是一门基于JVM的动态语言,同时也是一门面向对象的语言,语法上和Java非常相似.它结合了Python.Ruby和Smalltalk的许多强大的特性,Groovy 代码能 ...

  5. 大数据之mongodb -- (2)java集成 MongoDB 3.2,使用Spring-data-mongodb进行集成

    Java集成MongoDB有很多方式,可以直接用mongodb的java驱动程序来发送语句到mongodb服务器,也可以用第三方的工具包来做. (1) 选择版本 选择的就是springdata集成的m ...

  6. snmp与java集成_轻松地与Java完全集成

    snmp与java集成 这里是如何不使用SQL,HQL,PHP,ASP,HTML,CSS或Javascript而是使用Vaadin的UI层和Speedment Stream ORM完全依赖Java编写 ...

  7. java 集成开发工具_最好的Java开发人员测试和集成工具

    java 集成开发工具 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! 无论您是刚刚起步还是已经从事了一段时间,使用正确的工具进行编程都可 ...

  8. java集成lucene_将Lucene搜索集成到应用程序中

    java集成lucene 本文是我们名为" Apache Lucene基础知识 "的学院课程的一部分. 在本课程中,您将了解Lucene. 您将了解为什么这样的库很重要,然后了解L ...

  9. java jquery_jQuery数据表和Java集成

    java jquery jQuery DataTables是一个开放源代码插件,用于在浏览器中创建表. 它具有许多功能,例如排序,服务器端处理, JQUERY UI主题滚动. 该插件的下载链接: ht ...

最新文章

  1. spring aop 注入源码解析 1
  2. 从源代码解读spring之DataSource实现和FactoryBean模式(JndiObjectFactoryBean)
  3. C++之invalid initialization of non-const reference of type ‘int’ from an rvalue of type ‘int’
  4. java usb 无驱打印_Windows Usb 无驱动打印
  5. Vuex使用详解,附加项目遇到的问题(简单明了)
  6. 计组之数据运算:11、浮点数的运算
  7. Spring+SpringMVC+MyBatis深入学习及搭建(九)——MyBatis和Spring整合
  8. Lipo移除ORC架构
  9. php实现微信公众号半匹配,半全局块匹配(Semi-Global Block Matching)算法
  10. Spring声明式事物DataSourceTransactionManager的使用与jdbcTemplate的使用
  11. [WTL] 改变右击SysMenu后弹出的菜单
  12. 2020-11-01
  13. Mac UserWarning: findfont: Font family ['SimHei'] not found
  14. 前端学习白嫖-QQ音乐
  15. 域名型通配符ssl证书_通配符SSL证书是否支持三级子域名?
  16. Linux一句话精彩问答(转载来自www.chinaunix.net)
  17. JavaScript判断系统语言
  18. 面试上海启明星辰+渗透测试工程师! 通过
  19. Domino蓝色多瑙河版本
  20. 偏向锁-批量重偏向和批量撤销测试

热门文章

  1. Java Dome(实现一个简易版QQ聊天室)
  2. spss之“方差分析”
  3. Android禁用返回键
  4. js中unload什么意思_javascript事件之卸载(unload)事件
  5. java 开发服务器
  6. 游戏美术都受到了什么绘画风格的影响
  7. java形参和实参的三种传递方式(值传递,地址传递,引用传递)
  8. knockoutjs visible
  9. 《Android群英传》读书笔记9.Android系统信息与安全机制
  10. 基于vue+exharts的双折线图