mysql 主从 keepalived_MySQL之双向主从加keepalived高可用

最近在做MySQL数据库的双向主从,了解到keepalived能够自动判断并切换到可用数据库,自己试了一下,整理出文档来。

先声明一下环境

iptables开启3306端口或者关掉,关闭selinux

MySQL-01:192.168.204.138

MySQL-02:192.168.204.139

VIP:192.168.204.200             #web服务器连接的ip,自己可以使用工具连接试一下。

MySQL的安装过程就略过了,根据个人情况自己安装即可。

1.修改数据库的配置文件/etc/my.cnf:

1.1修改MySQL-01的数据库文件,在[mysql]下添加如下内容server_id = 1

log_bin = mysql-bin

1.2修改MySQL-02的数据库文件,在[mysql]下添加如下内容server_id = 2

log_bin = mysql-bin

2.搭建单向主从

2.1在MySQL-01上

2.1.1操作授权mysql -u root -p            #输入密码

mysql> grant replication slave on *.* to 'slave'@'192.168.204.139' identified by '123456';

mysql> flush privileges;

2.1.2数据传递给MySQL-02mysql -u root -p            #输入密码

flush tables with read lock;        #锁表操作

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000012 |      120 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

mysqldump -u root -p --all-databases > mysqldump.sql

mysql -u root -p

mysql> unlock tables;

mysql> quit

scp myqsldump.sql 192.168.204.139:/root/

2.2在MySQL-02上操作

2.2.1恢复数据库数据mysql -u root -p 

2.2.2建立主从同步mysql -u root -p

mysql> change master to master_host='192.168.204.138',master_user='slave',master_password='123456',master_log_file='mysql-bin.000012',master_log_pos=120,master_port=3306;

start slave;

检查是否成功show slave status\G;Slave_IO_Running: Yes

Slave_SQL_Running: Yes

都为Yes表示同步成功。

注:master_port=3306,默认时不需要加,但是修改过端口的则需要该选项

3.搭建互为主从

3.1在MySQl-01上操作

3.1.1用户授权mysql -u root -p123456

mysql> grant replication slave on *.* to 'slave'@'192.168.204.138' identified by '123456'; //建立权限

mysql> flush privileges;

注:因为做的是所有库的主从,所以在MySQL-01上的操作会同步到MySQL-02上

注2:假如你是线上环境,主库在不断的写数据,建议锁一下表,最好找个夜深人静的时候做吧

3.2在MySQL-02上的操作mysql -u root -p

mysql> show master status\G;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000009 |      120 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

3.1.2在MySQL-01上操作授权mysql> change master to master_host='192.168.204.138',master_user='slave',master_password='123456',master_log_file='mysql-bin.000009',master_log_pos=120;

mysql> start slave;

检查是否成功show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

表示成功。

此,mysql的双向主从同步已完成

4.keepalived的搭建

4.1在两台服务器依次做以下操作

a.安装keepalivedwget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz

tar zxvf keepalived-1.2.15.tar.gz

cd keepalived-1.2.15

./configure --prefix=/usr/local/keepalived

make && make install

假如编译过程出现错误,请安装 gcc,openssl,openssl-devel

b.复制相关文件cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived/

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

4.2修改配置文件

请先将/etc/keepalived/keepalived.conf文件清空

4.2.1在MySQL-01上操作

将一下内容复制进去! Configuration File for keepalived

global_defs {

notification_email {

sunyuansheng7@gmail.com

}

notification_email_from sunyuansheng7@gmail.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MySQL-ha

}

vrrp_instance VI_1 {

state master

interface eth0

virtual_router_id 51

priority 100

advert_int 1

nopreempt

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.204.222

}

}

virtual_server 192.168.204.222 3306 {

delay_loop 6

lb_algo wrr

lb_kind DR

persistence_timeout 50

protocol TCP

real_server 192.168.204.138 3306 {

weight 3

notify_down /var/lib/mysql/killkeepalived.sh

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

}

4.2.2在MySQL-02上操作

vim /etc/keepalived/keepalived.conf! Configuration File for keepalived

global_defs {

notification_email {

sunyuansheng7@gmail.com

}

notification_email_from sunyuansheng7@gmail.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MySQL-ha

}

vrrp_instance VI_1 {

state backup

interface eth0

virtual_router_id 51

priority 100

advert_int 1

nopreempt

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.204.222

}

}

