Centos7+Mariadb+Keepalived实现Mariadb(MYSQL)的高可用(HA)

我们前面几篇文章中有介绍了Keepalived的功能--HA,关于MySQL-HA,目前有多种解决方案,比如heartbeat、drbd、mmm、共享存储,但是它们各有优缺点。heartbeat、drbd配置较为复杂,需要自己写脚本才能实现MySQL自动切换,对于不会脚本语言的人来说,这无疑是一种脑裂问题;对于mmm,生产环境中很少有人用,且mmm 管理端需要单独运行一台服务器上,要是想实现高可用,就得对mmm管理端做HA,这样无疑又增加了硬件开支;对于共享存储,个人觉得MySQL数据还是放在本地较为安全,存储设备毕竟存在单点隐患。使用MySQL双master+keepalived是一种非常好的解决方案,今天我们介绍利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟IP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换。

大概的思路是将两台MYSQL服务器配置双向复制,然后通过配置Keepalived指定realserver指向本地的Mysql服务器,实现高可用的切换。具体见下:

Hostname:DB01

IP:192.168.5.53

Role:Mariadb+Keepalived

Hostname:DB012

IP:192.168.5.54

Role:Mariadb+Keepalived

Virtual IP:192.168.5.88

从Centos7下mysql已经被遗弃了,变为Mariadb了,当然功能及配置是一样的。因为我们是Centos7,所以需要指定安装源,为后面yum安装服务提供支持需要执行以下命令:

cd /etc/yum.repo
vim epel.repo
添加以下内容
[epel]   name=aliyun epel    baseurl=http://mirrors.aliyun.com/epel/7Server/x86_64/
gpgcheck=0

我们查看定义的源

运行yum install MariaDB-server MariaDB-client命令安装 MariaDB

yum install mariadb-server mariadb-client mysql

安装完成后, 我们通过rpm查看安装的相关信息

rpm -qa | grep mariadb

然后启动数据库

systemctl start mariadb
systemctl enable mariadb

接着运行 mysql_secure_installation配置MariaDB

mysql_secure_installation

配置完成后,我们进入数据库

mysql –uroot –p
show databases;

接下来我们创建一个数据库及表单信息

create databases DB1;
show databases;

use DB1;
show tables;

创建一个表
CREATE TABLE info(id int(30)NOT NULL,name varchar(30) NOT NULL,sex varchar(30) NOT NULL,mail VARCHAR(255) NOT NULL,PRIMARY KEY(id));
insert into info (name,sex,mail) values(‘ls‘,‘boy‘,‘[email protected]‘);

show tables;

我们可以根据自己的配置设置运行那些主机及用户进行mysql的连接;

如果我们需要配置任何主机都可以连接的话,可以使用一下命令

GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION;
flush privileges;
如果任何主机连接不需要密码的话可以下面
GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘‘ WITH GRANT OPTION;
flush privileges;

接下来我们修改默认的mysql配置文件

vim /etc/my.cnf
server-id = 1                    #backup这台设置2
log-bin = mysql-bin
binlog-do-db=DB  #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-ignore-db = mysql,information_schema       #忽略写入binlog日志的库
auto-increment-increment = 2             #字段变化增量值
auto-increment-offset = 1              #初始字段ID为1
slave-skip-errors = all                       #忽略所有复制产生的错误

保存退出;先查看下log bin日志和pos值位置

注意:这里记住File的值:mysql-bin.000001和Position的值:245,后面会用到。

show master status;

change master to master_host=‘主服务器‘,master_user=‘mysql用户名‘,master_password=‘mysql服务密码‘,master_log_file=‘File值‘ ,master_log_pos=Postion值;
我们需要些对方的服务器IP地址192.168.5.54
change master to master_host=‘192.168.5.54‘,master_user=‘root‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000001‘ ,master_log_pos=245;
里面填写的信息是是在主服务器上执行show master status;的信息

添加防火墙端口

