的安插已成功,Atlas下载链接

参照博文:

序章

MySQL-(Master-Slave)配置 
本人根据博友北在北方的布局已成功
 小编动用的是 mysql伍.陆.二柒版本。

Atlas是360公司弄出来的1套基于MySQL-Proxy基础之上的代理,修改了MySQL-Proxy的壹些BUG,并且优化了不可枚举事物。而且安装方便。

选拔Atlas完毕MySQL读写分离  

Atlas官方链接:https://github.com/Qihoo360/Atlas/blob/master/README\_ZH.md

多少切分——Atlas读写分离Mysql集群的搭建

Atlas下载链接:https://github.com/Qihoo360/Atlas/releases

[转]
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
 博文中的数据迁移(主从复制)挺好

环境:

 配置中 又尤为对mysql伍.6的日记进行了摸底
mysql日志详细剖析

系统

 

IP

1.安装

配置

         注意:只可以设置在六11个人的Linux操作系统上,CentOS官方提议rpm安装方式

CentOS 7.0

         获取地址:https://github.com/Qihoo360/Atlas/releases

192.168.1.40

         近年来最新的本子为:

Atlas代理服务

          Atlas-2.2.1.el5.x86_64.rpm                      CentOS 5.* 
版本

CentOS 7.0

          Atlas-2.2.1.el6.x86_64.rpm                      CentOS 6.* 
版本

192.168.1.50

安装命令:

主MySQL数据库

         [root@jhq0229 src]# rpm -i Atlas-2.2.1.el6.x86_64.rpm

CentOS 7.0

         

192.168.1.41

         安装地点:

从MySQL数据库

         /usr/local/mysql-proxy

         配置文件:

  1. 数据库的布署

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

需求进入50与肆1数据库中安排用户名与密码,用户必须是远程能够访问的用户,配置格局如下:

二、编写简单Atlas的开行脚本:

第二进入到50的MySQL数据库中,成立用户“buck”设置密码为“hello”下列标红的是用户与密码。

[root@jhq0229 ~]# vim /etc/init.d/atlas

mysql> grant all on *.* tobuck@’127.0.0.1′ identified by
“hello”;Query OK, 0 rows affected (0.00 sec)

#!/bin/sh
#
#atlas:    Atlas Daemon
#
# chkconfig:    - 90 25
# description:  Atlas Daemon
#
# Source function library.
start()
{
        echo -n $"Starting atlas: "
        /usr/local/mysql-proxy/bin/mysql-proxyd test start
        echo 
}
stop()
{
        echo -n $"Shutting down atlas: "
        /usr/local/mysql-proxy/bin/mysql-proxyd test stop
        echo
}
ATLAS="/usr/local/mysql-proxy/bin/mysql-proxyd"
[ -f $ATLAS ] || exit 1
# See how we were called.
case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                stop
                sleep 1
                start
                ;;
        *)
                echo $"Usage: $0 {start|stop|restart}"
                exit 1
esac
exit 0

授权并加入开机启动
[root@jhq0229 ~]# chmod +x /etc/init.d/atlas
[root@jhq0229 ~]# chkconfig atlas on

启动atlas服务
[root@jhq0229 ~]# service atlas start

修改buck的造访权限,首先得进入mysql数据库,才能修改host权限的新闻

 三、注意事项

# 进入数据库

三.壹 主master上的 mysql 重新启航

mysql> use mysql

主master上的 mysql 每重新开动一次  配置在master 上的
“在master上查看 binary log文件名和 position”就会产生转移:如下

Database changed

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 |      276 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
重新启动mysql服务后:
mysql> show master status;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    3
Current database: mysql

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000006 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.08 sec)

# 修改host权限为”%”

那就会造成 从slave上的配备失效,从而致使主-从不能够同步:所以每便重复启航
主(master)上的mysql服务都急需修改
从(slave)上的布局。最近不得不这么做具体供给怎么改 再切磋。

mysql> update user set host = ‘%’ where user = ‘buck’;

mysql> change master to master_host='192.168.29.128',master_user='repl',master_password='123456',master_port=3306,master_log_file='mysql-bin.000006',master_log_pos=120,master_connect_retry=10;
Query OK, 0 rows affected, 2 warnings (0.30 sec)

Query OK, 1 row affected (0.00 sec)

 三.2 从slave上的 mysql 重新启航

Rows matched: 1  Changed: 1  Warnings: 0

 从slave上的 mysql 重新启航  会促成
主从安顿失效无法成功写同步作用,所以必要重启 mysql服务后 ,重新起动
slave ;

翻看一下user表,看看修改成功了未曾。能够见到,buck的用户,host已经修改成都百货分号了。

mysql> select user, host from user;

+——+———————–+

| user | host                  |

+——+———————–+

| buck | %                    |

| root | 127.0.0.1            |

