Mysql+Keepalived实现双主热备

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

MySQL双主复制,即互为Master-Slave(默认只使用一台MasterA负责数据写入,另一台MasterB备用),可以实现数据库服务器的热备,但是一台Master宕机后不能实现动态切换。使用Keepalived,可以通过虚拟IP,实现双主对外的统一接口以及自动检查、失败切换机制,从而实现MySQL数据库的高可用方案。

一、Mysql安装、配置和安全启动

把mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz上传到/usr/local/src/

1、mysql安装

cd /usr/local/src/
tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
mkdir -p /usr/local/mysql/
mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/local/mysql/mysql-5.7.28

2、创建mysql用户组和用户

cd /usr/local
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
chown -R mysql:mysql mysql

3、初始化数据

cd /usr/local/mysql/mysql-5.7.28
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/mysql-5.7.28/ --datadir=/data1/mysql/data --lc_messages_dir=/usr/local/mysql/mysql-5.7.28/share --lc_messages=en_US
bin/mysql_ssl_rsa_setup --datadir=/data1/mysql/data

4、修改配置

vi /etc/my.cnf
basedir=/usr/local/mysql/mysql-5.7.28
datadir=/data1/mysql/data

4、配置环境变量

#编辑环境变量 .bash_profile表示当前用户个人配置 只对当前用户生效
vi ~/.bash_profile

#将mysql的bin目录配置到环境变量中
PATH=$PATH:$HOME/bin:/usr/local/mysql/mysql-5.7.28/bin
export PATH

#使配置修改后立即生效
source ~/.bash_profile

5、修改密码、配置远程访问和安全启动

#启动前先设置免密登录
vi /etc/my.cnf
#添加如下配置并保存 跳过权限验证
skip-grant-tables=1

#安全启动
cd /usr/local/mysql/mysql-5.7.28/bin
./mysqld_safe --user=mysql &

#修改密码
#进入mysql
mysql
use mysql
update user set authentication_string=password("123456") where user="root";
#刷新权限表
flush privileges;

#配置远程访问
use mysql
#允许所有机器访问root用户 %代表所有机器
update user set host='%' where user='root';
#授权所有机器的root用户拥有所有数据库的所有权限 远程访问密码root %代表所有机器
grant all privileges on *.* to root@'%' identified by 'root';
#刷新权限表
flush privileges;

#退出mysql
exit

#安全关闭
./mysqladmin -uroot -p shutdown

#删除免密登录配置
vi /etc/my.cnf
#删除skip-grant-tables=1并保存

#安全启动
./mysqld_safe --user=mysql &

二、 两台Mysql配置双主

1、创建主从同步replication用户

2、授权

192.168.0.101

#授权IP192.168.0.102的从数据库replication用户拥有所有数据库的同步权限 远程访问密码replication
grant replication slave on *.* to 'replication'@'192.168.0.102' identified by 'replication';
#刷新权限表
flush privileges;

192.168.0.102

#授权IP192.168.0.101的从数据库replication用户拥有所有数据库的同步权限 远程访问密码replication
grant replication slave on *.* to 'replication'@'192.168.0.101' identified by 'replication';
#刷新权限表
flush privileges;

2、添加配置文件

[mysqld]
basedir=/usr/local/mysql/mysql-5.7.28
datadir=/data1/mysql/data

server-id = 101

skip-external-locking

log_bin = mysql-binlog
binlog_do_db = sample
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema

binlog_group_commit_sync_delay = 100000 # 单位微妙
binlog_group_commit_sync_no_delay_count = 20 # 单位每组事物数量

#设置复制类型
slave-parallel-type=LOGICAL_CLOCK
#设置并行数量
slave-parallel-workers=4

#主主需要加的部分
replicate-do-db = sample

log-slave-updates=true
#sync_binlog=1
auto_increment_offset=1
auto_increment_increment=2

innodb_buffer_pool_size = 12G
innodb_buffer_pool_instances = 8
innodb_buffer_pool_chunk_size = 128M
innodb_log_file_size = 256M
innodb_log_buffer_size = 32M
innodb_flush_method = O_DIRECT
innodb_lock_wait_timeout = 120

slow_query_log = ON
slow_query_log_file = /usr/local/mysql/log/slow.log
long_query_time = 5

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

secure_file_priv=/usr/local/mysqlcsvfiles/

expire_logs_days=7
max_binlog_size=1024M

!includedir /etc/my.cnf.d

3、添加之后

mkdir -p /usr/local/mysql/log
mkdir -p /usr/local/mysqlcsvfiles

4、安全关闭

./mysqladmin -uroot -p shutdown

5、安全启动

./mysqld_safe --user=mysql &

6、进入mysql执行

#进入mysql执行
show master status\G;

#分别记录主的binlog位置,在101的角度上102为主,在102的角度上,101为主
File:mysql-bin.000001
Position: 154

#设置同步关系(两个主都要设置)
#其中master_log_file和master_log_pos要登录到对方机器执行show master status\G;去查看
stop slave;
(在192.168.0.101)
change master to master_host='192.168.0.102',master_user='replication',master_password='replication',master_log_file='mysql-bin.000001',master_log_pos=154;
(在192.168.0.102)
change master to master_host='192.168.0.101',master_user='replication',master_password='replication',master_log_file='mysql-bin.000001',master_log_pos=154;

#分别启动slave
start slave;

三、安装Keepalived

1、安装编译依赖包

yum install -y gcc openssl-devel libnl libnl-devel libnfnetlink-devel

