MySQL + Keepalived 双主热备搭建

什么是双主复制在传统的主从复制架构中,从库仅仅是作为主库数据的备份,当主库发生故障时,数据库将停止对外提供服务,并且主库故障后手动进行主从切换的过程也较为繁琐 。为了解决这个问题,可以采用 MySQL 双主模式,其中一台主库提供服务,另一台作为热备 。结合 keepalived 使用虚拟 IP 对外提供服务,一旦主库发生故障,备库可以在很短的时间内接管服务 。
 

MySQL + Keepalived 双主热备搭建

文章插图
机器规划搭建 MySQL 双主同步准备工作创建相关目录#创建用户userdel -r mysqlgroupadd mysql useradd -r -g mysql -s /bin/false mysql #创建目录# /mysql/App/MySQL 数据库软件根目录# /mysql/data/3306/data/MySQL 数据文件目录# /mysql/log/3306/binlogMySQL 二进制日志目录# /mysql/log/3306/relaylogMySQL 中继日志目录# /mysql/backup/3306/xtrabackup/target_dirMySQL xtrabackup 物理备份目录# /mysql/backup/3306/mysqldumpMySQL mysqldump 逻辑备份目录# /mysql/scriptMySQL 常用脚本存放目录mkdir -p /mysql/app/mkdir -p /mysql/data/3308/data/mkdir -p /mysql/log/3308/binlogmkdir -p /mysql/log/3308/relaylogmkdir -p /mysql/backup/3308/xtrabackup/target_dirmkdir -p /mysql/backup/3308/mysqldumpmkdir -p /mysql/script#给目录授权chown -R mysql:mysql /mysql
复制代码下载并解压 MySQL 安装包MySQL 压缩包下载地址:https://dev.mysql.com/downloads/mysql/5.7.html
 
#解压压缩包tar zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz -C /mysql/appmv /mysql/app/mysql-5.7.29-linux-glibc2.12-x86_64 /mysql/app/mysqlchown -R mysql:mysql /mysql
复制代码配置环境变量##将MySQL目录添加环境变量##cat >> ~/.bash_profile <<-EOFexport PATH=$PATH:/mysql/app/mysql/binEOFsource ~/.bash_profile
复制代码初始化主库 A主库 A 重要配置如下:
 
  • 开启 binlog:log_bin=binlog 目录
  • 设置 server_id:server_id = 1,主库 A 的 server_id 和主库 B 要不一样 。
  • 针对 GTIP 的方式同步有两个参数必须设置:
  • gtid_mode=on
  • enforce_gtid_consistency=on
  • 防止主键冲突:
  • 设置自增主键步长,通常有几个主库 就写几,避免主键冲突:auto_increment_increment=2
  • 设置自增主键起始值,第一个主库为 1,第二个主库为 2,以此类推:auto_increment_offset=1
 
关于防止主键冲突的两个参数的详解可以查看 这篇博客 。
 
#主机名和端口号作为目录名的一部分HostName=`hostname`MySql_Port=3308#IP地址Ip=192.168.1.36#master server_id 要和 slave 不一样Server_Id=1cat > /mysql/data/$MySql_Port/my.cnf <<-EOF#------------------------------------ #客户端设置#------------------------------------[client]port=$MySql_Portsocket =/mysql/data/$MySql_Port/mysql.sockdefault-character-set=utf8 #------------------------------------ #mysql连接工具设置#------------------------------------


推荐阅读