|      | localhost            |

| root | localhost            |

|      | localhost.localdomain |

| root | localhost.localdomain |

+——+———————–+

6 rows in set (0.00 sec)

立异数据库音信,假设没更新数据库的消息,修改不会即时生效,那就必要重启数据库了。这边平昔更新数据库的音讯,可防止止重启。

mysql>  flush privileges;

Query OK, 0 rows affected (0.00 sec)

基本MySQL都必要创立一个数据库,作者那成立的数据库是“test”,为了方便测试读写分离

mysql> create database test;

Query OK, 1 row affected (0.00 sec)

【注解:50数据库与4壹的数据库同样配备】

  1. 骨干数据库连接

配备宗旨服务器须求编写制定MySQL的安插文件,详情配置步骤如下:

主服务器 ( 19二.16捌.1.50 ),使用vim实行配置

[mysqld]

datadir=/data/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

#主从复制配置

innodb_flush_log_at_trx_commit=1

sync_binlog=1

#内需备份的数据库

binlog-do-db=test

#不必要备份的数据库

binlog-ignore-db=mysql

#开端二进制文件

log-bin=mysql-bin

#服务器ID

server-id=1

# Disabling symbolic-links is recommended to prevent assorted security
risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

【主意:若未有配置binlog-do-db和binlog_ignore_db,表示备份全体数据库。】

重启mysqld服务

[root@localhost bin]# /etc/init.d/mysqld restart

进入数据库,配置主从复制的权限

mysql> grant replication slave on *.* to ‘buck’@’127.0.0.1’
identified by ‘hello’;

Query OK, 0 rows affected (0.00 sec)

锁定数据库

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

翻看主数据库音讯,记住上边包车型的士“File”与“Position”的新闻,它们是用来布局从数据库的主要音讯。能够看来上面一起的数据库的“test”数据库,主从数据库假设数额不1致,首先须求手动去联合一下数码,笔者在Windows环境下只用Navicat复制的数量,那里就不演示了。

mysql> show master status;

+——————+———-+————–+——————+

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————+———-+————–+——————+

| mysql-bin.000001 | 589      | test        | mysql            |

+——————+———-+————–+——————+

1 row in set (0.00 sec)

从服务器 ( 1九二.16八.一.四一),也急需选择vim进行布署,只需求在[mysqld]上面进入server-id=2就足以,全部布署如下:

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

server-id=2

# Disabling symbolic-links is recommended to prevent assorted security
risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

跻身数据库,配置从数据库的新闻,那里输入刚才记录下来的“File”与“Position”的音讯,并且在从服务器上实施:

mysql> change master to master_host=’192.168.246.134′

主服务器的IP

master_user=’buck’

配置主服务器的用户名

master_password=’hello’

对应用户的密码

master_port=3306

主服务器的mysql端口

master_log_file=’mysql-bin.000001′

日记文件的名目,须要与主服务器对应

master_log_pos=589

日记地方,须求与主服务器对应

master_connect_retry=20

重连次数

mysql> change master to master_host=’192.168.1.50′,

-> master_user=’buck’,

-> master_password=’hello’,

-> master_port=3306,

-> master_log_file=’mysql-bin.000001′,

-> master_log_pos=589,

-> master_connect_retry=20;

Query OK, 0 rows affected (0.01 sec)

开首进度

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

反省主从复制状态,要见到下列标红的消息中,八个都以Yes,才表达为主连接正确,假设有七个是No,必要重新分明刚才记录的日记新闻,停掉“stop
slave”重新展开布署大旨连接。

mysql> show slave status
\G;*************************** 1. row
***************************             
Slave_IO_State: Waiting for master to send event                 
Master_Host: 192.168.246.134                  Master_User: buck       
          Master_Port: 3306                Connect_Retry: 10         
    Master_Log_File: mysql-bin.000001          Read_Master_Log_Pos:
589              Relay_Log_File: mysqld-relay-bin.000001             
  Relay_Log_Pos: 251        Relay_Master_Log_File:
mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running:
YesReplicate_Do_DB:          Replicate_Ignore_DB:           
Replicate_Do_Table:        Replicate_Ignore_Table:     
Replicate_Wild_Do_Table:  Replicate_Wild_Ignore_Table:           
        Last_Errno: 0                  Last_Error:                 
Skip_Counter: 0          Exec_Master_Log_Pos: 17620976             
Relay_Log_Space: 407              Until_Condition: None             
Until_Log_File:                Until_Log_Pos: 0         
Master_SSL_Allowed: No          Master_SSL_CA_File:           
Master_SSL_CA_Path:              Master_SSL_Cert:           
Master_SSL_Cipher:                Master_SSL_Key:       
Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: No         
      Last_IO_Errno: 0                Last_IO_Error:               
