MySQL + keepalived 高可用架构配置!

Posted 日常编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL + keepalived 高可用架构配置!相关的知识,希望对你有一定的参考价值。


当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 MySQL + keepalived 高可用架构配置!


一、mysql安装配置

MySQL 是一个关系型数据库管理系统

关系数据库管理系统( Relational Database Management System,RDBMS ),是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统,常用的关系型数据库软件有 MySQL、Mariadb、OracleSQL Server、PostgreSQL、DB2 等。RDBMS 数据库的特点如下:

  • 数据以表格的形式出现

  • 每行记录数据的真实内容

  • 每列记录数据真实内容的数据域

  • 无数的行和列组成一张表

  • 若干的表组成一个数据库


MySQL 常用的两大引擎有 MyISAM 和 innoDB 它们的区别是:

  • MyISAM 类型的数据库表强调的是性能,其执行数度比 InnoDB 类型更快,但不提供事务支持,不支持外键,如果执行大量的 SELECT (查询)操作,MyISAM 是更好的选择,支持表锁。

  • InnoDB 提供事务支持事务、外部键、行级锁等高级数据库功能,执行大量的 INSERT UPDATE,出于性能方面的考虑,可以考虑使用InnoDB 引擎。


MySQL数据库的安装配置

[root@localhost ~]#  tar xzf  mysql-5.5.20.tar.gz

[root@localhost ~]# useradd -s /sbin/nologin  mysql


[root@localhost ~]# cmake

# 安装路径

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/

# MySQL Socket 通信文件位置

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock

# MySQL 数据存放位置

-DMYSQL_DATADIR=/data/mysql

# 配置文件位置

-DSYSCONFDIR=/etc

# MySQL 运行用户

-DMYSQL_USER=mysql

# MySQL 监听端口

-DMYSQL_TCP_PORT=3306

# 开启 xtradb 引擎支持

-DWITH_XTRADB_STORAGE_ENGINE=1

# 开启 innodb 引擎支持

-DWITH_INNOBASE_STORAGE_ENGINE=1

# 开启 partition 引擎支持

-DWITH_PARTITION_STORAGE_ENGINE=1

# 开启 blackhole 引擎支持

-DWITH_BLACKHOLE_STORAGE_ENGINE=1

# 开启 MyISAM 引擎支持

-DWITH_MYISAM_STORAGE_ENGINE=1

# 启动快捷键功能

-DWITH_READLINE=1

# 允许从本地导入数据

-DENABLED_LOCAL_INFILE=1

# 支持额外的字符集

-DWITH_EXTRA_CHARSETS=1

# 默认字符集 UTF-8

-DDEFAULT_CHARSET=utf8

# 检验字符

-DDEFAULT_COLLATION=utf8_general_ci

# 安装所有扩展字符集

-DEXTRA_CHARSETS=all

# 将临时表存储在磁盘上

-DWITH_BIG_TABLES=1

# 禁止调式模式支持

-DWITH_DEBUG=0


[root@localhost ~]# make && make install

接下来我们将 MySQL 数据库配置成系统服务

[root@localhost ~]# mkdir -p /data/mysql


[root@localhost ~]# cd /usr/local/mysql/scripts/


[root@localhost ~]# ./mysql_install_db

--basedir=/usr/local/mysql/

--datadir=/data/mysql/

--user=mysql


[root@localhost ~]# cd /usr/local/mysql/


[root@localhost ~]# cp support-files/my-large.cnf  /etc/my.cnf


[root@localhost ~]# cp support-files/mysql.server  /etc/init.d/mysqld


[root@localhost ~]# ckconfig -add mysqld


[root@localhost ~]# chkconfig mysqld on


[root@localhost ~]# service mysqld start


MySQL 主从复制配置

