mysql my.cf_MySQL双主+Keepalived高可用

本文详细介绍了如何在CentOS 6.8环境下,通过MySQL的my.cf配置实现双主复制,并结合Keepalived实现高可用。步骤包括安装MySQL,配置my.cf,创建主从账号,启动主从复制,安装并配置Keepalived,以及进行功能测试,确保VIP和数据同步正常。整个过程旨在构建一个容灾备份的高可用系统。
摘要由CSDN通过智能技术生成

原文转自:https://www.cnblogs.com/itzgr/p/10233932.html

作者:木二

目录

一 基础环境

二 实际部署

2.1 安装MySQL

2.2 初始化MySQL

2.3 master01 my.cf配置

2.4 创建账号

2.5 smaster02 my.cf配置配置

2.6 创建账号

三 启动主从

3.1 手动同步

3.2 启动Master01的slave功能

3.3 启动Master02的slave功能

四 安装Keepalived

4.1 下载

4.2 Master01配置Keepalived

4.3 创建检测脚本

4.4 Master02配置Keepalived

4.5 创建检测脚本

五 功能测试

5.1 测试vip

5.2 同步测试

5.3 测试Keepalived切换

一 基础环境

主机名

系统版本

MySQL版本

主机IP

Master01

CentOS 6.8

MySQL 5.6

172.24.8.10

Master02

CentOS 6.8

MySQL 5.6

172.24.8.11

VIP

172.24.8.12

二 实际部署

2.1 安装MySQL

1 [root@Master01 ~]# yum list installed | grep mysql#查看是否存在其他MySQL组件

2 [root@Master01 ~]# yum -y remove mysql-libs.x86_64#为避免冲突引发报错,卸载已存在的组件

f89bebe2e9281285615ee3e2b94f9ec0.png

1 [root@Master01 study]# yum localinstall mysql-commu* -y

2 [root@Master01 ~]# chkconfig --list | grep mysqld#查看MySQL是否加入启动项

3 [root@Master01 ~]# chkconfig mysqld on

2.2 初始化MySQL

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 [root@Master01 ~]# service mysqld start

2 [root@Master01 ~]# mysql_secure_installation

3 [root@Master01 ~]# service iptables stop

4 [root@Master01 ~]# chkconfig iptables off

5 [root@Master01 ~]# vi /etc/sysconfig/selinux

6 SELINUX=disabled

48304ba5e6f9fe08f3fa1abda7d326ab.png

注意:以上操作在Master02主机上也需要执行。

安装参考:http://www.cnblogs.com/007sx/p/7083143.html

2.3 master01 my.cf配置

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 [root@Master01 ~]# vi /etc/my.cnf

2 [mysqld]

3 ……

4 server-id=1#设置主服务器master的id

5 log-bin=mysql-bin#配置二进制变更日志命名格式

6 replicate-wild-ignore-table=mysql.%

7 replicate-wild-ignore-table=test.%

8 replicate-wild-ignore-table=information_schema.%

48304ba5e6f9fe08f3fa1abda7d326ab.png

注意:

master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:

方法一:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 # 不同步哪些数据库

2 binlog-ignore-db = mysql

3 binlog-ignore-db = test

4 binlog-ignore-db = information_schema

5 # 只同步哪些数据库,除此之外,其他不同步

6 binlog-do-db = mysqltest

48304ba5e6f9fe08f3fa1abda7d326ab.png

方法二:

建议采用以下方式配置过滤:

1 replicate-wild-ignore-table=mysql.%#从库配置不同步表

2 replicate-wild-do-table=test.%#从库配置需要同步的表

提示:不要在主库使用binlog-ignore-db和binlog-do-db,也不要在从库使用replicate-wild-ignore和replicate-wild-do-table。

2.4 创建账号

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 [root@Master01 ~]# mysql -uroot -p

2 Enter password:

3 mysql> grant replication slave on *.* to 'repl_user'@'172.24.8.11' identified by 'x12345678';

4 mysql> grant all privileges on *.* to 'root'@'172.24.8.%' identified by 'x120952576' with grant option;

5 mysql> flush privileges;

6 [root@Master01 ~]# service mysqld restart

7 [root@Master01 ~]# mysql -uroot -p

8 Enter password:

9 mysql> show master status;

48304ba5e6f9fe08f3fa1abda7d326ab.png

de75835f5b08103190c992d8a43c82a9.png

master01:

file:mysql-bin.000001

position:120

2.5 smaster02 my.cf配置配置

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 [root@Master02 ~]# vi /etc/my.cnf

2 [mysqld]

3 server-id=2#设置主服务器master的id

4 log-bin=mysql-bin#配置二进制变更日志命名格式

