MySQL互为主从及Keepalived配置vip——主从配置篇

在上一篇日志中,介绍了配置主从及keepalived所需的软件环境的安装方法。在本篇文章中,将介绍数据库主从环境的配置。

1、服务器角色及ip:

服务器角色 IP VIP
master A 192.168.112.133 192.168.112.88
master B 192.168.112.135 192.168.112.88
user 192.168.112.134 -

2、互为主从配置

  • master A:192.168.112.133(数据库节点)
    my.cnf文件配置如下:
[mysqld]
skip-name-resolve
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-bin=mysql-bin
# 为服务器分配id,可以自定义,不区分大小,起标识作用。不同数据库节点分配不同的id
server-id=1
binlog_format=mixed
# replicate-do-db/replicate-ignore-db这两个设置针对从服务器,当两台数据库服务器并非互为主从关系时,从服务器如此设置
# replicate-do-db = ...这项设置指定需要同步数据的数据库
replicate-do-db=eleting
# replicate-ignore-db = ...这项设置指定不需要同步数据的数据库
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
# binlog-do-db/binlog-ignore-db这两个设置针对主服务器,当两台数据库服务器并非互为主从关系时,主服务器如此设置
# binlog-do-db = ... 这项设置指定需要同步数据的数据库
binlog-do-db=eleting
# binlog-ignore-db = ... 这项设置指定不需要同步数据的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
relay_log=mysqld-relay-bin
log-slave-updates = ON
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
  • master B:192.168.112.135(数据库节点)
    my.cnf文件配置如下:
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[mysqld]
skip-name-resolve
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-bin=mysql-bin
# 为服务器分配id,可以自定义,不区分大小,起标识作用。不同数据库节点分配不同的id
server-id=2
binlog_format=mixed
# replicate-do-db/replicate-ignore-db这两个设置针对从服务器,当两台数据库服务器并非互为主从关系时,从服务器如此设置
# replicate-do-db = ...这项设置指定需要同步数据的数据库
replicate-do-db=eleting
# replicate-ignore-db = ...这项设置指定不需要同步数据的数据库
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
# binlog-do-db/binlog-ignore-db这两个设置针对主服务器,当两台数据库服务器并非互为主从关系时,主服务器如此设置
# binlog-do-db = ... 这项设置指定需要同步数据的数据库
binlog-do-db=eleting
# binlog-ignore-db = ... 这项设置指定不需要同步数据的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
relay_log=mysql-relay-bin
log-slave-updates=ON
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

关于数据库主从设置的相关知识点,大家可以查看下面一篇文章:
学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践
本篇文章中基础的数据库主从备份设置,都是根据上面这篇文章所讲述的内容,调整优化而成。文章中的原理部分讲解的很清楚,大家可以学习下。

  • 为数据库节点分配远程访问权限
# 远程登录数据库
mysql -uname -p -hxxx.xxx.xxx.xxx

在没有对相应的远程服务器分配权限之前,很可能会被拒绝登录。

# 对远程服务器进行MySQL登录授权
# 第一种方式
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%'IDENTIFIED BY 'password' WITH GRANT OPTION; 
# 第二种方式
GRANT ALL PRIVILEGES ON *.* TO 'username'@'tel server ip' IDENTIFIED BY 'password' WITH GRANT OPTION;
# 刷新配置,使远程权限生效
flush privileges;

说明:在以上分配远程访问权限的方式中,'username'是允许远程登录的用户名,@'%'是允许所有远程服务器通过设定的用户名和密码来登录数据库,@'tel server ip'是允许指定的远程服务器通过用户名和密码来登录数据库,'password'是用户名相对应的密码。

这么说还是有点不太好理解,下面我们将通过实例来说明:

# 本次配置中,需要对两台数据库服务器进行相互授权,才能实现互为主从配置
# 本次配置中,远程登录的用户名统一为'repl',密码为'12345'
# master A(192.168.112.133)对 master B(192.168.112.135)进行远程登录授权
# 第一种方式 —— 任意ip通过用户名repl和密码12345均可登录
GRANT ALL PRIVILEGES ON *.* TO 'repl'@'%'IDENTIFIED BY '12345' WITH GRANT OPTION;
# 第二种方式 —— 仅 master B(192.168.112.135)可通过用户名repl和密码12345登录
GRANT ALL PRIVILEGES ON *.* TO 'repl'@'192.168.112.135' IDENTIFIED BY '12345' WITH GRANT OPTION;
# 刷新,使配置生效
flush privileges;
# 关于 master B(192.168.112.135)对 master A(192.168.112.133)进行远程登录授权,大家参照上面的配置,选择适合自己实际情况的方式配置即可。

测试远程访问配置是否生效:

mysql -urepl -p -h192.168.112.135
MasterB-MasterA.png
mysql -urepl -p -h192.168.112.133
MasterA-MasterB.png

远程访问权限配置成功!

  • 配置主从同步
# 查看master状态
show master status\G

master A(192.168.112.133)

MasterA-status.png

master B(192.168.112.135)

MasterB-status.png

说明:File指向目前的binary log文件,文件中记录了需要同步数据的数据库的变更信息。新安装的数据库,这里一般是mysql-bin.000001,在写这篇文章时,我的环境已经配置好了,数据库多次重启和读写,所以文件如图所示。
Position指向目前的binary log文件中,是从什么位置开始记录的变更集,新文件起始位置默认为120。可以简单的将这个属性比作断点再续,这里记录的是一个节点,从服务器配置好之后,就从这个节点位置开始同步数据。
剩下的两个配置很好理解,分别是需要同步数据的库和忽略的库。

查看到File和Position之后,就可以配置对应的主库了!
在 master A(192.168.112.133)执行

CHANGE MASTER TO 
       MASTER_HOST='192.168.112.135', 
       MASTER_USER='repl', 
       MASTER_PASSWORD='12345', 
       MASTER_LOG_FILE='mysql-bin.000032', 
       MASTER_LOG_POS=120;

在 master B(192.168.112.135)执行

CHANGE MASTER TO 
       MASTER_HOST='192.168.112.133', 
       MASTER_USER='repl', 
       MASTER_PASSWORD='12345', 
       MASTER_LOG_FILE='mysql-bin.000061', 
       MASTER_LOG_POS=120;

说明:上述语句中没什么难理解的地方,每条属性都是字面意思理解就可以啦。配置完成之后,不要忘记分别重启下两个数据库。

# 重启数据库
service mysqld restart
# 或者
systemctl restart mysqld.service

验证主从是否生效:

# 查看slave状态
show slave status\G

master A(192.168.112.133)

MasterA-slave.png

master B(192.168.112.135)

MasterB-slave.png

说明:从图中可以看出,两个数据库节点的主服务器都指向了对方。关键的地方是图中红色线框框起来的部分,当两者状态都为Yes时,说明主从备份已经开始工作,且状态正常。
一者为No时,表示主从工作不正常,此时就需要开发同学耐心的去查找相关问题所在啦。造成这种情况的原因可能有很多种,在这里没办法一一列举。

至此,互为主从的配置已经完成!

下篇文章将开始keepalived的配置!

MySQL互为主从及Keepalived配置系列文章链接:

MySQL互为主从及Keepalived配置vip——环境篇
MySQL互为主从及Keepalived配置vip——主从配置篇
MySQL互为主从及Keepalived配置vip——keepalived配置篇

推荐阅读更多精彩内容