Mysql读写分离集群中间件—Atlas完美配置,So easy!5分钟搞定!Oracle数据库SQL优化方法案例

全掌柜技术客 2017-11-18 09:54:33

Mysql读写分离集群中间件—Atlas完美配置,So easy!5分钟搞定!

昨天发了《Mysql主从复制完美配置,So easy!5分钟搞定!》,是Mysql主从复制双机集群的配置方法,有需要的朋友可以点我头像进去查看。

今天继续昨天的话题,主从复制配置完成以后我们该怎么用?

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

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

Mysql读写分离集群中间件—Atlas完美配置,So easy!5分钟搞定!

很熟悉吧?对,这个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应用跑起来!

补充一点:Atlas的Github地址:

https://github.com/Qihoo360/Atlas

再补充一点:同样作为数据库中间件,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强制读了!

OK!感谢关注!

猜你喜欢

转载自blog.csdn.net/u011277123/article/details/78850160