virtual_server 192.168.204.222 3306 {

delay_loop 6

lb_algo wrr

lb_kind DR

persistence_timeout 50

protocol TCP

real_server 192.168.204.139 3306 {

weight 3

notify_down /var/lib/mysql/killkeepalived.sh

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

}

4.3在两台服务器做以下操作vim /var/lib/mysql/killkeepalived.sh

#!/bin/sh

pkill keepalived

chmod +x /var/lib/mysql/killkeepalived.sh

4.4此时先不要启动keepalived,因为我们要观察日志

5.测试是否可用

创建一个新的用户mysql> grant all privileges on *.* to 'test'@'%' identified by '123456';

mysql> flush privileges;

5.1在MySQL-01上多开一个终端,tailf /var/log/messages,然后再另一个终端启动keepalived服务service keepalived start。日志信息如下

fb5b1d591f6c86062edb97ebceaa6ab2.png

5.2在MySQL-02同样打开一个新的终端查看日志信息,然后启动keepalived

670fcb1f8bdda2d3fc870355b86adb4b.png

5.3在MySQL-01上手动停掉MySQL服务。同时得到日志信息

ce1e6309755650205cc59b2f9dc796ec.png   连接3306端口失败,准备移除虚拟ip,然后停掉keepalived服务。最后虚拟ip地址移除。

MySQL-02日志信息没啥变化!话说两边启动keepalived的日志信息差不多是一样的。

此时可以使用连接MySQL的工具测试一下,虚拟ip地址还是可用的。

5.4假设MySQL-01恢复此时还应该启动keepalived服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker启动mysql容器_Docker容器开机自启动

查看所有容器[vagrantlocalhost ~]$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3f142f72d7e8 redis "docker-entr…

【CodeForces - 527C】Glass Carving(线段树或者SBT或者set)

题干: Leonid wants to become a glass carver (the person who creates beautiful artworks by cutting the glass). He already has a rectangular w mm    h mm sheet of glass, a diamond glass cutter and lots of enthusiasm. What he lacks is understand…

mysql常驻内存_MySQL的内存和相关问题排查

我们都知道数据库是IO密集型一类应用,为了提高其性能大量使用内存代替文件(交换分区)的IO操作是保证数据库稳定、高效的基本原则。那么数据库是如何使用内存的,我们如何查看数据库内存的占用,如何通过通过数据库内存配置设置提高其性能&#…

java短除法获取二进制_Java十四天零基础入门-Java的数据类型介绍

不闲聊!!!不扯淡!!!小UP只分享Java相关的资源干货本章节目标:理解数据类型的作用。Java中包括哪些数据类型?常见的八种基本数据类型都有哪些?会用八种基本数据类型声明变…

vs怎么把textbox输入的实数放置变量里_方程的计算机处理96(3)_C++vs

计算机语言运用--数值计算9-方程的计算机处理96(3)_Cvs计算机:电子线路组成的计算机器。人与计算机则是通过计算机语言-符号系统说给计算机听而交流。计算机语言有低级语言-机器语言、汇编、高级语言-C/C/C#/VB/PASCAL/LISP/JAVA/PYTHON/……成百上千种之多。作为一…

2008r装mysql_mysql5.7.17在win2008R2的64位系统安装与配置实例

安装MySql操作系统:Windows Server 2008 R2 StandardMySql版本:mysql-5.7.17-winx64第一步:解压mysql-5.7.17-winx64.zip到指定位置第二步:安装文件根目录下添加data文件夹,将my-default.ini重命名为my.ini第三步&…

【HDU - 5187】zhx's contest (快速幂+ 快速乘,模板)

题干: 2018百度之星复赛晋级名单出炉(增加20%晋级名额)~ zhxs contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 3779 Accepted Submission(s): 1226 Problem Desc…

【牛客 - 283E】贪心只能过样例(模拟)

题干: 小西是单身狗,所以她不喜欢看到有CP在秀恩爱! 有一天,小西出来闲逛,发现街上的行人都排成了一排,并且可以用这种形式表示: MMFMMFFFMMM 其中M表示男孩子,F表示女装的男孩…

apmserver导入MySQL_mysql数据库导入导出

window下1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u dbuser -p dbname > dbname.sql2.导出一个表mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名mysqldump -u dbuser -p dbname users> dbname_users.sql3.导出一个数据库结…

【牛客 - 283C】模拟只会猜题意(简单模拟)

题干: 小西突然觉得回文串是一种非常优雅的东西,她突然想要把身边所有的字符串都变成回文! 所谓回文串就是一个倒置后仍与自身相等的字符串,如“gxuacmmcauxg”和“gxuacmcauxg”。 小西不喜欢单身狗,所以小西只会…

sql开启mysql远程连接_SQLServer2008设置开启远程连接

SQLServer2008设置开启INTERNET远程连接 SQL Server 2008默认是不允许远程连接的,sa帐户默认禁用的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置: 使用sa账户登录SQL Server Management Studio(…

【牛客 - 283H】图论一顿套模板(思维转化,Dijkstra)

题干: 由于临近广西大学建校90周年校庆,西大开始了喜闻乐见的校园修缮工程! 然后问题出现了,西大内部有许许多多的道路,据统计有N栋楼和M条道路(单向),每条路都有“不整洁度”W&…

spss相关性分析看结果_spss相关性分析

当我们想要了解变量的相关程度时,就需要用到相关分析,而相关分析也是回归之前很重要的一步,通常用到的方法是pearson方法。 首先解释一下相关系数,相关系数反应的是两个变量之间变化趋势的方向以及程度,其值范围为-1到+1,正值表示正相关,负值表示负相关,绝对值越大表示…

【牛客 - 283F】出装方案(最小费用最大流)

题干: 众所周知,在各种对抗类游戏里装备都是很重要的一环,不同的出装方案会给玩家带来不同的强度。 dalao手里有N件装备,现在dalao要把装备分给N个队友,每个队友只能分一件装备,而每个队友穿上不同的装…

【CodeForces - 289D】Polo the Penguin and Houses (带标号的无根树,Cayley定理,Prufer编码)

题干: Little penguin Polo loves his home village. The village has n houses, indexed by integers from 1 to n. Each house has a plaque containing an integer, the i-th house has a plaque containing integer pi (1 ≤ pi ≤ n). Little penguin Po…

【CodeForces - 289E 】Polo the Penguin and XOR operation (数学,异或,贪心)

题干: Little penguin Polo likes permutations. But most of all he likes permutations of integers from 0 to n, inclusive. For permutation p  p0, p1, ..., pn, Polo has defined its beauty — number . Expression means applying the operation …

【CodeForces - 922B 】Magic Forest (数学,异或,暴力,水题,三元组问题)

题干: Imp is in a magic forest, where xorangles grow (wut?) A xorangle of order n is such a non-degenerate triangle, that lengths of its sides are integers not exceeding n, and the xor-sum of the lengths is equal to zero. Imp has to count the …

java生产者消费者代码_Java实现Kafka生产者消费者代码实例

Kafka的结构与RabbitMQ类似,消息生产者向Kafka服务器发送消息,Kafka接收消息后,再投递给消费者。生产者的消费会被发送到Topic中,Topic中保存着各类数据,每一条数据都使用键、值进行保存。每一个Topic中都包含一个或多…

【CodeForces - 304B】Calendar (前缀和,水题)

题干: Calendars in widespread use today include the Gregorian calendar, which is the de facto international standard, and is used almost everywhere in the world for civil purposes. The Gregorian reform modified the Julian calendars scheme of le…

java 刷新jtextarea_Java JTextArea不能实时刷新的问题

相信JTextArea用法都了解吧,JTextArea textArea new JTextArea();生成一块空白的区域, 我的需求就是点击发送邮件按钮后,后台的执行日志能输出到textArea中。但是我点击发送按钮的时候,由于邮件的附件要好久,界面一直…