firewall-cmd --add-port=‘3306/tcp‘ --permanent

启动slave
slave start;

主主同步配置完毕,查看同步状态Slave_IO和Slave_SQL是YES说明主主同步成功。

show slave status\G;

我们也需要同时在第二台服务器上执行上面的所有操作。

我们在第二台服务器上也安装完成

我们同样查看版本

rpm -qa | grep mariadb

然后启动数据库

systemctl start mariadb
systemctl enable mariadb

接着运行 mysql_secure_installation配置MariaDB
mysql_secure_installation

接下来我们同样登陆到mysql服务

mysql -uroot -p123456
show databases;

create databases DB1;
show databases;

use DB;
show tables;

创建一个表及插入数据

CREATE TABLE info(id int(30)NOT NULL,name varchar(30) NOT NULL,sex varchar(30) NOT NULL,mail VARCHAR(255) NOT NULL,PRIMARY KEY(id));
insert into info (name,sex,mail) values(‘ls‘,‘boy‘,‘[email protected]‘);

show tables;
select * from info

我们可以根据自己的配置设置运行那些主机及用户进行mysql的连接;

如果我们需要配置任何主机都可以连接的话,可以使用一下命令

GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION;
flush privileges;

接下来我们修改默认的mysql配置文件

vim /etc/my.cnf
server-id = 2                    #backup这台设置2
log-bin = mysql-bin
binlog-do-db=DB  #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-ignore-db = mysql,information_schema       #忽略写入binlog日志的库
auto-increment-increment = 2             #字段变化增量值
auto-increment-offset = 1              #初始字段ID为1
slave-skip-errors = all                       #忽略所有复制产生的错误

保存退出:  我们需要些对方的ip地址192.168.5.53

change master to master_host=‘192.168.5.53‘,master_user=‘root‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000001‘ ,master_log_pos=245;

添加防火墙端口

firewall-cmd --add-port=‘3306/tcp‘ --permanent

启动slave
slave start;

主主同步配置完毕,查看同步状态Slave_IO和Slave_SQL是YES说明主主同步成功。

show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

接下来我们测试一下

我们在第一台Mariadb的数据库表中插入一条数据,然后在第二台服务器上进行查看,是否会同步;

因为我们在配置的时候指定了DB这个数据库才会同步,所以我们需要在DB数据库中插入数据

我们当前数据库表中的数据只有一条

接下来我们插入一条数据;

insert into info(id,name,sex,mail) values(‘1‘,‘ll‘,‘girl‘,‘[email protected]‘);

插入完成后,我们在第二台服务器上进行查看;

我们查看到数据是已经同步了;

我们接下来在第二台服务器上进行插入一条数据,看看第一台服务器是否会同步;

insert into info(id,name,sex,mail) values(‘2‘,‘zs‘,‘boy‘,‘[email protected]‘);

接着我们在第一台服务器上进行查看

数据已经同步过来了

配置keepalived实现热备

我们首先在第一台服务器上进行安装

yum install -y keepalived

我们首先备份一下默认的配置文件;

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

我们查看默认配置

[[email protected] keepalived]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}
virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    sorry_server 192.168.200.200 1358
    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

通过修改后,我们将将默认的文件清空,然后粘贴下面内容

echo > /etc/keepalived/keepalived.conf

然后粘贴以下内容

