[转帖]Mysql+Keepalived实现双主热备方式

mysql,keepalived,实现,方式 · 浏览次数 : 0

小编点评

**脚本介绍** 这套脚本用于配置和安装 Keepalived,Keepalived 是一个开源的虚拟路由器,用于实现虚拟网络。 **安装步骤** 1. 将 Keepalived 安装到您的服务器。 2. 编辑 `keepalived.conf2` 配置文件。 3. 配置备份服务器。 4. 添加配置文件到 Keepalived 的 `global_defs` 中。 5. 设置 Keepalived 开机自启动。 6. 启动 Keepalived 服务。 **配置文件配置** `keepalived.conf2` 文件中包含以下配置: * **router_id**:主服务器名称 * **vrrp_script**:用于检查虚拟网络是否正常运行的脚本 * **vrrp_instance**:每个虚拟服务器的配置 * **global_defs**:包含其他服务器的配置 **备份服务器配置** `keepalived.conf2` 文件中包含以下配置: * **router_id**:备份服务器名称 * **vrrp_script**:用于检查虚拟网络是否正常运行的脚本 * **vrrp_instance**:每个备份服务器的配置 * **global_defs**:包含其他服务器的配置 **启动脚本** 使用 `sudo` 命令启动 Keepalived 服务: ``` sudo systemctl start keepalived ``` **设置开机自启动** 使用 `crontab` 等工具设置 Keepalived 的开机自启动。 **注意** * 替换 `你自己的数据库密码` 以实际密码。 * 确保 `mysql` 服务已启动。 * 请根据您的实际环境配置配置文件。

正文

https://www.jb51.net/article/266298.htm

 

这篇文章主要介绍了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安装

1
2
3
4
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用户组和用户

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

3、初始化数据

1
2
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、修改配置

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

5、配置环境变量

1
2
3
4
5
6
7
8
9
#编辑环境变量 .bash_profile表示当前用户个人配置 只对当前用户生效
vi ~/.bash_profile
  
#将mysql的bin目录配置到环境变量中
PATH=$PATH:$HOME/bin:/usr/local/mysql/mysql-5.7.28/bin
export PATH
  
#使配置修改后立即生效
source ~/.bash_profile

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#启动前先设置免密登录
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

1
2
3
4
#授权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

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

3、添加配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
[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

4、添加之后

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

5、安全关闭

1
./mysqladmin -uroot -p shutdown

6、安全启动

1
./mysqld_safe --user=mysql &

7、进入mysql执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#进入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、安装编译依赖包

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

2、安装Keepalived

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#解压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配置文件

1
vi /etc/keepalived/keepalived.conf

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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、备份服务器添加对应配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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

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

4、重启keepalived 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

与[转帖]Mysql+Keepalived实现双主热备方式相似的内容:

[转帖]Mysql+Keepalived实现双主热备方式

https://www.jb51.net/article/266298.htm 这篇文章主要介绍了Mysql+Keepalived实现双主热备方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 + 目录 我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同

[转帖]Keepalived如何实现Nginx高可用

https://www.jb51.net/article/266305.htm Keepalived安装可参考Mysql+Keepalived实现双主热备 Master上的keepalived.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

[转帖]keepalived中的vrrp_script模块

https://www.jianshu.com/p/04335495ed76 vrrp_script chk_mysql { script "/data/shell/mysql_check.sh" interval 3 rise 2 } 这里 interval表示3秒会执行一次这个脚本,默认为1s

[转帖]MySQL pid 和 socket 文件说明

2021-10-13 11:595110转载MySQL 1 pid-file文件 MySQL 中的 pid 文件记录的是当前 mysqld 进程的 pid ,pid 亦即 Process ID 。可以通过 pid-file 参数来配置 pid 文件路径及文件名,如果未指定此变量,则 pid 文件默认

[转帖]MySQL 慢查询日志深入理解

https://www.jb51.net/article/210312.htm + 目录 什么是慢查询日志 MySQL的慢查询日志是 MySQL提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过long_query_time 值的 SQL,则会被记录到慢查询日

[转帖]MySQL with Docker - Performance characteristics

https://dev.mysql.com/blog-archive/mysql-with-docker-performance-characteristics/ Docker presents new levels of portability and ease of use when it co

[转帖]MySQL Performance : Impact of InnoDB Transaction Isolation Modes in MySQL 5.7

http://dimitrik.free.fr/blog/archives/2015/02/mysql-performance-impact-of-innodb-transaction-isolation-modes-in-mysql-57.html There were so many valua

[转帖]MySQL Performance : IP port -vs- UNIX socket impact in 8.0 GA

http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-ip-port-vs-unix-socket-impact.html 2018-06-15 16:05 | MySQL, Performance, InnoDB, Benchmark

[转帖]MySQL Performance : XFS -vs- EXT4 Story

http://dimitrik.free.fr/blog/posts/mysql-80-perf-xfs-vs-ext4.html 2020-05-13 22:15 | MySQL, Performance, InnoDB, Benchmarks, DoubleWrite, XFS, EXT4 by

[转帖]MySQL Performance : 8.0 and UTF8 impact

http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-utf8-impact.html 2018-04-26 00:58 | MySQL, Performance, UTF8 by Dimitri The world is movin