配置思路
1. 修改master和slave的配置文件,使用二进制日志,指定serverid
目的是让各自都有了自己的唯一标示,并以二进制文件格式进行交流
2. master中创建授权用户,查看二进制日志文件名,及最新位置
让slave知道用哪个用户信息访问master,知道读取哪个日志文件,及从哪儿开始读
3. slave中使用被授权用户信息及日志文件信息,进行指向master
这时已经建立了和master的联系,明确了从哪儿读取日志文件
3. 执行启动slave的命令,开始主从复制,并查看复制状态信息
准备条件
停止对master数据库的操作
把master中的数据库全部导入到slave,使两边数据库完全一致
配置步骤
1. 修改配置文件 my.cnf
master:
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=222 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
slave:
[mysqld]
log-bin=mysql-bin
server-id=226
2. 重新启动两台服务器的mysql
3. master创建授权用户
登陆主服务器mysql命令行,创建一个用于从服务器复制的用户
mysql>GRANT REPLICATION SLAVE ON *.* to '用户名'@'%' identified by '密码';
"*.*"表示对所有库的所有操作,“%”表示所有客户端都可能连,也可用具体客户端IP代替,如192.168.145.226,加强安全
4. 查看master状态
登陆主服务器mysql命令行
mysql>show master status;
+-------------------------+----------+
| File | Position |
+-------------------------+----------+
| mysql-bin.000002 | 1308 |
+-------------------------+----------+
mysql-bin.000004 是用于主从复制的文件名
1308 是日志文件内的最新位置
5. slave指向master
登陆从服务器mysql命令行,使用之前创建的用户和master的日志文件及其位置
mysql>change master to master_host='master ip',master_user='用户名',master_password='密码',
master_log_file='mysql-bin.000002',master_log_pos=1308; //注意不要断开,“1308”无单引号。
6. 启动slave
mysql>start slave;
7. 查看slave状态
mysql> show slave status\G;
结果中有两个重要数据项:
常见的问题是SQL线程没有正常工作 Slave_SQL_Running: No
通常是两边的数据库不是完全对应的,需要确保master上的库及到目前为止的最新记录都复制到slave上了
8. 测试
当IO线程和SQL线程都正常后,到master中随意测试下插入、修改、删除操作,同时到slave中检查
1) Slave_IO_Running: Yes
IO线程状态,必须YES
2) Slave_SQL_Running: Yes
SQL线程状态,必须YES
数据库复制的主要性能问题就是数据延时
为了优化复制性能,Mysql 5.6 引入了 “多线程复制” 这个新功能
但 5.6 中的每个线程只能处理一个数据库,所以如果只有一个数据库,或者绝大多数写操作都是集中在某一个数据库的,那么这个“多线程复制”就不能充分发挥作用了
Mysql 5.7 对 “多线程复制” 进行了改善,可以按照逻辑时钟的方式来分配线程,大大提高了复制性能
下面看一下在5.7中如何配置 “多线程复制”
1、对两个 mysql 实例配置好主从复制
配置成功后,在从库上使用 show processlist 查看现在的状态
可以看到只有一个复制线程在运行
2、在从库上停止复制
mysql> stop slave;
3、设置并发同步类型为逻辑时钟方式
先看下现在 slave 的并发类型,通过变量 slave_parallel_type 的值来获得,这个变量用来决定如何使用多线程复制
mysql> show variables like 'slave_parallel_type';
默认是datebase,每个线程只能处理一个数据库
配置成基于逻辑时钟的方式
mysql> set global slave_parallel_type='logical_clock';
4、设置复制线程的数量
先看下当前的并发数量,通过变量 slave_parallel_workers 的值来获得,这个变量用来决定并发处理的线程数
mysql> show variables like 'slave_parallel_workers';
现在是 0,我们把他改成 4
mysql> set global slave_parallel_workers=4;
5、启动复制
mysql> start slave;
6、验证配置结果
mysql> show processlist;
可以看到已经有4个IO线程了,配置完成
配置好了 Mysql 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡
读写分离和负载均衡是 Mysql 集群的基础需求,MaxScale 就可以帮着我们方便的实现这些功能
MaxScale 是 Mysql 的兄弟公司 MariaDB 开发的,现在已经发展得非常成熟
MaxScale 是插件式结构,允许用户开发适合自己的插件
MaxScale 目前提供的插件功能分为5类
认证插件
提供了登录认证功能,MaxScale 会读取并缓存数据库中 user 表中的信息,当有连接进来时,先从缓存信息中进行验证,如果没有此用户,会从后端数据库中更新信息,再次进行验证
协议插件
包括客户端连接协议,和连接数据库的协议
路由插件
决定如何把客户端的请求转发给后端数据库服务器,读写分离和负载均衡的功能就是由这个模块实现的
监控插件
对各个数据库服务器进行监控,例如发现某个数据库服务器响应很慢,那么就不向其转发请求了
日志和过滤插件
提供简单的数据库防火墙功能,可以对SQL进行过滤和容错
例如有 3 台数据库服务器,是一主二从的结构
过程概述(1)配置好集群环境
(2)下载安装 MaxScale
(3)配置 MaxScale,添加各数据库信息
(4)启动 MaxScale,查看是否正确连接数据库
(5)客户端连接 MaxScale,进行测试
详细过程(1)配置一主二从的集群环境
准备3台服务器,安装 Mysql,配置一主二从的复制结构
(2)安装 MaxScale
最好在另一台服务器上安装,如果资源不足,可以和某个 Mysql 放在一起
MaxScale 的下载地址
https://downloads.mariadb.com/files/MaxScale
根据自己的服务器选择合适的安装包
以 centos 7 为例 安装步骤如下:
yum install libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 libedit -y
rpm -ivh maxscale-1.4.3-1.centos.7.x86_64.rpm
(3)配置 MaxScale
在开始配置之前,需要在 master 中为 MaxScale 创建两个用户,用于监控模块和路由模块
创建监控用户
mysql> create userscalemon@'%' identified by "111111";
mysql> grant replication slave, replication client on *.* to scalemon@'%';
创建路由用户
mysql> create usermaxscale@'%' identified by "111111";
mysql> grant select on mysql.* to maxscale@'%';
用户创建完成后,开始配置
vi/etc/maxscale.cnf
找到 [server1] 部分,修改其中的 address 和 port,指向 master 的 IP 和端口
复制2次 [server1] 的整块儿内容,改为 [server2] 与 [server3],同样修改其中的 address 和 port,分别指向 slave1 和 slave2
找到 [MySQL Monitor] 部分,修改 servers 为 server1,server2,server3,修改 user 和 passwd 为之前创建的监控用户的信息(scalemon,111111)
找到 [Read-Write Service] 部分,修改 servers 为 server1,server2,server3,修改 user 和 passwd 为之前创建的路由用户的信息(maxscale,111111)
由于我们使用了 [Read-Write Service],需要删除另一个服务 [Read-Only Service],删除其整块儿内容即可
配置完成,保存并退出编辑器
(4)启动 MaxScale
执行启动命令
maxscale --config=/etc/maxscale.cnf
查看 MaxScale 的响应端口是否已经就绪
netstat -ntelp
4006 是连接 MaxScale 时使用的端口
6603 是 MaxScale 管理器的端口
登录 MaxScale 管理器,查看一下数据库连接状态,默认的用户名和密码是 admin/mariadb
maxadmin --user=admin --password=mariadb
MaxScale> list servers
可以看到,MaxScale 已经连接到了 master 和 slave
(5)测试
先在 master 上创建一个测试用户
mysql> grant ALL PRIVILEGES on *.* tortest@"%" Identified by "111111";
使用 Mysql 客户端到连接 MaxScale
mysql -hMaxScale所在的IP -P 4006 -u rtest -p111111
执行查看数据库服务器名的操作来知道当前实际所在的数据库
开启事务后,就自动路由到了 master,普通的查询操作,是在 slave上
MaxScale 的配置完成了
转自:http://yogoup.sinaapp.com/?sukey=3997c0719f151520ae4d9d483b4ebd7887d7a1b1584cfb4af239f10e02bab8b4454a80fdd4f3393a37138bae23442345