mysql主从之基于atlas读写分离
一 mysql读写分离的概念
写在主库,主库一般只有一个,读可以分配在多个从库上,如果写压力不大的话,也能把读分配到主库上.
实现是基于atlas实现的,atlas是数据库的中间件,程序只需要连接atlas入口,无需读写单独指定,atlas决定在那个数据库进行读或者写操作,可以实现mysql的读写分离
atlas是一台独立的机器,目前实验把atlas配置在192.168.132.122上
主库+从库 给予atlas读写的权限
主库:192.168.132.121
mysql> grant all privileges on *.* to 'atlas'@'192.168.132.122' identified by '';
Query OK, rows affected, warning (0.01 sec)
mysql> flush privileges;
从库:192.168.132.122
mysql> grant all privileges on *.* to 'atlas'@'192.168.132.122' identified by ''; #atlas连接数据库的用户名是atls,密码是1234567
Query OK, rows affected, warning (0.00 sec)
mysql> flush privileges;
atlas对主端和从端都有了读写权限
二 安装atlas
Atlas下载地址
https://github.com/Qihoo360/Atlas/releases
[root@slave ~]# cd /usr/local/src/
[root@slave src]# yum install epel-release -y
[root@slave src]# yum install openssl-devel autoconf gcc glib2 glib2-devel libevent-devel flex-devel flex jemalloc jemalloc-devel lua-devel -y
[root@slave src]# wget https://github.com/Qihoo360/Atlas/releases/download/sharding-1.0.1/Atlas-sharding_1.0.1-el6.x86_64.rpm
[root@slave src]# rpm -ivh Atlas-sharding_1.0.1-el6.x86_64.rpm
[root@slave src]# cd /usr/local/mysql-proxy/
[root@slave mysql-proxy]# ll

[root@slave mysql-proxy]# ./bin/mysql-proxy --version

三 配置读写分离
密码加密
[root@slave mysql-proxy]# /usr/local/mysql-proxy/bin/encrypt '1234567'

[root@slave mysql-proxy]# vim /usr/local/mysql-proxy/atlas.cnf
[mysql-proxy]
#主库地址
proxy-backend-addresses = 192.168.132.121:
#从库地址,@后面的数字代表权重,用来负载均衡,默认权重为1。可设置多项,用逗号分隔
proxy-read-only-backend-addresses = 192.168.132.122:@,192.168.132.121:@
#用户名和密码,密码需要使用/usr/local/mysql-proxy/bin/encrypt加密
pwds = atlas:tj+W8xntBW8=
daemon = true
#守护进程
keepalive = true
#线程数
event-threads =
#日志级别,message、warning、critical、error、debug
log-level = warning
#日志存放的路径
log-path = /usr/local/mysql-proxy/log
#SQL日志的开关,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘
sql-log = OFF
#慢日志输出设置。单位:ms
sql-log-slow =
#Atlas监听端口
proxy-address = 0.0.0.0:3316 #如果是一台独立的服务器,这个端口可以和MySQL端口一样,设为3306
#管理监听端口
admin-address = 0.0.0.0:
admin-username = atlas
admin-password =
#客户端连接默认字符集,不设置的话一般还需要使用set names utf8
charset = utf8
#ip白名单
#client-ips = 127.0.0.1, 192.168.3.1
最终是这样
程序连接 atlas192.168.237.128:3316 -> 主库+从库
四 启动atlas
[root@slave mysql-proxy]# /usr/local/mysql-proxy/bin/mysql-proxyd --help

[root@slave mysql-proxy]# /usr/local/mysql-proxy/bin/mysql-proxyd atlas start

[root@slave mysql-proxy]# netstat -ntlp|grep mysql-proxy

