数据库是最基础的数据存储服务之一,需要具备高可用性,实现不同SLA(服务水平协定)的解决方案有很多种,这些方案可用保证数据库服务器子故障时服务继续可用
高可用性需要解决的主要问题有两个,一是如何实现数据共享和同步数据,另一个是如何处理failover
数据共享一般通过SAN(storage Area Network)实现,数据同步可以通过rsync软件或DRBD技术实现。
利用MySQL Replication单向异步复制,更新只在Master节点进行,slave服务器只提供查询功能。支持链式复制
实现原理:复制过程需要三个线程,一个IO线程在Master端,另外两个(SQL线程和IO线程)在slave端,master的bin-log发给slave端,然后slave解析log文件内容,然后执行同样的SQl操作
通过keepalived配合主主互备解决方案实现90%SLA:
两台myql互相作为自己的Master,又作为对方的slave进行复制;同时采用keepalived实现自动failover
1.DB 1配置文件:
server-id = 1 #DB2就写2
log-bin=mysql-bin
relay-log=mysql-relay-bin 主机端发送过来的bin-log
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information.schema.%
不要使用*-do-db,这样可能产生跨库更新失败
2.手动同步数据库mysql:
mysql >FLUSH TABLES WITH READ LOCK;不退出这个终端的情况下再开启一个终端
打包压缩数据或者用mysqldump导出 :tar zcvf mysql.tar.gz mysql ;mysqldump -uroot * >*.sql
3.创建用户并授权:grant replication slave on *.* to 'repl'@'192.168.1.102' indentified by '123123';
show master status;查看file和pos,在db2S上操作:
change mysql to \
master_host='192.168.1.101',
master_user='repl_user',
master_password='123123',
master_log_file='mysql-bin.000001',
master_log_pos=106;
start slave;
然后相同的操作反过来做一次就可以了
keepalived配置略,记得要nopeempt
此方法不能配置多slave节点,因为slave节点的host不会跟着随着master切换而切换,MMM可以解决这个问题