2、安装Keepalived

#解压keepalived压缩包放到/usr/local/并重命名为keepalived
cd /usr/local/src
tar -zxvf keepalived-2.0.7.tar.gz
mv keepalived-2.0.7 /usr/local/keepalived

#配置keepalived 得到一个Makefile的文件夹
#--prefix:keepalived安装目录
#--sysconf:keepalived的核心配置文件,必须要在/etc目录下面,改为其他位置会导致启动不了,不配置在该目录下的话,启动keepalived时日志文件里面会报错,显示找不到/etc这个文件夹
cd /usr/local/keepalived
./configure --prefix=/usr/local/keepalived/ --sysconf /etc

#编译和安装keepalived
make && make install

#创建keepalived软链接 /usr/sbin/如果存在keepalived就先删除
ln -s  /usr/local/keepalived/sbin/keepalived /usr/sbin/

#复制keepalived脚本文件到/etc/init.d/目录下
cd keepalived
cp /usr/local/keepalived/etc/init.d/keepalived /etc/init.d/

#设置Keepalived开机自启动
chkconfig --add keepalived
chkconfig keepalived on

#启动keepalived
service keepalived start

四、配置Keepalived

1、编辑keepalived配置文件

vi /etc/keepalived/keepalived.conf

2、主服务器添加对应配置文件

global_defs {
	router_id LVS_LEVEL1	#主服务器名称
}

vrrp_script check_run {
   script "/etc/keepalived/mysql_check.sh"
   interval 5				#5秒执行一次脚本
}

vrrp_instance VI_1 {
    state MASTER			#主服务器
    interface eth0			#承载VIP地址到物理接口
    virtual_router_id 51	#虚拟路由器ID号,每个热播组保持一致
    priority 100			#优先级,数值越大优先级越高
    advert_int 1			#检查间隔,默认为1s
    authentication {		#认证信息,每个热播组保持一致
        auth_type PASS      #认证类型
        auth_pass 1111		#密码字串
    }
    virtual_ipaddress {
        192.168.0.144		#VIP地址(内网地址)
    }
    track_script {
        check_run
    }
}

3、备份服务器添加对应配置文件

global_defs {
	router_id LVS_LEVEL2	#备份服务器名称
}
vrrp_script check_run {
	script "/etc/keepalived/mysql_check.sh"
	interval 5				#5秒执行一次脚本
}
vrrp_instance VI_1 {
    state BACKUP			#备份服务器
    interface eth0			#承载VIP地址到物理接口
    virtual_router_id 51	#虚拟路由器ID号,每个热播组保持一致
    priority 50				#优先级,数值越大优先级越高
    advert_int 1			#检查间隔,默认为1s
    authentication {		#认证信息,每个热播组保持一致
        auth_type PASS      #认证类型
        auth_pass 1111		#密码字串
    }
    virtual_ipaddress {
        192.168.0.144       #VIP地址(和主服务器设置一样)
    }
    track_script {
        check_run
    }
}

附mysql_check.sh

#!/bin/bash
/usr/bin/mysql -uroot -p'你自己的数据库密码' -e "show status" &>/dev/null 
if [ $? -ne 0 ] ;then
    systemctl stop keepalived
fi
chmod +x /etc/keepalived/mysql_check.sh

4、重启keepalived 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
以下是 MySQL + Keepalived 双主热备高可用构建步骤: 1. 安装 MySQLKeepalived 在两台服务器上安装 MySQLKeepalived,确保版本相同。 2. 配置 MySQL 主从复制 将其中一台服务器设置为主服务器,另一台设置为从服务器。在主服务器上创建一个新用户并授权给从服务器。 在主服务器上执行以下命令: ``` CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; ``` 在从服务器上执行以下命令: ``` CHANGE MASTER TO MASTER_HOST='master_server_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; ``` 其中,`master_server_ip` 是主服务器的 IP 地址,`mysql-bin.000001` 是主服务器上二进制日志文件的名称。 3. 配置 Keepalived 在两台服务器上配置 Keepalived。在主服务器上设置为 MASTER 状态,在从服务器上设置为 BACKUP 状态。 在主服务器上创建 `/etc/keepalived/keepalived.conf` 文件,写入以下内容: ``` vrrp_script chk_mysql { script "/etc/keepalived/check_mysql.sh" interval 2 weight -2 fall 10 rise 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 virtual_ipaddress { 192.168.1.100/24 dev eth0 } authentication { auth_type PASS auth_pass password } track_script { chk_mysql } } ``` 在从服务器上创建 `/etc/keepalived/keepalived.conf` 文件,写入以下内容: ``` vrrp_script chk_mysql { script "/etc/keepalived/check_mysql.sh" interval 2 weight -2 fall 10 rise 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 100 virtual_ipaddress { 192.168.1.100/24 dev eth0 } authentication { auth_type PASS auth_pass password } track_script { chk_mysql } } ``` 其中,`192.168.1.100` 是虚拟 IP 地址,`password` 是认证密码。`check_mysql.sh` 是一个用于检测 MySQL 是否正常工作的脚本,需要在主从服务器上都创建。 4. 测试高可用性 启动 MySQLKeepalived 服务,在主服务器上创建一个测试数据库并往里面插入一些数据。然后断开主服务器的网络连接,观察从服务器是否接管了虚拟 IP 地址,以及测试数据库是否可用。 以上就是 MySQL + Keepalived 双主热备高可用构建步骤,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z.haoui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值