5 replicate-wild-ignore-table=mysql.%

6 replicate-wild-ignore-table=test.%

7 replicate-wild-ignore-table=information_schema.%

8 read_only=1

48304ba5e6f9fe08f3fa1abda7d326ab.png

2.6 创建账号

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 [root@Master02 ~]# mysql -uroot -p

2 Enter password:

3 mysql> grant replication slave on *.* to 'repl_user'@'172.24.8.10' identified by 'x12345678';

4 mysql> grant all privileges on *.* to 'root'@'172.24.8.%' identified by 'x120952576' with grant option;

5 mysql> flush privileges;

6 [root@Master02 ~]# service mysqld restart

7 [root@Master02 ~]# mysql -uroot -p

8 Enter password:

9 mysql> show master status;

48304ba5e6f9fe08f3fa1abda7d326ab.png

a7aa14064437455d2a01e33218126a83.png

master02:

file:mysql-bin.000001

position:120

三 启动主从

3.1 手动同步

如果Master01和Master02已经存在数据,则在开启主备复制之前,需要将Master01和Master02手动同步一次(/var/lib/mysql整个目录打包tar.gz),具体方法略。

注意:本实验都是重新安装的MySQL,可直接启动同步。

3.2 启动Master01的slave功能

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 [root@Master01 ~]# service mysqld restart

2 [root@Master01 ~]# mysql -uroot -p

3 Enter password:

4 mysql> change master to master_host='172.24.8.11',

5 master_user='repl_user',

6 master_password='x12345678',

7 master_log_file='mysql-bin.000001',

8 master_port=3306,

9 master_log_pos=120;

10 mysql> start slave;

11 mysql> show slave status\G#查看slave状态

48304ba5e6f9fe08f3fa1abda7d326ab.png

49b8e3ad0ddb43c003af188227cfeab0.png

3.3 启动Master02的slave功能

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 [root@Master02 ~]# service mysqld restart

2 [root@Master02 ~]# mysql -uroot -p

3 Enter password:

4 mysql> change master to master_host='172.24.8.10',

5 master_user='repl_user',

6 master_password='x12345678',

7 master_log_file='mysql-bin.000001',

8 master_log_pos=120;

9 mysql> start slave;

10 mysql> show slave status\G#查看slave状态

48304ba5e6f9fe08f3fa1abda7d326ab.png

f89a20be384fbaa6ccafcfd58c5f2140.png

提示:

slave的I/O和SQL线程都已经开始运行,而且Seconds_Behind_Master不再是NULL。日志的位置增加了,意味着一些事件被获取并执行了。如果你在master上进行修改,你可以在slave上看到各种日志文件的位置的变化,同样,你也可以看到数据库中数据的变化。

四 安装Keepalived

4.1 下载

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 [root@Master01 ~]# wget http://www.keepalived.org/software/keepalived-1.3.6.tar.gz

2 [root@Master01 ~]# tar -zvxf keepalived-1.3.6.tar.gz -C /tmp/

3 [root@Master01 ~]# cd /tmp/keepalived-1.3.6

4 [root@Master01 keepalived-1.3.6]# ./configure --prefix=/usr/local/keepalived/ --sysconf=/etc --with-init=SYSV

5 #注:(upstart|systemd|SYSV|SUSE|openrc) #根据你的系统选择对应的启动方式

6 [root@Master01 keepalived-1.3.6]# make && make install

7 [root@Master01 ~]# ln -s /usr/local/keepalived/sbin/keepalived /sbin

8 [root@Master01 ~]# chmod u+x /etc/init.d/keepalived

9 [root@Master01 ~]# chkconfig --add keepalived

10 [root@Master01 ~]# chkconfig --level 35 keepalived on

48304ba5e6f9fe08f3fa1abda7d326ab.png

注意:Master02上也需要如上操作。

若出现以下提示,需要执行:yum -y install openssl-devel。

e43e4b247a1443a75f00f9edc6546e50.png

提示:也可采用yum install -y keepalived安装(个人不建议)。

4.2 Master01配置Keepalived

默认情况下keepalived启动时会去/etc/keepalived目录下找配置文件。

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 [root@Master01 ~]# vim /etc/keepalived/keepalived.conf

2 ! Configuration File for keepalived

3 global_defs {

4 notification_email {

5 x120952576@126.com

6 #表示keepalived在发生诸如切换操作时发送Email给哪些地址,邮件地址可以多个,每行一个。

7 }

8 notification_email_from Alexandre.Cassen@firewall.loc

9 smtp_server 172.24.8.10

10 smtp_connect_timeout 30

11 router_id LVS_DEVEL

12 }

