CentOS8 MySQL 主主模式+keepalived高可用环境搭建非docker版

概述

采用了MySQL+KeepAlived实现MySQL高可用,旨在当主机发生宕机等异常情况时,使用备机的MySQL服务,以此保证系统服务的高可用。这套环境的搭建过程中,需要注意的事项如下:

1、MySQL是否数据同步(在大批量数据写入的情况下,数据没有同步将导致MySQL主从备份失效)

2、Keepalived产生的虚拟IP是否生效,是否可以正常切换。

环境说明

操作系统:CentOS8

MySQL:5.7.24

Keepalived: keepalived-2.0.18

准备两台以上的服务器或者虚拟机,保证它们相互之间能够正常通信

我准备了两台分别是:192.168.20.200 192.168.20.201

MySQL安装

1、下载MySQL的安装包

网络正常的情况下:

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

网络不通的情况可采用ftp上传 tar包

2、安装部署

#解压
tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
#重命名
mv mysql-5.7.24-linux-glibc2.12-x86_64  mysql5.7.24
#移动到/usr/local/,这里一般为软件安装的目录
mv mysql5.7.24/ /usr/local/
#进入mysql5.7.24的安装目录新建data目录
cd /usr/local/mysql5.7.24
#创建data目录
mkdir data
#更改mysql目录下的所有目录的权限及用户组,如果用户组不存在,请使用useradd mysql命令
chown -R mysql:mysql /usr/local/mysql5.7.24 
chmod 765 /usr/local/mysql5.7.24
#编译安装并初始化mysql,务必记住初始化输出日志末尾的密码(数据库管理员临时密码)
cd /usr/local/mysql5.7.24/bin
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql5.7.24/data --basedir=/usr/local/mysql5.7.24
​

3、编译完成,注意保存临时密码

4、编辑配置文件

vim /etc/my.cnf
#添加如下配置
[mysqld]
basedir=/usr/local/mysql5.7.24 #mysql默认安装在/usr/local/mysql
datadir=/usr/local/mysql5.7.24/data
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=600
innodb_file_per_table=1
lower_case_table_names=1
character_set_server=utf8
log-bin=mysql-bin
server-id=200 #作为主从集群的唯一标识,用ip地址的最后一组数据标识

参数说明:

lower_case_table_names:是否区分大小写,1表示存储时表名为小写,操作时不区分大小写;0表示区分大小写;不能动态设置,修改后,必须重启才能生效:
character_set_server:设置数据库默认字符集,如果不设置默认为latin1
innodb_file_per_table:是否将每个表的数据单独存储,1表示单独存储;0表示关闭独立表空间,可以通过查看数据目录,查看文件结构的区别;

5、启动MySQL Server服务器

/usr/local/mysql5.7.24/support-files/mysql.server start
#添加软链接,并重启mysql服务
ln -s /usr/local/mysql5.7.24/support-files/mysql.server /etc/init.d/mysql 
ln -s /usr/local/mysql5.7.24/bin/mysql /usr/bin/mysql
service mysql restart

如果出现了 ERROR! MySQL server PID file could not be found! 错误。解决方案操作如下

#把SELINUX=enforcing改为SELINUX=disabled 重启MySQL服务
vim /etc/selinux/config

6、登录MySQL修改密码、开放远程连接

注意:输入的密码是图1保存的临时密码

#修改密码
set password for root@localhost = password('yourpass');
#开放远程连接
mysql>use mysql;
msyql>update user set user.Host='%' where user.User='root';
mysql>flush privileges;
​
#设置开机自启动
#将服务文件拷贝到init.d下,并重命名为mysql
 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#赋予可执行权限
 chmod +x /etc/init.d/mysqld
#添加服务
 chkconfig --add mysqld
#显示服务列表
 chkconfig --list

至此,MySQL5.7.24 安装完成,在其他的服务器或虚拟机上按照同样的方式进行安装部署。注意配置文件中server-id不能相同。

主从集群配置

环境说明:

两台虚拟机:虚拟机IP192.168.20.200,192.168.20.201

使用数据库友好界面工具Navicat 连接两台MySQL服务器,进行主从配置。

