这里只做了 双主+keepalived , 对于读写要求要求大的环境,推荐架构是,双主多从(可以通过集群管理软件MMM来实现高可用架构)读写分离,当然代价也是比较高的 。 读写分离实现方法: 1、程序实现:程序端预留接口,当对于已经在运行的环境,重新修改程序,貌似不大现实 2、Mysql_proxy :官方的一种实现方式,但是官方建议不要再生产环境中使用,所以不推荐 3、Amoeba 软件分离 (推荐使用) 架构图: 一、环境要求:
| 服务器A: | 192.168.1.31 | 系统环境:CetnOS6.5、Mysql-5.6.19(主从)、Keepalived(master) |
| 服务器B: | 192.168.1.32 | 系统环境:CetnOS6.5、Mysql-5.6.19(从主)、Keepalived(back) |
二、安装Mysql 与 主从配置 (mysql安装步骤略) 这里服务器A上配置实例为3310,服务器B上的实例也为3310 (双主同样端口号的好处是在故障切换的时候) 安装好mysql后修改配置文件 1、修改A服务器上的mysql配置文件my.cnf 在my.cnf文件里加入参数(注意不要重复定义参数) server-id = 201 //这里的ID号与从库上或者主库上的ID必须保证不唯一 log-bin=mysql-bin //可以自定义 这里定义为 log-bin=/data/log-bin/log-bin-3310 binlog_format=row //主从复制模式 log-slave-updates=true //slave 更新是否记入日志 gtid-mode=on // 启用gtid类型,否则就是普通的复制架构 enforce-gtid-consistency=true //强制GTID 的一致性
master-info-repository=TABLE //主服信息记录库=表 /文件
relay-log-info-repository=TABLE //中继日志信息记录库 sync-master-info=1 //同步主库信息 slave-parallel-workers=4 //从服务器的SQL 线程数,要复制库数目相同 binlog-checksum=CRC32 // 校验码 ,可以自定义 master-verify-checksum=1 //主服校验 slave-sql-verify-checksum=1 //从服校验 binlog-rows-query-log_events=1 //二进制日志详细记录事件 report-port=3310 //提供复制报告端口,当前实例端口号 report-host=192.168.1.31 //提供复制报告主机,本机的ip地址
2、修改B服务器上的mysql配置文件my.cnf 在my.cnf文件里加入参数(注意不要重复定义参数) server-id = 202 //这里的ID号与从库上或者主库上的ID必须保证不唯一 log-bin=mysql-bin //可以自定义 这里定义为 log-bin=/data/log-bin/log-bin-3310 binlog_format=row //主从复制模式 log-slave-updates=true //slave 更新是否记入日志 gtid-mode=on // 启用gtid类型,否则就是普通的复制架构 enforce-gtid-consistency=true //强制GTID 的一致性
master-info-repository=TABLE //主服信息记录库=表 /文件
relay-log-info-repository=TABLE //中继日志信息记录库 sync-master-info=1 //同步主库信息 slave-parallel-workers=4 //从服务器的SQL 线程数,要复制库数目相同 binlog-checksum=CRC32 // 校验码 ,可以自定义 master-verify-checksum=1 //主服校验 slave-sql-verify-checksum=1 //从服校验 binlog-rows-query-log_events=1 //二进制日志详细记录事件 report-port=3310 //提供复制报告端口,当前实例端口号 report-host=192.168.1.32 //提供复制报告主机,本机的ip地址
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=performance_schema.%
(可以在配置文件里加入,作用屏蔽要复制的库)
3、授权 A服务器mysql实例3310: grant replication slave,replication client on *.* to slave@‘192.168.1.32‘identified by ‘123456‘; B服务器mysql实例3310: grant replication slave,replication client on *.* to slave@‘192.168.1.32‘identified by ‘123456‘; ================================================================================ A服务器mysql实例3310: change master to master_host=‘192.168.1.32‘,master_port=3310,master_user=‘slave‘,master_password=‘123456‘,master_auto_position=1; 注意:这里要是不配置参数master_port=3311,默认的会去找3306 B服务器mysql实例3310: change master to master_host=‘192.168.1.31‘,master_port=3310,master_user=‘slave‘,master_password=‘123456‘,master_auto_position=1; ================================================================================== A、B服务器上开启主从复制:start slave; 4、查看状态 A服务器:show slave status\G;show processlist;
B服务器:show slave status\G; show processlist;
#show processlist;
5、到这里A、B服务器间基于GTID主从复制模式已经配置好了,测试下 在A服务器3310实例上:drop databse test;B服务器3310上查看状态:show databases; 在B服务器3310实例上:create database wll_test; A服务器上3310上查看状态:show databases;
三、安装配置Keepalived负载均衡器 1、官网下载www.keepalived.org 在A服务器和B服务器上安装keepalived #tar zxvf keepalived-1.2.20.tar.gz #cd keepalived-1.2.20.tar.gz #./configure --sysconf=/etc --with-kernel-dir=/usr/local/src/kernels/2.6.32-573.el6.x86_64 #make&&make install #ln -s /usr/local/sbin/keepalived /sbin/ #ln -s /usr/local/keepalived-1.2.20 /usr/local/keepalived #chkconfig --level 35 keepalived on 2、配置keepalived #配置A服务器
.png)
#配置B服务器
3、# /etc/keepalived/change_mysql.sh 脚本内容为强杀死keepalived进程
4、#配置好后开启两服务器 keepalived
#/etc/init.d/keepalived start
#ps aux | grep keepalived
5、查看状态
# ip a
.png)
keepalived的工作机制是:每2秒检查一次real_server的监控状态,一旦发现数据库down了,此时VIP就会转移到另外一台上,从而实现故障快速切换,用户在通过VIP连接
基本可以保持一直连接状态。
四、测试切换
先检查服务器A与服务器B上的Mysql实例与keepalived是否都为开启状态
1、此时VIP在服务器B上
在B服务器上将Mysql实例3310 stop
# /etc/init.d/mysqld_3310 stop
可以看到VIP马上就切换到了服务器A 192.168.1.31这台上
2、客户端连接数据库
基本不会有影响
.png)
后续:欢迎评判!
企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)
标签: