这周让辅导的新人配置后端环境,其中之一为mariadb主从配置,两台实体服务器,主备部署,对外为一个虚拟ip。
新人配置过程中踩过的坑记录一下。
环境:centos:CentOS Linux release 7.6.1810 (Core),mariadb:mysql Ver 15.1 Distrib 10.3.22-MariaDB,keepalived:1.3.5-16.el7
数据库服务器通过keepalived实现主备部署,备库通过主从复制保持数据同步。
坑1:firewall。keepalived通过vrrp实现主备部署,主备选举和心跳默认通过组播通信数据,firewall需要添加相应规则。
通过添加高级防火墙规则放通,查看放通的规则如下
ipv4 filter INPUT 0 --in-interface eno3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
坑2:从库账号,从库需要连接主库,从而进行数据同步。由于数据库账号管理有一定的限制,指定了一个slave账号给从库使用,限制了客户机的ip并赋予相应权限。创建语句如下
create user 'slave'@'192.168.1.2' identified by 'slave@2016';
grant replication slave,replication client on *.* to 'slave'@'192.168.1.2' identified by 'slave';
flush privileges;
创建用户的时候需要注意限制的ip地址,赋权时也要注意,否则客户机连接失败。
这里slave账号只需要在主库创建,服务器keepalived主机配置为不随开机启动,避免故障后重启接管服务。
坑3:在从库设置主库信息,需要通过命令设置主库的日志文件和开始位置(根据主库的master状态)后再开启从库的slave服务。设置命令如下
change master to master_host='192.168.1.1',master_user='slave',master_password='slave',master_log_file='master-bin.000001',master_log_pos=0;
这里需要注意master_host的ip是主库的ip,否则slave启动失败。
坑4:dns,配置好之后发现依然连接失败,反馈为 slave@主机名 接入失败
解决方法有两个:
1:在配置文件加入skip-name-resolve,重启数据库服务
2:赋权给slave@主机名
本次操作选择了第一种方案,跳过dns也可稍微节约一点数据库性能。