192.168.20.200节点为201节点创建用户并授权

#创建用户
CREATE USER 'slave'@'192.168.20.201' IDENTIFIED BY '123456';
#为用户授权
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.20.201';
#刷新权限
flush privileges;  

结果如下: 记住File和Position两个参数

接下来在192.168.20.201节点进行配置:

配置步骤如下:

1、连接MySQL数据库

2、执行如下图所示的SQL脚本,注意需要修改Position和File

#配置201节点的master为200,master_user为我们授权的用户
CHANGE MASTER TO MASTER_HOST='192.168.20.200', MASTER_USER='slave',MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000019', MASTER_LOG_POS=488
#201开启slave工作模式
START SLAVE;

参数说明:

MASTER_HOST: MASTER节点的IP地址

MASTER_USER:    MASTER上MySQL创建的用户

MASTER_PASSWORD:  该用户所对应的密码

MASTER_LOG_FILE : MYSQL开启的日志类型

192.168.20.201节点进行同样的配置

执行show slave status;如果Slave_IO_Running 和 Slave_SQL_Running 均为yes,则主从备份搭建成功。

常用指令:

#查看master状态
show master status;
#开启slave模式
start slave;
#停止slave模式
stop slave;
​

MySQL主从备份测试

192.168.20.200192.168.20.201预期结果测试结果
添加数据库不做操作201同步添加与预期结果一致
不做操作添加数据库200同步添加与预期结果一致
创建表不做操作201同步创建与预期结果一致
不做操作创建表200同步创建与预期结果一致
插入数据不做操作201同步插入与预期结果一致
不做操作插入数据200同步插入与预期结果一致

高可用双主热备宕机自动切换演练

通常说的「双机热备」是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。

Keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。

VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。 Vrrp中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由中会重新选举出一个主控路由,来继续工作,来保障不间断服务。

安装Keepalived

wget http://www.keepalived.org/software/keepalived-2.0.18.tar.gz

cd keepalived-2.0.18 && ./configure --prefix=/usr/local/keepalived-2.0.18 

make && make install

cd /etc/ && mkdir keepalived

cp /home/install/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/keepalived

cp /home/install/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

vim /home/keepalived/keepalived-2.0.18/keepalived/etc/keepalived/keepalived.conf 


cp /home/keepalived/keepalived-2.0.18/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf


cp /home/install/keepalived-2.0.18/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf


ln -s /home/install/keepalived-2.0.18/sbin/keepalived /usr/bin/


修改配置文件

global_defs {
        router_id hyq_master #唯一
}

vrrp_script chk_mysql {
        script "/etc/keepalived/mysql_check.sh"
        interval 2
        timeout 2
        fall 3
}

vrrp_instance VI_1 {
        state  BACKUP   # 必填,可以是MASTER或BACKUP

        interface ens33
        virtual_router_id 100
        priority 80 #启动的优先级,数字越大表示先启动。从机上的keepalived服务该值应小于80
        nopreempt
        advert_int 1

        unicast_src_ip 192.168.20.201
        unicast_peer {
                192.168.20.200
        }
        nopreempt
        authentication {
                auth_type PASS
                auth_pass 1111
        }

        track_script {
                chk_mysql #检查脚本
        }

        virtual_ipaddress {
                192.168.20.100 #对外提供的统一IP
        }

}

对应的Mysql脚本

#!/bin/bash
A=`ps -C mysqld --no-header |wc -l`
if [ $A -eq 0 ]; then
  killall keepalived
fi

启动Keepalived

service keepalived start

systemctl daemon-reload

查看Keepalived状态

当我们看到active(running) 表示Keepalived已经启动成功了,我们可以通过192.168.20.100来连接192.168.20.200上的MSYQL数据库。

MYSQL高可用服务测试

关闭192.168.20.200 上面的MySQL服务 ,200所在机器上的keepalived服务也应该停止,并且192.168.20.201上的keepalived服务开始工作,通过keepalived,当200所在的MySQL发生故障了就会切换并使用201上MySQL服务。这样就实现了简单的高可用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值