13 vrrp_instance VI_1 {

14 state BACKUP

15 interface eth0

16 virtual_router_id 51

17 #这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址

18 priority 100

19 advert_int 1

20 nopreempt

21 #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置

22 authentication {

23 auth_type PASS

24 auth_pass 1111

25 }

26 track_script {

27 check_mysqld#执行定义的监控脚本

28 }

29 virtual_ipaddress {

30 172.24.8.12

31 }

32 }

33 vrrp_script check_mysqld {

34 script"/etc/keepalived/mysqlcheck/keepalived_check_mysql.sh "

35 interval 2

36 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

4.3 创建检测脚本

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 [root@Master01 ~]# mkdir -p /etc/keepalived/mysqlcheck/

2 [root@Master01 ~]# vi /etc/keepalived/mysqlcheck/keepalived_check_mysql.sh

3 #!/bin/bash

4 MYSQL=/usr/bin/mysql

5 MYSQL_HOST=localhost

6 MYSQL_USER=root

7 MYSQL_PASSWORD=x120952576

8 CHECK_TIME=3

9 #mysql is workingMYSQL_OK is 1 , mysql down MYSQL_OK is 0

10 MYSQL_OK=1

11 function check_mysql_helth (){

12 $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p${MYSQL_PASSWORD} -e "show status;" >/dev/null 2>&1

13 if [ $? = 0 ] ;then

14 MYSQL_OK=1

15 else

16 MYSQL_OK=0

17 fi

18 return $MYSQL_OK

19 }

20 while [ $CHECK_TIME -ne 0 ]

21 do

22 let "CHECK_TIME -= 1"

23 check_mysql_helth

24 if [ $MYSQL_OK = 1 ] ; then

25 CHECK_TIME=0

26 exit 0

27 fi

28 if [ $MYSQL_OK -eq 0 ] && [ $CHECK_TIME -eq 0 ]

29 then

30 /etc/init.d/keepalived stop

31 exit 1

32 fi

33 sleep 1

34 done

35 [root@Master01 ~]# chmod u+x /etc/keepalived/mysqlcheck/keepalived_check_mysql.sh

36 [root@Master01 ~]# service keepalived start

48304ba5e6f9fe08f3fa1abda7d326ab.png

4.4 Master02配置Keepalived

1 [root@Master01 ~]# scp /etc/keepalived/keepalived.conf root@127.24.8.11:/etc/keepalived/

参考Master01配置,去掉nopreempt选项,priority设置比Master01低即可。

4.5 创建检测脚本

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 [root@Master02 ~]# mkdir -p /etc/keepalived/mysqlcheck/

2 [root@Master01 ~]# scp /etc/keepalived/mysqlcheck/keepalived_check_mysql.sh root@172.24.8.11:/etc/keepalived/mysqlcheck/

3 [root@Master02 ~]# chmod u+x /etc/keepalived/mysqlcheck/keepalived_check_mysql.sh

4 [root@Master02 ~]# service keepalived start

48304ba5e6f9fe08f3fa1abda7d326ab.png

五 功能测试

5.1 测试vip

1 [root@test ~]# mysql -uroot -h172.24.8.12 -p

fd6c5b0c23e4c0a8203009360d4c79b3.png

1 mysql> show variables like "%hostname%";

2 mysql> show variables like "%server_id%";

b72ee507cc143182f16cb5c1e7944a7d.png

5.2 同步测试

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 [root@test ~]# mysql -uroot -p

2 Enter password:

3 mysql> create database mysqltest;

4 mysql> use mysqltest;

5 mysql> create table user(id int(5),name char(10));

6 mysql> insert into user values (00001,'zhangsan');

7 在Slave从服务器上进行验证:

8 [root@Master02 ~]# mysql -uroot -p

9 Enter password:

10 mysql> show databases;

11 mysql> select * from mysqltest.user;

48304ba5e6f9fe08f3fa1abda7d326ab.png

9b43a8730ad7f6da85cc06b986eab5b8.png

5.3 测试Keepalived切换

1 [root@Master01 ~]# service mysqld stop#停止Master01的MySQL

2 [root@Master01 ~]# tail -f /var/log/messages#观察Master01的日志

a15a5c9afb0b91cd0e0e8c782ed950ec.png

1 [root@Master02 ~]# tail -f /var/log/messages#观察Master02的日志

309bb411cc915acbe876a3c118abae24.png

1 [root@Client ~]# mysql -uroot -h172.24.8.12 -px120952576#客户端连接VIP

c017b945823f6e4f1f4eee16fb9e4500.png

注意:已经成功切换,在切换过程中可能中断几秒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>