MySQL + keepalived 高可用架构配置!
Posted 日常编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL + keepalived 高可用架构配置!相关的知识,希望对你有一定的参考价值。
MySQL 是一个关系型数据库管理系统
关系数据库管理系统( Relational Database Management System,RDBMS ),是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统,常用的关系型数据库软件有 MySQL、Mariadb、Oracle、SQL 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 上。
简介
在一个虚拟路由器中,只有作为 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实现高可用架构