Last_SQL_Errno: 0              Last_SQL_Error: 1 row in set (0.00
sec)ERROR: No query specified

能够进入主数据库,运转以下命令,测试中央服务的实效。

mysql> use test;

mysql> create table wl(id int(4),sex varchar(255),birthday date);

跻身从库

mysql> show tables;

+—————-+

| Tables_in_test |

+—————-+

| wl |

+—————-+

1 row in set (0.00 sec)

mysql>

  1. Atlas配置

下载Atlas会有多个本子,在那之中有个分表的版本,但是那一个供给其余的依赖,小编那边不须要分表那种须求,所以安装普通的版本

Atlas (普通)
:Atlas-2.2.1.el6.x86_64.rpm

Atlas (分表)
:Atlas-sharding_1.0.1-el6.x86_64.rpm

先是进入Linux的Home目录下,下载非分表的安装包

[root@localhost ~]# mkdir /demo/atlas

[root@localhost ~]# cd /demo/atlas[root@localhost home]#
wgethttps://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm

下载好了后来,实行安装

[root@localhost home]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm

Preparing…               
###########################################
[100%]

1:Atlas                 
###########################################
[100%]

设置好了,它会私下认可在”/usr/local/mysql-proxy”下给你转移七个文件夹,以及必要配备的公文,如下:

[root@localhost home]# ll /usr/local/mysql-proxy/total 16drwxr-xr-x.
2 root root 4096 Dec 28 10:47bindrwxr-xr-x. 2 root root 4096 Dec 28
10:47confdrwxr-xr-x. 3 root root 4096 Dec 28 10:47libdrwxr-xr-x. 2 root
root 4096 Dec 17  2014log

bin目录下放的都以可执行文件

  1. “encrypt”是用来生成MySQL密码加密的,在布局的时候会用到

  2. “mysql-proxy”是MySQL本身的读写分离代理

三.
“mysql-proxyd”是360弄出来的,前边有个“d”,服务的启航、重启、停止。都以用她来推行的

conf目录下放的是布置文件

  1. “test.cnf”唯有1个文书,用来布局代理的,能够利用vim来编排

lib目录下放的是壹些包,以及Atlas的依靠

log目录下放的是日记,如报错等错误消息的记录

跻身bin目录,使用encrypt来对数据库的密码举行加密,笔者的MySQL数据的用户名是buck,密码是hello,小编索要对密码进行加密

[root@localhost bin]# ./encrypt 123456

/iZxz+0GRoA=

配备Atlas,使用vim举办编辑

[root@localhost conf]# cd /usr/local/mysql-proxy/conf/

[root@localhost conf]# vim test.cnf

进去后,能够在Atlas举行安插,360写的普通话注释都很详细,根据注释来布局消息,其中比较重大,须求验证的配备如下:

那是用来报到到Atlas的组织者的账号与密码,与之相应的是“#Atlas监听的管理接口IP和端口”,也正是说须求设置管理员登录的端口,才能跻身管理员界面,暗中认可端口是2345,也能够钦点IP登录,钦命IP后,其余的IP不或者访问管理员的授命界面。方便测试,小编那边未有点名IP和端口登录。

#管住接口的用户名

admin-username = user

#管理接口的密码

admin-password = pwd

那是用来布署主数据的地址与从数据库的地址,那里配置的主数据库是135,从数据库是13四

#Atlas后端再三再四的MySQL主库的IP和端口,可安装多项,用逗号分隔

proxy-backend-addresses = 192.168.1.50:3306

#Atlas后端接连的MySQL从库的IP和端口,@前面包车型地铁数字代表权重,用来作负载均衡,若省略则暗中认可为1,可安装多项,用逗号分隔

proxy-read-only-backend-addresses = 192.168.1.41:3306@1

以此是用来配置MySQL的账户与密码的,小编的MySQL的用户是buck,密码是hello,刚刚使用Atlas提供的工具生成了对应的加密密码

#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user一和user②为示范,将其替换为您的MySQL的用户名和加密密码!

pwds = buck:/iZxz+0GRoA=

那是安装工作接口与治本接口的,假如ip设置的”0.0.0.0”就是说任意IP都足以访问那个接口,当然也能够钦定IP和端口,方便测试自身那边未有点名,工作接口的用户名密码与MySQL的账户对应的,管理员的用户密码与地点配置的领队的用户密码对应。

#Atlas监听的办事接口IP和端口

proxy-address = 0.0.0.0:1234

#Atlas监听的田管接口IP和端口

admin-address = 0.0.0.0:2345

启动Atlas

[root@localhost bin]# pwd

/usr/local/mysql-proxy/bin

[root@localhost bin]# ./mysql-proxyd test start

OK: MySQL-Proxy of test is started