MySQL 主从数据同步是一个异步复制的过程,要实现复制首先需要 master 上开启 bin-log 日志功能,bin-log 日志用于记录在 Master 库中执行增、删、修改、更新操作的 sql 语句,整个过程需要开启3个线程,分别是 Master 开启 IO 线程,Slave 开启 IO 线程和 SQL 线程,具体主从同步原理详解如下:

  • Slave 上执行 slave start,Slave IO 线程会通过在Master创建的授权用户连接上至 Master,并请求 master 从指定的文件和位置之后发送 bin-log 日志内容。

  • Master 接收到来自 slave IO 线程的请求后,master IO 线程根据 slave 发送的指定 bin-log 日志 position 点之后的内容,然后返回给 slave 的 IO 线程

  • 返回的信息中除了 bin-log 日志内容外,还有 master 最新的binlog文件名以及在 binlog 中的下一个指定更新 position 点。

  • Slave IO 线程接收到信息后,将接收到的日志内容依次添加到 Slave 端的 relay-log 文件的最末端,并将读取到的 Master 端的 bin-log 的文件名和 position 点记录到 master.info 文件中,以便在下一次读取的时候能告知 master 从响应的 bin-log 文件名及最后一个 position 点开始发起请求。

  • Slave Sql 线程检测到 relay-log 中内容有更新,会立刻解析 relay-log 的内容成在 Master 真实执行时候的那些可执行的 SQL 语句,将解析的SQL 语句并在 Slave 里执行,执行成功后,Master 库与 Slave 库保持数据一致。



Master 服务器的配置文件加以下代码,并授权用户:

[ mysqld ]

server-id = 1

log-bin = mysql-bin


[root@localhost ~]#  grant replication slave on *.* to 'tongbu'@'%' identified by '123456';

show master status;


Slave 服务器配置文件添加以下代码:

server-id = 2


[root@localhost ~]# change master to master_host='192.168.72.133',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.XXXXXX',master_log_pos=XXX;


[root@localhost ~]# slave start;

[root@localhost ~]# show slave status\G;

这样就把 MySQL 主从配置好了,这时就会有一个问题,当主服务器 down 机了,如何快速的切换到 Slave 服务器上,这就需要 keepalived 自动切换到 Slave 上。


二、keepalived 配置

简介

在一个虚拟路由器中,只有作为 MASTER 的 VRRP 路由器会一直发送 VRRP 广告包( VRRP Advertisement message ),BACKUP 不会抢占 MASTER,除非它的优先级( priority )更高。当 MASTER 不可用时( BACKUP 收不到广告包 ), 多台 BACKUP 中优先级最高的这台会被抢占为 MASTER 。这种抢占是非常快速的(<1s),以保证服务的连续性。由于安全性考虑,VRRP 包使用了加密协议进行加密。


安装配置

[root@localhost ~]# tar -xzf  keepalived-1.3.6.tar.gz

[root@localhost ~]# yum -y install kernel-devel

[root@localhost ~]# cd keepalived-1.3.6

# CentOS6 的安装方法

[root@localhost ~]# yum -y install openssl openssl-devel


[root@localhost ~]# ./configure --with-kernel-dir=/usr/src/kernels/XXXX


[root@localhost ~]# make && make install

[root@localhost ~]#  cp /usr/local/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/

[root@localhost ~]# cp /usr/local/etc/sysconfig/keepalived  /etc/sysconfig

[root@localhost ~]# mkdir  -p /etc/keepalived

[root@localhost ~]# cp /usr/local/sbin/keepalived /usr/sbin/



# CentOS7 的安装方法

[root@localhost ~]# ./configure --sysconf=/etc --sbindir=/usr/sbin/


[root@localhost ~]# make && make install


在两台 MySQL 服务器都要安装 keepalived

配置文件的配置如下:

#完整的keepalived的配置文件,其配置文件keepalived.conf可以包含三个文本块:全局定义块、VRRP实例定义块及虚拟服务器定义块。全局定义块和虚拟服务器定义块是必须的,如果在只有一个负载均衡器的场合,就不须VRRP实例定义块。


