MySQL主主模式+Keepalived高可用( 二 )

我们要记住binlog文件的名字 , 也就是mysql_master.000001 , 和位置 , 也就是516 。
然后 , 我们再登录到192.168.73.142(主2)的数据库 , 执行如下命令:
mysql> CHANGE MASTER TO# MySQL主的IP->MASTER_HOST='192.168.73.141',# MySQL主的端口->MASTER_PORT=3306# MySQL主的备份账号->MASTER_USER='repl_master',# MySQL主的备份账号密码->MASTER_PASSWORD='password',# 日志文件 通过show master status得到的->MASTER_LOG_FILE='mysql_master.000001',# 日志文件位置 通过show master status得到的->MASTER_LOG_POS=516;# 开启从库mysql> START SLAVE;# 查看从库的状态mysql> SHOW SLAVE STATUS;这样 , 192.168.73.141(主1)->192.168.73.142(主2)的主从就搭建好了 。 然后 , 我们再反过来 , 搭建192.168.73.142(主2)->192.168.73.141(主1)的主从 。
先登录192.168.73.142(主2)的数据库 , 执行如下命令:
# 创建备份的账号 使用MYSQL_NATIVE_PASSWORD的方式加密mysql> CREATE USER 'repl_slave'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'password';# 对repl_slave授予备份的权限mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_slave'@'%';# 刷新权限mysql> FLUSH PRIVILEGES;?# 查看MySQL主节点的状态mysql> SHOW MASTER STATUS;?+-------------------+---------+--------------+---------------------------------------------+------------------+| File| Position | Binlog_Do_DB | Binlog_Ignore_DB| Executed_Gtid_Set |+-------------------+---------+--------------+---------------------------------------------+------------------+| mysql_slave.000001 |379 || information_schema,mysql,performance_schema,sys ||+-------------------+---------+--------------+---------------------------------------------+------------------+1 row in set再登录到192.168.73.141(主1)的数据库 , 执行如下命令:
mysql> CHANGE MASTER TO# MySQL主的IP->MASTER_HOST='192.168.73.142',# MySQL主的端口->MASTER_PORT=3306# MySQL主的备份账号->MASTER_USER='repl_slave',# MySQL主的备份账号密码->MASTER_PASSWORD='password',# 日志文件 通过show master status得到的->MASTER_LOG_FILE='mysql_slave.000001',# 日志文件位置 通过show master status得到的->MASTER_LOG_POS=379;# 开启从库mysql> START SLAVE;# 查看从库的状态mysql> SHOW SLAVE STATUS;这样 , 192.168.73.142(主2)->192.168.73.141(主1)的主从也搭建好了 。 我们可以使用navicat分别连接192.168.73.141(主1)和192.168.73.142(主2) , 并执行建表、插入语句 , 验证一下主主同步是否成功 , 这里就不给大家演示了 。
Keepalived高可用MySQL主主结构已经搭建好了 , 无论从哪个MySQL插入数据 , 都会同步到另外一个MySQL 。 虽然有了MySQL主主结构 , 但是不能保证高可用 , 比如 , 我们的应用程序连接的是192.168.73.141(主1) , 倘若192.168.73.141(主1)的MySQL挂掉了 , 我们的应用程序并不能自动的切换到192.168.73.142(主2) , 我们的应用程序也是不可用的状态 。 要做到这一点 , 就要借助于Keepalived 。
Keepalived有两个主要的功能:

  • 提供虚IP , 实现双机热备
  • 通过LVS , 实现负载均衡
我们这里使用Keepalived , 只需要使用其中的一个功能 , 提供虚IP , 实现双机热备 。 我们需要在192.168.73.141(主1)和192.168.73.142(主2)上都安装Keepalived , 执行命令如下:
yum install keepalived我们直接使用yum进行安装 。 安装完之后 , 编辑keepalived的配置文件 , 首先编辑192.168.73.141(主1)上的配置文件 , 如下:
vim /etc/keepalived/keepalived.conf?# 全局配置 不用动只需注释掉vrrp_strictglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#必须注释掉 否则报错#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0}?# 检查mysql服务是否存活的脚本vrrp_script chk_mysql {script "/usr/bin/killall -0 mysqld"}# vrrp配置虚IPvrrp_instance VI_1 {# 状态:MASTER另外一台机器为BACKUPstate MASTER# 绑定的网卡interface ens33# 虚拟路由id两台机器需保持一致virtual_router_id 51# 优先级 MASTER的值要大于BACKUPpriority 100advert_int 1authentication {auth_type PASSauth_pass 1111}# 虚拟IP地址 两台keepalived需要一致virtual_ipaddress {192.168.73.150}# 检查脚本 vrrp_script的名字track_script {chk_mysql}}?###后边的virtual_server全部注释掉 它是和LVS做负载均衡用的这里用不到###再编辑192.168.73.142(主2)上的配置文件 , 只需要将state MASTER改为state BACKUP , 如下:
state BACKUP通过keepalived的配置 , 我们对外提供192.168.73.150的IP , 这个IP实际指向是192.168.73.141(主1) , 因为它的state是MASTER 。 当keepalived检测到192.168.73.141(主1)上的MySQL不可用时 , 会自动切换到192.168.73.142(主2) 。 对于外部用户是无感知的 , 应为外部统一使用的是192.168.73.150 。