测试一下Atlas服务器的MySQL状态,要确认它是关门状态,并且选用mysql命令,进不去数据库,前提是Atlas服务器也必要装mysql,直接运行 yum -y install mysql
就足以了。咱们那里只要求mysql那几个命令好使,就足以了。

[root@localhost bin]# /etc/init.d/mysqld status

mysqld is stopped

[root@localhost bin]# mysql

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket
‘/var/lib/mysql/mysql.sock’ (2)

肯定系统中自带的MySQL进不去了,使用如下命令,进入Atlas的管理方式“mysql
-h127.0.0.一 -P23四5 -uuser
-ppwd ”,能进来表达Atlas符合规律运营着啊,因为它会把温馨就是三个MySQL数据库,所以在不须要数据库环境的情况下,也得以进来到MySQL数据库方式。

[root@localhost bin]# mysql -h127.0.0.1 -P2345 -uuser -ppwd

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.0.99-agent-admin

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights
reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input
statement.

mysql>

能够访问“help”表,来看MySQL管理员方式都能做些什么。能够行使SQL语句来做客

mysql> select * from help;

+—————————-+———————————————————+

| command                    | description                             
              |

+—————————-+———————————————————+

| SELECT * FROM help        | shows this help                         
              |

| SELECT * FROM backends    | lists the backends and their state       
              |

| SET OFFLINE $backend_id    | offline backend server, $backend_id is
backend_ndx’s id |

| SET ONLINE $backend_id    | online backend server, …               
              |

| ADD MASTER $backend        | example: “add master 127.0.0.1:3306”,
…              |

| ADD SLAVE $backend        | example: “add slave 127.0.0.1:3306”, … 
              |

| REMOVE BACKEND $backend_id | example: “remove backend 1”, …       
                |

| SELECT * FROM clients      | lists the clients                       
              |

| ADD CLIENT $client        | example: “add client 192.168.1.2”, …   
              |

| REMOVE CLIENT $client      | example: “remove client 192.168.1.2”,
…              |

| SELECT * FROM pwds        | lists the pwds                           
              |

| ADD PWD $pwd              | example: “add pwd user:raw_password”,
…              |

| ADD ENPWD $pwd            | example: “add enpwd
user:encrypted_password”, …      |

| REMOVE PWD $pwd            | example: “remove pwd user”, …         
              |

| SAVE CONFIG                | save the backends to config file         
              |

| SELECT VERSION            | display the version of Atlas             
              |

+—————————-+———————————————————+

16 rows in set (0.00 sec)

mysql>

也能够使用工作接口来拜会,使用命令“mysql -h1贰七.0.0.一 -P123四 -ubuck
-phello”

[root@localhost bin]# mysql -h127.0.0.1 -P1234 -ubuck -phello

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.0.81-log

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights
reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input
statement.

mysql>

你能够让数据库某一台down掉,来测试监察和控制的可用性。从那边能够看来大家的监察是好使的,啦啦啦啦!!

图片 1

只要工作接口能够进入了,就足以在Windows平台下,使用Navicat来连接数据库,填写对应的host,Port,用户名,密码就足以

图片 2

  1. 读写分离测试

那边测试读写分离须要选用到Jmeter了,它是Java写第三套开源的下压力测试工具,因为那些比较便宜。他有尤其测试MySQL的模块,必要采纳MySQL的JDBC驱动jar包,配置很简单,东西很好很强大很好用。

Jmeter下载地址:http://jmeter.apache.org/download\_jmeter.cgi

MySQL的JDBC 
http://dev.mysql.com/downloads/connector/j/

下载下来后,分别都解压开来,打开Jmeter ( 在bin路面下的jmeter.bat )
,在测试布置中,导致JDBC的jar包

图片 3

配置JDBC的驱动

图片 4

分别做询问与插入语句

图片 5

配备好了解后,就先运维查询操作,然后分别监察和控制主数据库与从数据库所在机器的流量,来规定是或不是读写,使用“sar
-n DEV 一 一千0”命令来监督读写

先来测试写,如今数据Curry面一条消息都未曾,开启配置好了的Jmeter,举行写入数据测试

图片 6

主数据库 ( 1九二.16八.一.50 )

从数据库 ( 192.168.一.肆一 )

可以看出测试插入数据的操作时,主数据库的网卡流量一点都不小,从数据库的流量很小,是应为主数据是关键负责写入的,而从数据库重点是承担同步的。

图片 7

翻看数据库,发现早已插入了陆W多条数据了。

图片 8

拓展读取数据的测试,只要求实践查询就好,执行“select *from
sbtest;”来询问数据表

主数据库 ( 1九二.16八.壹.50 )

从数额库 ( 1玖贰.168.壹.4壹 )

能够观望135(50)数据库的流量格外大,134(肆1)未有怎么流量,那下就能够规定了数码是从数据库读取的。已经落到实处了读写分离。

图片 9

相关文章