global_defs {
   notification_email {
       [email protected]             # 定义通知邮箱,有多个可以换行添加
}
   notification_email_from [email protected]# 定义发送邮件的邮箱
   smtp_server mail.ixmsoft.com             # 定义发件服务器
   smtp_connect_timeout 30                  # 定义连接smtp服务器超时时间
   router_id Mysql-HA
}
vrrp_instance VI_1 {
state BACKUP           #两台都设置BACKUP
interface ens160
virtual_router_id 51       #主备相同
priority 100           #优先级,backup设置90
advert_int 1
nopreempt             #不主动抢占资源,只在master这台优先级高的设置,backup不设置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.5.88
}
}
virtual_server 192.168.5.88 3306 {
delay_loop 2
lb_algo rr              #LVS算法,用不到,我们就关闭了
lb_kind DR              #LVS模式,如果不关闭,备用服务器不能通过VIP连接主MySQL
persistence_timeout 50  #同一IP的连接60秒内被分配到同一台真实服务器
protocol TCP
real_server 192.168.5.53 3306 {   #检测本地mysql,backup也要写检测本地mysql
weight 3
notify_down /DATA/shell/mysql.sh    #当mysq服down时,执行此脚本,杀死keepalived实现切换
TCP_CHECK {
connect_timeout 3    #连接超时
nb_get_retry 3       #重试次数
delay_before_retry 3 #重试间隔时间
  }
}

我们启动keepalived服务

systemctl start keepalived
systemctl enable keepalived

接下来我们在DATA目录下创建shell目录添加mysql.sh脚本

cd /DATA
mkdir shell
vim mysql.sh
pkill keepalived
chmod a+x mysql.sh

接着我们查看keepalived的网卡监听状态,虚拟IP已经监听

我们同样在第二台服务器上也安装keepalived

yum install -y keepalived

我们首先备份一下默认的配置文件;

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

然后将第一台服务器上的keepalived拷贝到第二台服务器上的keepalived路劲下替换keepalived.conf文件

scp /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/

然后我们将第一台服务器下的mysql.sh拷贝到第二台对应的路劲

scp /DATA/shell/mysql.sh [email protected]:/DATA/shell/

然后,我们要修改第二台服务器的keepalived.conf文件,因为刚才拷贝过来的数据需要修改

vim /etc/keepalived/keepalived.conf

我们需要修改realserver的地址,指向本地192.168.5.54,然后修改weight权重值,我们备服务器修改成50

global_defs {
   notification_email {
       [email protected]             # 定义通知邮箱,有多个可以换行添加
}
   notification_email_from [email protected]# 定义发送邮件的邮箱
   smtp_server mail.ixmsoft.com             # 定义发件服务器
   smtp_connect_timeout 30                  # 定义连接smtp服务器超时时间
   router_id Mysql-HA
}
vrrp_instance VI_1 {
state BACKUP           #两台都设置BACKUP
interface ens160
virtual_router_id 51       #主备相同
priority 50           #优先级,backup设置90
advert_int 1
#nopreempt             #不主动抢占资源,只在master这台优先级高的设置,backup不设置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.5.88
}
}
virtual_server 192.168.5.88 3306 {
delay_loop 2
lb_algo rr              #LVS算法,用不到,我们就关闭了
lb_kind DR              #LVS模式,如果不关闭,备用服务器不能通过VIP连接主MySQL
persistence_timeout 50  #同一IP的连接60秒内被分配到同一台真实服务器
protocol TCP
real_server 192.168.5.54 3306 {   #检测本地mysql,backup也要写检测本地mysql
weight 3
notify_down /DATA/shell/mysql.sh    #当mysq服down时,执行此脚本,杀死keepalived实现切换
TCP_CHECK {
connect_timeout 3    #连接超时
nb_get_retry 3       #重试次数
delay_before_retry 3 #重试间隔时间
  }
}

保存退出后,我们启动keepalived服务

systemctl enable keepalived
systemctl start keepalived

我们第二台服务器的网卡监听状态,虚拟地址都 已经监听了

接下来我们需要在两台服务器上ping一下虚拟ip地址是否通

ping 192.168.5.88

我们找了一台windows机器进行测试

然后使用myslq连接工具进行测试,测试通过

我们查看连接后所有的数据信息都可以看见

接下来我们将第一台服务器服务停止。

systemctl stop keepalived
systemctl stop mariadb

客户端还是可以继续使用。

接下来我们使用客户端插入一条数据

insert into inf (id,name,sex,mail) values (‘3‘,‘gavin‘,‘boy‘,‘[email protected]‘)

我们查看插入的数据

我们在第二台服务器上查看数据

select * from info

接下来我们将第一台服务器的mariadb和keepalived服务启动起来,然后再查看数据

systemctl start mariadb
systemctl start keepalived

查看第一台的数据也会自动同步

select * from info;

时间: 2024-10-15 04:15:27

Centos7+Mariadb+Keepalived实现Mariadb(MYSQL)的高可用(HA)的相关文章

Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡

Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡 今天是2017年的第一天,昨天也就是2016年的最后一天,我尝试部署了Centos7+Nginx+Keepalived实现WEB服务的高可用负载均衡服务,终于在2017年的第一天前完成了,所以在此分享给有需要的朋友:说到负载均衡,其实在linux下有很多服务可以实现,比如nginx.haproxy.lvs等服务,当前我们在前面的文章有介绍过了,但是对于高可用服务,我们在linux下最常见也是应用最多的是Kee

Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群

大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(HA)集群基本概念详解 http://www.linuxidc.com/Linux/2013-08/88522.htm Linux 高可用(HA)集群之Heartbeat详解 http://www.linuxidc.com/Linux/2013-08/88521.htm 一.前言      前几篇博文

基于keepalived搭建MySQL的高可用集群

http://www.cnblogs.com/ivictor/p/5522383.html 基于keepalived搭建MySQL的高可用集群 MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和PXC. 对于小公司,一般推荐使用keepalived+双主,简单. 下面来部署一下 配置环境: 角色                          

CentOS6.5安装DRBD+MariaDB+Heartbeat实现数据库集群高可用

本实验使用两台服务器搭建: 系统                  CentOS6.5 tese02              IP:192.168.1.244 test03               IP:192.168.1.245 DRBD               版本:8.4.6 DRBD-UTIL       版本:8.9.2 MariaDB           版本:10.0.17 Heartbeat         版本:3.0.4 VIP                  

Mysql+Keepalived双主热备高可用操作步骤详细解析

mysql+keepalived双主热备高可用的介绍: 我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.使用Keepalived,可以通过虚拟IP,实现双主对外的统一接口以及自动检查.失败切换机制,从而实现MySQL数据库的

mysql+keepalived 双主热备高可用

理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.使用Keepalived,可以通过虚拟IP,实现双主对外的统一接口以及自动检查.失败切换机制,从而实现MySQL数据库的高可用方案. 环境说明:版本 version

keepalived + haproxy + mysql 构建高可用数据库

keepalived + haproxy + mysql 构建高可用1.keepalived 的高可用是主备,有一台作为备用2.keepalived + haproxy 搭建的高可用是可以两台都会调度的高可用 拓扑图:keepalived:负责抢占虚拟ip,使用vrrp协议haproxy:负责做访问调度,减轻单点压力,单独监听一个端口,这里用23306 1.安装mysql分别在两台机器上面搭建mysql,并做主从配置,这里不做介绍2.搭建haproxy1.download 源码包,下载地址:ht

Mysql+Keepalived双主热备高可用操作记录

环境: ubuntu18.04.2 mysql5.7.21 1 #1)安装keepalived并将其配置成系统服务.master1和master2两台机器上同样进行如下操作: 2 apt-get install libssl-dev 3 apt-get install openssl 4 apt-get install libpopt-dev 5 [[email protected] ~]# cd /usr/local/src/ 6 [[email protected] src]# wget h

Keepalived+MariaDB10配置双主高可用数据库

Keepalived+MariaDB10配置双主高可用数据库 OS RS 子网掩码 路由网关 Centos6.6 MariaDB10 Keepalived Eth0:192.168.26.210 255.255.252.0 192.168.25.3 VIP:192.168.27.210 255.255.255.252 Centos6.6 MariaDB10 Keepalived Eth0:192.168.26.211 255.255.252.0 192.168.25.3 VIP:192.168.