五 验证
5.1 读操作验证
主端查看读操作的次数
192.168.132.121:
mysql> show global status like '%select%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Com_insert_select | |
| Com_replace_select | |
| Com_select | |
| Connection_errors_select | |
| Select_full_join | |
| Select_full_range_join | |
| Select_range | |
| Select_range_check | |
| Select_scan | |
+--------------------------+-------+
192.168.132.122:
mysql> show global status like '%select%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Com_insert_select | |
| Com_replace_select | |
| Com_select | |
| Connection_errors_select | |
| Select_full_join | |
| Select_full_range_join | |
| Select_range | |
| Select_range_check | |
| Select_scan | |
+--------------------------+-------+
执行读操作
192.168.132.121执行
[root@master ~]# mysql -uatlas -p1234567 -h 192.168.132.122 -P3316 -e 'select * from darren.test;'
192.168.132.121: 未执行读操作
mysql> show global status like '%select%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Com_insert_select | |
| Com_replace_select | |
| Com_select | |
| Connection_errors_select | |
| Select_full_join | |
| Select_full_range_join | |
| Select_range | |
| Select_range_check | |
| Select_scan | |
+--------------------------+-------+
192.168.: 执行读操作
mysql> show global status like '%select%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Com_insert_select | |
| Com_replace_select | |
| Com_select | |
| Connection_errors_select | |
| Select_full_join | |
| Select_full_range_join | |
| Select_range | |
| Select_range_check | |
| Select_scan | |
+--------------------------+-------+
多执行几次
[root@master ~]# mysql -uatlas -p1234567 -h 192.168.132.122 -P3316 -e 'select * from darren.test;'
[root@master ~]# mysql -uatlas -p1234567 -h 192.168.132.122 -P3316 -e 'select * from darren.test;'
[root@master ~]# mysql -uatlas -p1234567 -h 192.168.132.122 -P3316 -e 'select * from darren.test;'
查看结果
因为配置文件配置读取的操作权重是5:1
192.168.132.121:执行一次
mysql> show global status like '%select%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Com_insert_select | |
| Com_replace_select | |
| Com_select | |
| Connection_errors_select | |
| Select_full_join | |
| Select_full_range_join | |
| Select_range | |
| Select_range_check | |
| Select_scan | |
+--------------------------+-------+
192.168.132.122 #增加7次
mysql> show global status like '%select%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Com_insert_select | |
| Com_replace_select | |
| Com_select | |
| Connection_errors_select | |
| Select_full_join | |
| Select_full_range_join | |
| Select_range | |
| Select_range_check | |
| Select_scan | |
+--------------------------+-------+
5.2 写操作验证
192.168.132.121使用atlat进入数据库
[root@master mysql]# mysql -uatlas -p1234567 -h 192.168.132.122 -P3316
mysql> insert into test values (5);
192.168.132.121查看
mysql> select * from test;

192.168.132.122查看:
mysql> select * from darren.test;

多执行几次
mysql> insert into test values (6);
mysql> insert into test values (7);
mysql> insert into test values (8);
mysql> insert into test values (9);
mysql> insert into test values (10);
192.168.132.121查看:
mysql> select * from test;

192.168.132.122查看

数据一直,说明写操作一直在主端192.168.132.121端.
基本读写分离的验证完成
mysql主从之基于atlas读写分离的更多相关文章
- Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- 黄聪:Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- 基于mysql主从同步的proxy读写分离
mysql-proxy 简介 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载 ...
- docker配置mysql主从与django实现读写分离
一.搭建主从mysql环境 1 下载mysql镜像 docker pull mysql:5.7 2 运行刚下载的mysql镜像文件 # 运行该命令之前可以使用`docker images`是否下载成功 ...
- MySQL主从复制与Atlas读写分离
配置主从复制 1. 增加主从配置 # 主库配置文件 server-id = 1 log-bin = /var/lib/mysql/mysql-bin expire_logs_days = 10 ski ...
- mysql数据库的主从同步,实现读写分离 g
https://blog.csdn.net/qq_15092079/article/details/81672920 前言 1 分别在两台centos 7系统上安装mysql 5.7 2 master ...
- mysql数据库的主从同步,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器来处理如此多的数据库连接操作,数据库必然会崩溃,特别 ...
- 分布式架构高可用架构篇_08_MyCat在MySQL主从复制基础上实现读写分离
参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...
- 高可用架构篇--MyCat在MySQL主从复制基础上实现读写分离
实战操作可参考:http://www.roncoo.com/course/view/3117ffd4c74b4a51a998f9276740dcfb 一.环境 操作系统:CentOS-6.6-x86_ ...
随机推荐
- mysql把一个表的字段update成另一个表的字段根据id
mysql把一个表的字段update成另一个表的字段根据id 1.填充activity表里面的creator字段,用org的founderid,其中activity的orgid要和org的id对应,具 ...
- kubernetes API 访问控制在阿里云容器服务(ACK)上的实践
提起K8s API的访问控制,很多同学应该都会想到RBAC,这是K8s用来做权限控制的方法,但是K8s对API的访问控制却不止于此,今天我们就来简单介绍下K8s的访问控制以及ACK如何利用这套方法提供 ...
- 解决pip is configured with locations that require TLS/SSL问题
python3.7安装, 解决pip is configured with locations that require TLS/SSL问题1.安装相关依赖 yum install gcc libff ...
- D-query SPOJ - DQUERY 主席树查询区间内不同数出现的次数
我们不以权值建立主席树,而是区间端点作为值建立线段树,一个个插入a[i],我们发现这个数之前是存在的,就需要在上个版本的主席树上减去原来的位置,并加上现在的位置,这样我们在i版本的主席树,维护1-r中 ...
- Libev源码分析09:select突破处理描述符个数的限制
众所周知,Linux下的多路复用函数select采用描述符集表示处理的描述符.描述符集的大小就是它所能处理的最大描述符限制.通常情况下该值为1024,等同于每个进程所能打开的描述符个数. 增大描述符集 ...
- Android Studio(十一):代码混淆及打包apk
Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...
- H3C 局域网的不足
- 原生sql和 TP sql怎么关联?
整合后
- vue 打包后,页面空白及图片路径的问题
打包之后打开dist的页面显示空白: 1.记得改一下config下面的index.js中bulid模块导出的路径. 这里需要将 assetsPublicPath: '/'改为assetsPublicP ...
- Python--day40--threading模块
import time from threading import Thread class MyThread(Thread): def __init__(self,arg): super().__i ...