双机热备方案
keepalived + mysql主从复制,实现主备
1.1部署方式
两台服务器部署相同的运行环境及服务,其中运行环境包括 java运行环境,redis, mysql, keepalived, java后台服务
1.2实现效果
主服务器后台进程停止或主服务器宕机,后台服务自动切至从服务器,如图
健康检测图解
在主服务器后台服务运行正常的初始状态
虚拟ip漂移至从服务器
主从复制图解
MySQL客户端将数据写入master数据库。
master数据库会将变更的记录数据写入二进制日志binlog中。
slave数据库会订阅master数据库的binlog日志,通过一个I/O线程从binlog的指定位置拉取日志进行主从同步,此刻master数据库会一个Binlog Dump线程来读取binlog日志与slave I/O线程进行数据同步。
slave I/O 线程读取到日志后会先写入relay log重放日志中。
slave数据库会通过一个SQL线程读取relay log进行日志重放,实现了主从数据库之间的同步。
1.3缺点
(1)为保证两台服务器的静态资源同步,需要申请静态资源服务器,相关接口业
务代码及库表都需要改动,否则主服务器宕机,备服务器启动时,客户端无法呈现静态资源
(2)为保证两台服务器的数据同步,需要配置主从数据库,且存在数据不同步的
风险,开发成本较高
主从数据库配置
2.1查看账户权限
复制账户需要有 replication slave与replication client权限
查看用户权限
SELECT * FROM mysql.user WHERE user='csdataapp';
有权限:
Repl_slave_priv: Y;
Repl_client_priv: Y;
无权限:
Repl_slave_priv: N;
Repl_client_priv: N;
2.2赋权
(1)授权命令
grant select, Replication Slave, Replication Client on *.* to username@"%" identified by 'password' ;
(2)刷新权限
FLUSH PRIVILEGES;
2.3注意事项
两个服务器mysql都需要开启二进制日志功能
开启主从复制前,一定要保证主从数据库的一致性(库表结构与数据),在进行如下的配置,配置主从复制时禁止对数据库进行任何增删改查的操作,为减少二进制日志传输过程中的错误及数据重写过程中的错误,从数据库设置为只读。
2.4数据初始化
(1)备份
主库mysql执行备份命令:
mysql -uroot -p123456 csdata_app > 20200119.sql
(2)初始化
从库先执行表结构及视图sql;
从库mysql执行还原命令:
mysql -uroot -p123456 csdata_app --one-database < 20200119.sql
2.5主数据库配置
(1)新增配置
打开 vim /etc/my.cnf
新增以下配置
[mysqld]
server-id=110 #设置为ip后六位
log_bin=master-bin
(2)重启mysql
service mysqld restart;
(3)查看二进制日志
进入mysql命令行
mysql -uxxx -pxxx
查看二进制日志是否正常开启,如图所示为正常开启
show variables like 'log_%';
(4)查看二进制文件是否正常生成,如下为正常生成
show master logs;
2.6 从数据库配置
(1)新增配置
命令行打开 vim /etc/my.cnf
新增配置:
开启二进制日志与中继日志,允许备库将重放的事件也记录到自身的二进制日志中
将数据库设置为只读
[mysqld]
log_bin = slave-bin
server-id = 2
#relay_log = /opt/app/relay/mysql-relay-bin
read_only=ON
log_slave_updates