云主机:鲲鹏云服务器

Linux系统版本:NeoKylin Linux Advanced Server release V7Update6 (Chromium)

MySQL源码版本:mysql-8.0.18

keepalived版本:keepalived-1.3.5-6.el7.aarch64

数据库架构元素

IP地址

DB1主机

10.0.20.10

DB2主机

10.0.20.20

Keepalived-VIP

10.0.20.30

2、高可用双主数据库工作原理

双主数据库工作原理是通过MySQL Replication技术将两台MySQL Server互作为Master/Slave来进行复制同步。这样就实现了高可用构架中的数据同步功能,同时,在两台MySQL Server之间,将采用keepalived来实现Mysql的自动failover。

两台MySQL Server服务器组成一个热备组(Master-Backup),同一时间热备组内只有一台Master可读写,同时这台Master(MySQL Server)会通过keepalived生成一个虚拟IP地址(VIP),这个VIP只存在Master(MySQL Server)上并对外提供服务。

如果keepalived检测到Master(MySQL Server)宕机或服务故障,备服务器Backup(MySQL Server)会自动接管VIP成为master(MySQL Server),keepalived并将原有Master(MySQL Server)从热备组移除,当原有Master(MySQL Server)恢复后,会自动加入到热备组(若存在原Master无法修复的情况,则需要重建节点)。对于WEB Server 服务器,因为访问的是虚拟IP地址(VIP),对于后端数据库故障的主机切换几乎是无感知的,这样就实现了故障自动转移、保证了业务应用的不间断运行。

双主数据库+keepalived工作原理图如下:

双主正常运行时,前端应用访问VIP(实际映射至DB1),DB1和DB2之间通过主从方式互为同步:

16233e0d6f912921c383358c5e226409.png

DB1节点故障,keepalived监测到故障后漂移VIP至DB2,前端业务几乎无感切换:

192aa402a5886ac3478fc4c576be6fe8.png

二、MySQL 8.0.18编译和安装过程要点

1、MySQL 8.0.18编译环境

MySQL源码版本:mysql-8.0.18

云主机:鲲鹏云服务器

Linux系统版本:NeoKylin Linux Advanced Server release V7Update6 (Chromium)

gcc版本:gcc7.3

cmake版本:cmake3.5.2

2、MySQL 8.0.18关于Bug #94699编译要点

源码基于ARM存在死锁bug,编译前需要修改源码来进行修复

Bug #94699      Mysql deadlock and bugcheck on aarch64 under stress test

d7ea0adfa8add443207dd664b87c789c.png

使用鲲鹏论坛分享的mysql8.0相关源码文件进行替换(storage/innobase/sync/sync0rw.cc)

若后期需正式使用在生产系统上,需使用sysbench等压测工具对编译后的数据库进行压测,以检测高并发下是否还存在死锁BUG至OOM导致MySQL进程故障。

3、MySQL 8.0.18 加载“半同步插件”和“密码复杂度组件”的要点

考虑主主环境的数据实时同步的重要性,需要加载MySQL的半同步插件;同时考虑开发在创建数据库用户时,应控制密码复杂度,需加载MySQL的密码复杂度组件。

半同步插件:semisync_master.so,semisync_slave.so

密码复杂度组件:component_validate_password

在MySQL 8.0.18数据库初始化过程中发现Abort报错,初始化失败(和my.cnf中使用plugin-load有关),核查官网Changes in MySQL 8.0.18

09bc8c326d47773d67185bf5ad276e80.png

解决方式:

应当把plugin-load参数注释,并且把和插件组件相关的参数都先注释或加loose-前缀,在初始化后,手动加载插件和组件,再启用对应参数并重启mysqld即可。

三、数据库安全策略要点

1、创建用户密码强制复杂度

ad98c569c622fa71f11d61f20ac82770.png

2、创建用户时对IP源的限制

(尽量缩小可访问的范围“特别要禁止root的远程访问权限”,若需要更细的IP源规划,可以使用鲲鹏云上的安全策略)

88eae48b3efb3f8d267cf0c71cab38ab.png

3、创建用户时对用户权限进行分权规划

(尽量根据用户具体功能缩小权限范围)

218f994464782e1e0937a490a5c9b0b7.png

四、数据库逻辑备份策略要点

数据库逻辑备份策略,在双主两台主机上运行crontab脚本,使用mysqldump每日凌晨1点备份至异机WEB2:10.0.10.20(备份存放路径/home/mybak/mysqldb_bak/),保留7天最近备份。

若需要增量数据,可根据具体情况,使用双主两个节点的binlog进行增量数据恢复。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