#全局定义块

global_defs   {

      notification_email {       

         #指定keepalived在发生切换时需要发送email到的对象,一行一个

         XXXX@gmail.com  

      } 

     notification_email_from  XXX@163.com   #指定发件人

     smtp_connect_timeout 3    #指定smtp连接超时时间

     router_id LVS_DEVEL   #运行keepalived机器的一个标识

}  


#监控nginx进程  

vrrp_script    chk_nginx {  

    script "/data/script/nginx.sh"   #监控服务脚本;

    interval 2 #检测时间间隔(执行脚步间隔)

    weight 2

}     

     

#VRRP实例定义块  

vrrp_sync_group   VG_1{  

      # 监控多个网段的实例

        group {                      

             VI_1    # 实例名

              VI_2   

 }   


 notify_master /data/sh/nginx.sh    #指定当切换到master时,执行的脚本

 notify_backup /data/sh/nginx.sh    #指定当切换到backup时,执行的脚本

 notify /data/sh/nginx.sh         #发送任何切换,均执行的脚本

}            


vrrp_instance   VI_1 {          

       state BACKUP   #设置主机状态,MASTER|BACKUP

       nopreempt    #设置为不抢占

interface eth0      #对外提供服务的网络接口

lvs_sync_daemon_inteface eth0    #负载均衡器之间监控接口

    track_interface{     #设置额外的监控,网卡出现问题都会切换

     eth0    

     eth1    

    }     


    garp_master_delay   #在切换到master状态后,延迟进行gratuitous ARP请求

    virtual_router_id 50    #VRID标记 ,路由ID,可通过#tcpdump vrrp查看

    priority 90    #优先级,高优先级竞选为master

    advert_int 1    #检查间隔,默认1

    preempt_delay       #抢占延时,默认5分钟

    debug        #debug级别

    authentication {       #设置认证

        auth_type PASS    #认证方式

        auth_pass 22222     #认证密码

    }

       track_script {   #以脚本为监控chk_nginx

        chk_nginx           

    }            

    virtual_ipaddress {    #设置vip

        192.168.111.188

    }

}


#注意:使用了脚本监控Nginx或者MYSQL,不需要如下虚拟服务器设置块。

#虚拟服务器定义块

virtual_server   192.168.111.188 3306 {

    delay_loop 6   #健康检查时间间隔

    lb_algo rr      #调度算法rr|wrr|lc|wlc|lblc|sh|dh

    lb_kind DR       #负载均衡转发规则NAT|DR|RUN

    persistence_timeout  5     #会话保持时间

    protocol TCP      #使用的协议

    real_server 192.168.1.12 3306 {

               weight 1     #默认为1,0为失效

               notify_up   <string> | <quoted-string> #在检测到server up后执行脚本;

               notify_down <string> |  <quoted-string> #在检测到server down后执行脚本;

               TCP_CHECK {

               connect_timeout 3  #连接超时时间;

               nb_get_retry 3  #重连次数;

               delay_before_retry 3  #重连间隔时间;

               connect_port 3306   #健康检查的端口的端口;

               }

              HTTP_GET{

              url {   #检查url,可以指定多个

              path /

              digest ATM     #检查后的摘要信息

              status_code 200     #检查的返回状态码

                 }

      }

}


然后当 keepalived 检测到 MySQL 服务器的端口不通的时候,就会执行对应的 shell 脚本,并关掉本机的 keepalived 服务,这样就实现了 HA !




长按二维码

关注  我吧!


以上是关于MySQL + keepalived 高可用架构配置!的主要内容,如果未能解决你的问题,请参考以下文章

mysql学习-mysql8.0配置双主复制+keepalived实现高可用架构

MySQL高可用架构:mysql+keepalived实现

MySQL 5.6通过Keepalived+互为主从实现高可用架构

keepalived实现mysql高可用架构

MySQL + keepalived 高可用架构配置!

MySQL集群搭建-双主+keepalived高可用