系统版本: windows7x64
虚拟机: centos 6.5x64
ip规划: 主数据库服务器:192.168.0.44
从数据库服务器:192.168.0.54
proxy服务器:192.168.0.29
ssh连接工具: ssh secure shell client
vpn工具: ssl vpn-plus client
实验内容: 1.为proxy服务器下载安装Atlas
2.配置Atlas
3.运行Atlas并初步测试
4.验证Atlas读写分离
实验步骤:
第一步 下载安装Atlas
Atlas主页 https://github.com/Qihoo360/Atlas
Atlas下载页 https://github.com/Qihoo360/Atlas/releases
Atlax的安装说明
https://github.com/Qihoo360/Atlas/wiki/Atlas%E7%9A%84%E5%AE%89%E8%A3%85
1.下载Atlas
系统是centos 6.5 ,所以下载Atlas-2.1.el6.x86_64.rpm
Wegt https://github.com/Qihoo360/Atlas/releases/download/2.1/Atlas-2.1.e l6.x86_64.rpm |
在这一步经常报错,错误代码403
Connecting to s3.amazonaws.com|205.251.243.98|:443... connected. HTTP request sent, awaiting response... 403 Forbidden 2014-10-06 20:29:55 ERROR 403: Forbidden. |
不知道原因,多试几次,如果一直不能下载,右键选择用迅雷下载,再复制迅雷里的地址试试(虽然地址是一样的)
2.安装Atlas
rpm -ivh Atlas-2.1.el6.x86_64.rpm |
3.更改配置文件
Atlas的安装目录是/usr/local/mysql-proxy,进入安装目录下的conf目录,可以看到已经有一个名为test.cnf的默认配置文件,我们只需要修改里面的某些配置项,不需要从头写一个配置文件。
#cd /usr/local/mysql-proxy/conf #进入Altas安装目录下的conf目录 #ls #查看目录下的文件 #vi test.cnf #进入test.cnf的默认配置文件 |
test.cnf全是乱码,直接删除
rm test.cnf |
再新建
#vi test.cnf |
(这里加一段特别说明:
vi /test.cnf表示编辑根目录下的test.cnf文件,如果没有,就创建一个空白文件
vi test.cnf表示用vi编辑当前路径下的test.cnf文件
)
将下面的代码写入配置文件(说明在后面列出)
[mysql-proxy] admin-username=tf1991 admin-password=woaimama0512 proxy-backend-addresses = 192.168.0.44:3306 proxy-read-only-backend-addresses = 192.168.0.54:[email protected] pwds=root:MlyAduTD8XThz4/QFy1yJw== daemon = true keepalive = true event-threads = 4 log-level = message log-path = /usr/local/mysql-proxy/log instance = test #实例名称,用于同一台机器上多个Atlas实例间的区分 sql-log = OFF proxy-address = 0.0.0.0:1234 admin-address = 0.0.0.0:2345 charset = utf8 |
配置说明如下:
[mysql-proxy] (必备,默认值即可)管理接口的用户名 admin-username = user (必备,默认值即可)管理接口的密码 admin-password = pwd (必备,根据实际情况配置)主库的IP和端口 proxy-backend-addresses = 192.168.0.12:3306 (非必备,根据实际情况配置)从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔。 proxy-read-only-backend-addresses = 192.168.0.13:3306,192.168.0.14:3306 (必备,根据实际情况配置)用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,用户名与密码之间用冒号分隔。主从数据库上需要先创建该用户并设置密码(用户名和密码在主从数据库上要一致)。比如用户名为myuser,密码为mypwd,执行./encrypt mypwd结果为HJBoxfRsjeI=,则设置如下行所示: pwds = myuser: HJBoxfRsjeI= (必备,默认值即可)Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true daemon = true (必备,默认值即可)设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true keepalive = true (必备,根据实际情况配置)工作线程数,推荐设置成系统的CPU核数的2至4倍 event-threads = 4 (必备,默认值即可)日志级别,分为message、warning、critical、error、debug五个级别 log-level = message (必备,默认值即可)日志存放的路径 log-path = /usr/local/mysql-proxy/log (必备,根据实际情况配置)SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,该模式下日志刷新是基于缓冲区的,当日志填满缓冲区后,才将日志信息刷到磁盘。REALTIME用于调试,代表记录SQL日志且实时写入磁盘,默认为OFF sql-log = OFF (必备,默认值即可)Atlas监听的工作接口IP和端口 proxy-address = 0.0.0.0:1234 (必备,默认值即可)Atlas监听的管理接口IP和端口 admin-address = 0.0.0.0:2345 (可选项,可不设置)分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项,子表需要事先建好,子表名称为表名_数字,数字范围为[0,子表数-1],如本例里,子表名称为mt_0、mt_1、mt_2 tables = person.mt.id.3 (可选项,可不设置)默认字符集,若不设置该项,则默认字符集为latin1 charset = utf8 (可选项,可不设置)允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接 client-ips = 127.0.0.1, 192.168.1 (可选项,极少需要)Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置 lvs-ips = 192.168.1.1 |
关于密码加密:
Encrypt在 /usr/local/mysql-proxy/bin目录下,先进入该目录
#cd /usr/local/mysql-proxy/bin |
然后执行
./encrypt woaimama0512 |
得到:
pwds=root:MlyAduTD8XThz4/QFy1yJw== |
在后端服务器192.168.0.54上对代理192.168.0.44授权
grant all on *.* to [email protected] ′92.168.0.44′ identified by ′′ ; |
二、运行Atlas
1.启动Altas
(一开始按照官网的 ./mysql-proxyd test start发现启动不了,检查了一下文件,发现在conf里没有test,解决的具体办法如下)
进入/usr/local/mysql-proxy/bin目录
cd /usr/local/mysql-proxy/bin |
查看目录下的文件:ls
发现在bin目录下有test.cnf,将其复制到conf里,然后就可以启动了,复制与启动的命令如下(..是上层目录,而.是当前目录):
cp test.cnf ../conf/test.cnf ./mysql-proxyd test start |
2.查看Atlas的运行状况
./mysql-proxyd test status |
应该有两个进程的。
注意:
(1). 运行文件是:mysql-proxyd(不是mysql-proxy)。
(2). test是conf目录下配置文件的名字,也是配置文件里instance项的名字,三者需要统一。
(3). 可以使用ps -ef | grep mysql-proxy查看Atlas是否已经启动或停止。
执行命令:mysql -h127.0.0.1 -P1234 -u用户名 -p密码,如果能连上则证明Atlas初步测试正常,可以再尝试发几条SQL语句看看执行结果是否正确。
进入Atlas的管理界面的命令:mysql -h127.0.0.1 -P2345 -uuser -ppwd,进入后执行:select * from help;查看管理DB的各类命令。
按照help里的指示,输入select * from backends;
三、验证Atlas读写分离
配置完成之后,如何验证读写分离是有效的呢?可以通过查看general_log来看读写请求的分配情况.general_log是记录所有SQL语句,默认是关掉的,要将其打开先。
1.打开general_log
登入主服务器的mysql,键入show variables like ‘%log%‘; 显示结果如下:
查看general_log 的value值,若为OFF,则键入
set global general_log=on; |
将general_log 的value值设置为on。general_log_file的value值为general_log日志的所在位置,即/var/run/mysqld/mysqld.log,general_log的日志内容会存与此文件。
设置好后结果如下图:
在从上做同样的事:
2.清空mysqld.log
为了便于查看general_log变化内容,先将mysqld.log清空。键入
cd /var/run/mysqld/ |
进入/var/run/mysqld/目录,键入ls命令查看该目录下的文件,可以看到mysqld.log
键入如下命令查看现在的general_log内容
vi mysqld.log |
键入如下命令将其清空
cat /dev/null > mysqld.log |
在从上做同样的事
3.验证读操作
登陆atlas,进入mysql的操作功能界面。在atlas上执行查询语句。
在主服务器上查看mysqld.log日志,看不到查询记录。
而在从服务器上查看mysqld.log日志可以看到查询记录。
4.验证写操作
在atlas上插入一条数据
在主服务器上查看mysqld.log日志,可以看到插入记录。
而在从服务器上看不到插入记录。
至此成功验证读写分离。
//使用NaviCat连接工作端口,用户名和密码就是上面配置文件的管理用户和密码
//出现的问题:
test.cnf配置文件