Mariadb双主复制+Keepalived
在最后的Linux高级课程的最后,完成了高可用负载均衡WEB服务器的搭建,比较贴合实际的生产环境,一共使用到了7台虚拟机,在我这个阶段,已经是我取得的最高成就了。感觉有必要记录下来,既是帮助后来者,也是方便自己日后进行复习总结。
项目梗概
项目一共设计7台虚拟机,其中2台作为调度机,进行对访问请求的分配;2台作为Nginx服务器;2台作为Mariadb数据库服务器;一台作为NFS储存服务器,负责存储Nginx服务器的网页资源。其逻辑拓扑图如下:

我会分几个部分来介绍这个项目的配置,本次先来介绍mariadb实现双主复制和keepalived。
其中服务器的IP规划如下:
| 主机名 | 角色 | 网卡名 | 模式 | IP | VIP | 网关 |
|---|---|---|---|---|---|---|
| mariadb-1 | mst/slv | ens224 | 仅主机 | 172.21.8.33/24 | 172.21.8.50/24 | 172.21.8.254/24 |
| mariadb-2 | mst/slv | ens224 | 仅主机 | 172.21.8.34/24 | 172.21.8.50/24 | 172.21.8.254/24 |
数据库服务器的配置
数据库服务器在本项目中采用双主复制的方式,来进行高可用的实现。
主从复制配置
| 主机名 | 身份 | 网络接口 | 连接模式 | IP |
|---|---|---|---|---|
| mariadb-1 | 主服务器 | ens224 | 仅主机 | 172.21.8.33/24 |
| mariadb-2 | 备份服务器 | ens224 | 仅主机 | 172.21.8.34/24 |
- 首先在mariadb-1中进行软件的安装。
1 | yum install -y mariadb-server |
- 修改配置文件。
主配置文件/etc/my.cnf无需修改,修改/etc/my.cnf.d/mariadb-server.cnf文件,在[mysqld]段下面添加配置选项,开启二进制日志功能并设置server-id。
1 | log-bin = master.log |
- 启动mariadb-1的mariadb服务
1 | systemctl start mariadb |
- 进入MySQL,作为主服务器创建授权账户slave,并查看主服务器装态。
1 | mysql -u root |
1 | grant replication slave on *.* to 'slave'@'172.21.8.34' identified by '123'; |
授权为对方的IP
1 | show master status; |

show master status;之后,表格中的File字段和Position字段要留意,待会要用到。
- 在mariadb-2上安装软件,开启二进制日志功能,并启动服务。
1 | log-bin = slave.log |
- 进入MySQL,开启复制功能。
1 | mysql -u root |
master_log_file字段填写mariadb-1show master status后的File内容,master_log_pos填写mariadb-1show master status后的Position内容。
- 在mariadb-2上查看slave状态。
1 | start slave; |

看到图中的两个yes,代表一边的复制功能就配置完成了。
- 然后在mariadb-2 服务器上也创建一个授权账户。
1 | grant replication slave on *.* to 'slave'@'172.21.8.33' identified by '123'; |
授权为对方的IP
1 | show master status; |

再次回到mariadb-1上,连接mariadb-2,实现复制功能。
1 | change master to master_host = '172.21.8.34',master_user = 'slave',master_password = '123',master_log_file = 'master.000003',master_log_pos = 338; |
- 配置完成后,开启slave功能,查看slave状态。
1 | start slave; |

到这里数据库的主从复制已经完成了,接下来要配置数据库的keepalived功能。
keepalived配置
- 主机 DB-master 和 DB-slave 上安装 Keepalived
1 | yum install -y keepalived |
- 把配置文件保留一个副本
1 | cp /etc/keepalived/keepalived.conf{,.bak} |
- 修改两个主机上的配置文件/etc/keepalived/keepalived.conf
| 主机名 | route_id | vrrp_instance | state | interface | virtual_router_id | priority | virtual_ipaddress |
|---|---|---|---|---|---|---|---|
| mariadb-1 | db_master | mariadb-ha | BACKUP | ens224 | 60 | 100 | 172.21.8.33/24 |
| mariadb-2 | db_slave | mariadb-ha | BACKUP | ens224 | 60 | 90 | 172.21.8.34/24 |
- mariadb-1 的
/etc/keepalived/keepalived.conf的内容如下
全局配置模块
1 | ! Configuration File for keepalived |
启用 vrrp_script 模块, 定义对 mariadb 服务的监测
1 | vrrp_script check_mariadb { |
VRRPD 配置段
1 | vrrp_instance mariadb-ha { |
- mariadb-2 的
/etc/keepalived/keepalived.conf的内容如下
全局配置段
1 | ! Configuration File for keepalived |
启用 vrrp_script 模块, 定义对 mariadb 服务的监测
1 | vrrp_script check_mariadb { |
VRRPD 配置段
1 | vrrp_instance mariadb-ha { |
- 在两个主机上编写服务检测脚本
/etc/keepalived/checkmariadb.sh
1 |
|
- 启动两台服务器的
keepalived
1 | systemctl start keepalived.service |

可以看出mariadb-1主机已经多出来一个172.21.8.50/24的一个IP,这个就是虚拟出来的VIP,当mariadb-1主机宕掉,这个IP就会漂移到mariadb-2主机上,到这里就完成了mariadb双主复制和keepalived的实现。