MySQL高可用,MySQL互为主从+keepalived。

  1. Slave 服务器上执行start slave,开启主从复制开关。
  2. 此时,Slave 服务器上的 IO 线程会通过 Master 服务器上授权的有复制权限的用户请求连接 Master 服务器,
    并请求从指定 binlog 日志文件的指定位置之后发送 binlog 日志内容。
    (日志文件名和位置就是在配置主从复制任务时执行change master命令时指定的)
  3. Master 服务器接收到来自 Slave 服务器的 IO 线程的请求后,
    Master 服务器上的 IO 线程根据 Slave 服务器的 IO 线程请求的信息,
    读取指定 binlog 日志文件指定位置之后的 binlog 日志信息,然后返回给 Slave 端的 IO 线程。
    返回的信息中除了 binlog 日志内容外,
    还有本次返回日志内容后在 Master 服务器端的新的 binlog 文件名以及在 binlog 中的下一个指定更新位置。
  4. 当 Slave 服务器的 IO 线程获取来自 Master 服务器上 IO 线程发送的日志内容及日志文件和位置点后,
    将 binlog 日志内容依次写入到 Slave 端自身的 relay log(即中继日志)文件(mysql-relay-bin.xxxxxx)的最末端,
    并将新的 binlog 文件名和位置记录到 master-info 文件中,
    以便下一次读取 Master 端新 binlog 日志时,
    能告诉 Master 服务器需要从新 binlog 日志的哪个文件哪个位置开始请求新的 binlog 日志内容。
  5. Slave 服务器端的 SQL 线程会实时检测本地 relay log 中新增加的日志内容,
    然后及时的把 relay log 文件中的内容解析成在 Master 端曾经执行的 SQL 语句的内容,
    并在自身 Slave 服务器上按语句的顺序执行应用这些 SQL 语句,应用完毕后清理应用过的日志。
  6. 经过了上面的过程,就可以确保在 Master 端和 Slave 端执行了同样的 SQL 语句。
    当复制状态正常的情况下,Master 端和 Slave 端的数据是完全一样的。

目录

 

一:环境:centos7.5 MySQL5.7           192.168.3.222 master           192.168.3.158 slave           192.168.3.223 VIP

二:首先做出双主来

三:双主搭建完成,然后在master上做一下虚拟IP,绑定网卡

四:下载keepalived,修改其配置文件

五:两台机器修改之后添加mysql简易的状态检测脚本


 

一:环境:centos7.5 MySQL5.7
           192.168.3.222 master
           192.168.3.158 slave
           192.168.3.223 VIP

二:首先做出双主来

以下操作两台机器都要做
2.1:首先域名解析:

###vim /etc/hosts (两台都做)
192.168.3.222 master
192.168.3.158 slave

2.2:下载MySQL5.7

### wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
### rpm -ivh mysql57-community-release-el7-8.noarch.rpm
### yum install mysql-server -y

2.3:启动并修改密码

### systemctl start mysqld
### grep pass /var/log/mysqld.log
### mysqladmin -u root -p'bJZY,Z0kMdcQ' password 'Cherry`123'     //修改密码

2.4:修改两台机器的配置

修改master上的配置
### vim /etc/my.cnf
    [mysqld]
    log-bin
    server-id=1
    gtid_mode=ON
    enforce_gtid_consistency=1
修改slave上的配置
### vim /etc/my.cnf
    [mysqld]
    log-bin
    server-id=2
    gtid_mode=ON
    enforce_gtid_consistency=1

2.5:重启两台机器并进行授权

重启两台机器
   ### systemctl restart mysqld

进入主数据库得到binlog日志文件名和偏移量
   mysql> show master status;

在master创建用户
   mysql> grant replication slave on *.* to 'iii'@'192.168.3.158' identified by 
          'Cherry321`';

去slave上执行
change master to master_host='192.168.3.158',master_user='iii',master_password='Tiger321`',master_port=3306,master_log_file='master-bin.000003',master_log_pos=194;  //master-bin.000003',master_log_pos=194为文件名和偏移量 

