MySQL读写分离-Atlas

读写分离有两种实现方式,一种通过程序的逻辑处理判断读写,另一种则通过第三方中间件实现如mysql-proxy,mycat,atlas,oneproxy。

环境

mysql-100 master
mysql-107 slave
mysql-108 slave
atlas 192.168.1.101
第三方中间件atlas

配置好主从同步环境

mysql> show slave hosts;
+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID                           |
+-----------+------+------+-----------+--------------------------------------+
|         3 |      | 3306 |         1 | 1c407d6f-aed1-11eb-a416-000c29ffc89c |
|         2 |      | 3306 |         1 | 6158e393-aed0-11eb-8951-000c298fef9a |
+-----------+------+------+-----------+--------------------------------------+
2 rows in set (0.00 sec)

配置

配置atlas

[root@101 ~]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm 
[root@101 ~]# tree /usr/local/mysql-proxy/
/usr/local/mysql-proxy/
├── bin
│   ├── encrypt     #生成MySQL加密密码
│   ├── mysql-proxy
│   ├── mysql-proxyd        #启动停止服务
│   └── VERSION
├── conf
│   └── test.cnf        #配置文件
├── lib
│   ├── libevent-2.0.so.5
│   ├── libglib-2.0.so.0
│   ├── libgmodule-2.0.so.0
│   ├── libgthread-2.0.so.0
│   ├── libjemalloc.so.1
│   ├── liblua-5.1.so
│   ├── libmysql-chassis-glibext.so.0
│   ├── libmysql-chassis.so.0
│   ├── libmysql-chassis-timing.so.0
│   ├── libmysql-proxy.so.0
│   ├── libsql-tokenizer.so.0
│   └── mysql-proxy
│       ├── lua
│       │   ├── admin.lua
│       │   ├── chassis.so
│       │   ├── crc32.so
│       │   ├── glib2.so
│       │   ├── lfs.so
│       │   ├── lpeg.so
│       │   ├── mysql.so
│       │   ├── posix.so
│       │   ├── proxy
│       │   │   ├── auth.lua
│       │   │   ├── auto-config.lua
│       │   │   ├── balance.lua
│       │   │   ├── charset.lua
│       │   │   ├── commands.lua
│       │   │   ├── crc32.lua
│       │   │   ├── filter.lua
│       │   │   ├── log.lua
│       │   │   ├── parser.lua
│       │   │   ├── split.lua
│       │   │   ├── test.lua
│       │   │   ├── ticker.lua
│       │   │   └── tokenizer.lua
│       │   └── time.so
│       └── plugins
│           ├── libadmin.so
│           └── libproxy.so
└── log
    ├── test.log
    └── test.pid

配置test.cnf

[mysql-proxy]

#带#号的为非必需的配置项目

#管理接口的用户名
admin-username = user

#管理接口的密码
admin-password = pwd

#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 192.168.1.100:3306

#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy-read-only-backend-addresses = 192.168.1.107:3306,192.168.1.108:3306

#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
pwds = root:wweZ179IAw8xZvWHtgSJ7Q==

#设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
daemon = true

#设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
keepalive = true

#工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
event-threads = 8

#日志级别,分为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

#慢日志输出设置。当设置了该参数时,则日志只输出执行时间超过sql-log-slow(单位:ms)的日志记录。不设置该参数则输出全部日志。
#sql-log-slow = 10

#实例名称,用于同一台机器上多个Atlas实例间的区分
#instance = test

#Atlas监听的工作接口IP和端口
proxy-address = 0.0.0.0:1234

#Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:2345

#分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项
#tables = person.mt.id.3

#默认字符集,设置该项后客户端不再需要执行SET NAMES语句
#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

运行atlas

[root@101 bin]# ./mysql-proxyd test start
[root@101 bin]# ss -tln
State      Recv-Q Send-Q               Local Address:Port                              Peer Address:Port              
LISTEN     0      128                              *:22                                           *:*                  
LISTEN     0      128                              *:2345                                         *:*                  
LISTEN     0      128                              *:1234                                         *:*                  
LISTEN     0      128                           [::]:22 

查看

[root@101 bin]# mysql -uuser -P 2345 -h 127.0.0.1 -p
MySQL [(none)]> 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                            |
+----------------------------+---------------------------------------------------------+
MySQL [(none)]> select * from backends;
+-------------+--------------------+-------+------+
| backend_ndx | address            | state | type |
+-------------+--------------------+-------+------+
|           1 | 192.168.1.100:3306 | up    | rw   |
|           2 | 192.168.1.107:3306 | up    | ro   |
|           3 | 192.168.1.108:3306 | up    | ro   |
+-------------+--------------------+-------+------+
3 rows in set (0.00 sec)
进入工作接口
[root@101 ~]# mysql -uroot -P1234 -h 127.0.0.1 -p
Enter password:
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| 5_4                |
| 5_5                |
ok
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