双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。
Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。
方案拓扑图
环境描述:
MySQL安装推荐使用lnmp一键安装包安装MySQL服务器,方便快捷。
服务器系统:CentOS Linux release 7.5.1804 (Core)
Master A:192.168.0.109 安装mysql和keepalived
Master B:192.168.0.108 安装mysql和keepalived
VIP:192.168.0.50
MySQL配置部分
Master A 节点配置
在my.cnf文件的[mysqld]配置区域添加下面内容:
# 服务器的唯一ID,一般用IP区分
server-id = 109
# 复制过滤,不需要备份的数据库
binlog-ignore-db = mysql,information_schema
# 开启二进制日志功能,名字最好有含义(比如项目名)
log-bin = mysql-bin
# 为 0 时性能最好,风险大;为 1 时写入性能降低5倍以上,数据安全性高
sync_binlog = 1
# 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size = 1M
# 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format = mixed
# 二进制日志自动删除/过期的天数,默认值为 0,表示不自动删除
expire_logs_days = 10
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors = all
# 作为从服务器时的中继日志
relay_log = mysql-relay-bin
# log_slave_updates 表示 slave 将复制事件写进自己的二进制日志
log_slave_updates = 1
# 主键自增规则,避免主从同步ID重复的问题
auto_increment_increment = 2 # 自增因子(每次加2),一般为MySQL服务器数量
auto_increment_offset = 1 # 自增偏移(从1开始),第一台MySQL写1,第二台写2
配置好之后重启MySQL:
/etc/init.d/mysql restart
登录MySQL:
/usr/local/mysql/bin/mysql -uroot -p
-- 创建数据库同步用户,并授予相应的权限
mysql> GRANT replication SLAVE,
replication client ON *.* TO 'syncroot' @'192.168.0.%' IDENTIFIED BY 'sync123456';
-- 刷新授权表信息
mysql> FLUSH PRIVILEGES;
-- 查看binlog文件的position(偏移)和File(日志文件)的值,配置 Master B 的 Slave 时需要用到。
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+--------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+--------------------------+
| mysql-bin.000009 | 372 | | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
配置 Master A 的 Slave :
在 Master A 上执行同步操作,必须要在 Master B上创建同步账户之后才能执行。 master_user和master_password是在 Master B 上执行grant replication slave...创建的用户和密码。 master_log_file和master_log_pos是在 M