启动slave
   mysql> start slave;

在从库查看
   mysql>show slave status\G;   //Slave_IO_Running:YES    Slave_SQL_Running:YES为成功

三:双主搭建完成,然后在master上做一下虚拟IP,绑定网卡

3.1:在master上copy一份网卡文件

cp /etc/sysconfig/network-scripts/ifcfg-ens33  /etc/sysconfig/network-scripts/ifcfg-ens37
配置文件如下
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens33
UUID=9f0c5e90-b5e5-44f4-95ce-9f97d19bf880
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.3.223
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=8.8.8.8
DNS2=114.114.114.114

3.2重启网卡
###systemctl restart network

四:下载keepalived,修改其配置文件

4.1:两台机器都下载keepalived
yum -y install keepalived

4.2:修改配置文件,修改之前最好先备份一下。。。
[root@master keepalived]# vim keepalived.conf
! Configuration File for keepalived      //表示注释

global_defs {

  router_id mysql-1         //表示运行keepalived服务器的标识 

}



vrrp_instance VI_1 {
   state BACKUP                     //指定keepalived的角色,两台配置此处均是backup,这为backup将根据优先级决定主或从
   interface ens33    //指定HA检测网络的接口
   virtual_router_id 51  //虚拟路由标识,这个标识是一个数字(取值在0~255之间,用来区分多个instance的VRRP组播),同一个vrrp实例使用唯一的标识
                                  确保和slave相同,同网内不同集群此项不同,否则发生冲突
   priority 100         //用来选举master的,要成为master,该项取值范围是1-255,默认为100,slave设为50
   advert_int 1       //发送vrrp包的间隔时间
   nopreempt          //不抢占
   authentication {
       auth_type PASS
       auth_pass 1111
   }

   virtual_ipaddress {               //VIP地址

       192.168.3.223

   }

}



virtual_server 192.168.3.223 3306 {      //设置虚拟服务器,需要指定虚拟IP地址和服务端口。
   delay_loop 2             //运行情况检查时间,单位为秒
   lb_algo rr    //设置后端调度算法
   lb_kind DR        
   persistence_timeout 60
   protocol TCP

   real_server 192.168.3.222 3306 {    //配置服务节点,需要指定real server的真实IP地址和端口。
       weight 3             //配置服务节点的权值,权值大小用数字标识,数字越大,权值越高,设置权值大小为了区分不用性能的服务器
       notify_down   /root/keepalived_check_mysql.sh                //检测到realserver的MySQL服务down后执行的脚本位置
       TCP_CHECK {
            connect_timeout 3                   //连接超时时间
            nb_get_retry 3                         //重连次数
            delay_before_retry 3                //重连间隔时间
            connect_port 3306                 //健康检查端口
       }
   }
}

 下面为slave的配置

4.3:slave也修改keepalived的配置
[root@slave ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {

  router_id mysql-2

}



vrrp_instance VI_1 {
   state BACKUP
   interface ens33
   virtual_router_id 51
   priority 50
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
   }

   virtual_ipaddress {

       192.168.3.223

   }

}



virtual_server 192.168.3.223 3306 {
   delay_loop 2
   lb_algo rr
   lb_kind DR
   persistence_timeout 60
   protocol TCP

   real_server 192.168.3.158 3306 {
       weight 3
       notify_down   /root/keepalived_check_mysql.sh
       TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
       }
   }
}

五:两台机器修改之后添加mysql简易的状态检测脚本

### vim /root/keepalived_check_mysql.sh
#!/bin/bash
/usr/bin/mysql -h 192.168.3.222 -uroot -p'Tiger`123' -e "show status;" &>/dev/null
if [ $? -ne 0 ] ;then
        systemctl stop keepalived
fi


加上可执行权限
### chmod 755 /root/keepalived_check_mysql.sh

启动keepalived,关闭master  查看IP跳动

 

你可能感兴趣的:(MySQL高可用,MySQL互为主从+keepalived。)