Mysql----基于360atlas插件的mysql主从复制、读写分离

一、mysql主从搭建(一主两从)

1、将配置文件拷贝到宿主机本地,每个节点都执行一次

mkdir -p /home/docker/mysql
cd /home/docker/mysql
docker run -d --rm --name mysql -e MYSQL_ROOT_PASSWORD=123456 cuiyf/mysql:5.7
docker cp mysql:/etc/mysql .
mv mysql config
docker stop mysql

2、修改配置文件

master配置

[mysqld]
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
datadir=/var/lib/mysql
symbolic-links=0
# 必要配置
log-bin=mysql-bin
server-id=1
binlog_format=ROW 
# 可选配置
binlog-ignore-db=mysql //不同步的数据库(mysql通常不同步)
binlog-do-db=db_name //同步的数据库
## 开启GTID ##
gtid_mode=on
enforce_gtid_consistency=on

slaver1配置

[mysqld]
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
datadir=/var/lib/mysql
symbolic-links=0
# 必要配置
server-id=2
relay-log=relay-bin
## 开启GTID ##
gtid_mode=on
enforce_gtid_consistency=on

slaver2配置

[mysqld]
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
datadir=/var/lib/mysql
symbolic-links=0
# 必要配置
server-id=3
relay-log=relay-bin
## 开启GTID ##
gtid_mode=on
enforce_gtid_consistency=on

3、启动mysql容器

docker run -d --name mysql-master -p 4567:3306 -e MYSQL_ROOT_PASSWORD=123456 \
-v /home/docker/mysql/config/:/etc/mysql \
-v /home/docker/mysql/data:/var/lib/mysql \
cuiyf/mysql:5.7

docker run -d --name mysql-slaver1 -p 4567:3306 -e MYSQL_ROOT_PASSWORD=123456 \
-v /home/docker/mysql/config/:/etc/mysql \
-v /home/docker/mysql/data:/var/lib/mysql \
cuiyf/mysql:5.7

docker run -d --name mysql-slaver2 -p 4567:3306 -e MYSQL_ROOT_PASSWORD=123456 \
-v /home/docker/mysql/config/:/etc/mysql \
-v /home/docker/mysql/data:/var/lib/mysql \
cuiyf/mysql:5.7

4、配置主从

master创建复制用户

docker@docker1:~/mysql$ docker exec -it mysql-master bash
mysql> grant replication slave on *.* to repl@'192.168.99.101' identified by '123456';
mysql> grant replication slave on *.* to repl@'192.168.99.102' identified by '123456';

查看master状态

docker@docker1:~/mysql$ docker exec -it mysql-master bash
mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000003 |      786 |              |                  | d20cafcf-efc6-11e9-bdcc-0242ac110004:1-7 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)

登录从库建立主从复制,Slave_IO_RunningSlave_SQL_Running均为Yes即可

# 未开启GTID
mysql> change master to \
master_user='repl', \
master_password='123456', \
master_host='192.168.99.100', \
master_port=4567, \ 
master_log_file='mysql-bin.000003', \ 
master_log_pos=786;

# 开启GTID
mysql> change master to \
master_user='repl', \
master_password='123456', \
master_host='192.168.99.100', \
master_port=4567, \ 
master_auto_position=1;


mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.99.100
                  Master_User: repl
                  Master_Port: 4567
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 786
               Relay_Log_File: 9efd667c9e4b-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
.....

5、验证主从

在从库创建一个数据库

mysql> create database cyf;

查看从库是否同步这个数据库,存在即证明主从复制搭建完毕

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cyf                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

二、基于360atlas插件建立读写分离

1、配置文件准备

mkdir -p /home/docker/atlas/conf
cd /home/docker/atlas/conf
vi test.cnf
[mysql-proxy]

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

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

#实现管理接口的Lua脚本所在路径
admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua

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

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

#设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true
daemon=false

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

#工作线程数,推荐设置与系统的CPU核数相等
event-threads=4

#日志级别,分为message、warning、critical、error、debug五个级别
log-level=message

#日志存放的路径
log-path=/usr/local/mysql-proxy/log

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

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

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

#连接池的最小空闲连接数,应设为event-threads的整数倍,可根据业务请求量大小适当调大或调小
min-idle-connections=8

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

#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,此设置项用于多个用户名同时访问同一个Atlas实例的情况,若只有一个用户名则不需要设置该项
#pwds = user1:+jKsgB3YAG8=, user2:GS+tr4TPgqc=

#默认字符集,若不设置该项,则默认字符集为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

client-ips=

2、启动360atlas

docker run -d -p 1234:1234 -p 2345:2345 --name 360atlas \
-v /home/docker/atlas/conf/:/usr/local/mysql-proxy/conf \
-v /home/docker/atlas/logs:/usr/local/mysql-proxy/log \
cuiyf/atlas:1.0.0

3、验证读写分离搭建成功

登录管理几点查看主从状态,state均为up即可,客户端连接1234端口即可完成读写分离

mysql -h192.168.99.100 -uroot -p123456 -P2345

mysql> SELECT * FROM backends;
+-------------+---------------------+-------+------+
| backend_ndx | address             | state | type |
+-------------+---------------------+-------+------+
|           1 | 192.168.99.100:4567 | up    | rw   |
|           2 | 192.168.99.101:4567 | up    | ro   |
|           3 | 192.168.99.102:4567 | up    | ro   |
+-------------+---------------------+-------+------+
3 rows in set (0.00 sec)

设置1234端口登录的用户密码:

mysql -h192.168.99.100 -uroot -p123456 -P2345

mysql> add pwd root:123456;
Empty set (0.00 sec)

mysql> save config;
Empty set (0.01 sec)

其他管理命令如下:

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)
```
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值