编译安装keepalived,实现双主mysql高可用
安装keepalived
1、官网下载源码包,解压
# wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz
# tar xvf keepalived-1.1.20.tar.gz
2、编译安装,这里需要指定一下安装路径
# cd keepalived-1.1.20/
# ./configure --prefix=/usr/local/keepalived
# make && make install
3、拷贝配置文件和启动脚本到相应的目录
# mkdir /etc/keepalived
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
4、设置开机启动
# chkconfig keepalived on
配置mysql双主
所谓双主,即两个节点互为主从,各自把对方设为master,两个节点都需要开启binlog和relaylog。
两个节点server_id必须不一样。
由于两个节点都可写,为了保证自增主键ID不冲突,需要设置 auto_increment_offset 和 auto_increment_increment。
主从复制过程:
a、master将改变记录到二进制日志(binlog)中;
b、slave将master的binlog拷贝到它的中继日志(relaylog);
c、slave重做中继日志中的事件,将改变反映到它自己的数据库。
① slave将master的binary log拷贝到它自己的中继日志。
② I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
③ SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。
1、修改节点一的配置文件
# vim /etc/my.cnf
server-id=1
datadir=/nh/mysql3307/data
log-bin=/nh/mysql3307/data
log-bin-index=/nh/mysql3307/data
relay_log=relay-log
auto_increment_offset=1
auto_increment_increment=2
innodb_file_per_table=1
# /etc/init.d/mysqld start
2、修改配置节点二的配置文件
# vim /etc/my.cnf
server-id=2
datadir=/nh/mysql3307/data
log-bin=/nh/mysql3307/data
log-bin-index=/nh/mysql3307/data
relay_log=relay-log
auto_increment_offset=2
auto_increment_increment=2
innodb_file_per_table=1
# /etc/init.d/mysqld start
3、登录节点一的mysql,设置有复制权限的账号
# mysql -uroot -S mysql-3307.sock
mysql> grant replication slave,replication client on *.* to repl@'192.168.%' identified by 'Fl0wer926';
mysql> flush privileges;
查看当前正在使用的binlog文件和所在位置
mysql> show master status;
+-------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------+----------+--------------+------------------+
| data.00005 | 106 | | |
+-------------+----------+--------------+------------------+
登录节点二的mysql,将节点一设置为其master
mysql> change master to master_host='192.168.1.101',MASTER_PORT = 3307,master_user='repl',master_password='Fl0wer926',master_log_file='data.000005',master_log_pos=106;
mysql> start slave;
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.101
Master_User: repl
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: data.000010
Read_Master_Log_Pos: 106
Relay_Log_File: relay-log.000021
Relay_Log_Pos: 246
Relay_Master_Log_File: data.000010
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 106
Relay_Log_Space: 535
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
mysql> show processlist;
+-------+-------------+---------------------+------+-------------+-------+-----------------------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+-------------+---------------------+------+-------------+-------+-----------------------------------------------------------------------+------------------+
| 7 | system user | | NULL | Connect | 43454 | Waiting for master to send event | NULL |
| 8 | system user | | NULL | Connect | 36323 | Has read all relay log; waiting for the slave I/O thread to update it | NULL |
| 33612 | repl | 192.168.1.101:57914 | NULL | Binlog Dump | 967 | Has sent all binlog to slave; waiting for binlog to be updated | NULL |
| 34514 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+-------+-------------+---------------------+------+-------------+-------+-----------------------------------------------------------------------+------------------+
交换两个节点的角色重复一次以上操作,即可实现主主复制。
4、修改节点一的keepalived配置文件
# vim /etc/keepalived/keepalived.conf
global_defs {
router_id MYSQL_MM
}
vrrp_script chk_mysqld3307 {
script "nc 192.168.1.101 3307"
interval 1
weight -10
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER
interface bond0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.6.12
}
track_script {
chk_mysqld3307
}
}
# /etc/init.d/keepalived start
5、修改节点二的keepalived配置文件
# vim /etc/keepalived/keepalived.conf
global_defs {
router_id MYSQL_MM
}
vrrp_script chk_mysqld3307 {
script "nc 192.168.1.102 3307"
interval 1
weight -10
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface bond0
virtual_router_id 51
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.6.12
}
track_script {
chk_mysqld3307
}
}
# /etc/init.d/keepalived start
至此,通过keepalived实现mysql双主高可用就完成了,然后可以尝试停止vip所在节点测试vip是否会自动漂移,然后再把节点启动看vip是否会被抢占回来。
编译安装keepalived,实现双主mysql高可用的更多相关文章
- 【 Linux 】Keepalived实现双主模型高可用集群
要求: 1. 两台web服务器安装wordpress,数据库通过nfs共享 2. 使用keepalived实现双主模型 环境: 主机: 系统:CentOS6.7 x64 ...
- suse 12 编译部署Keepalived + nginx 为 kube-apiserver 提供高可用
文章目录 编译部署nginx 下载nginx源码包 编译nginx 配置nginx.conf 配置nginx为systemctl管理 分发nginx二进制文件和配置文件 启动kube-nginx服务 ...
- keepalived+mysql双主复制高可用方案
MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了 ...
- 利用LVS+Keepalived搭建Mysql双主复制高可用负载均衡环境
应用背景: MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动 切换到另外一台主机.LVS和Keppalived可以设定一个VIP来实 ...
- KeepAlived双主模式高可用集群
keepalived是vrrp协议的实现,原生设计目的是为了高可用ipvs服务,keepalived能够配置文件中的定义生成ipvs规则,并能够对各RS的健康状态进行检测:通过共用的虚拟IP地址对外提 ...
- KEEPALIVED+LVS+MYCAT实现MYSQL高可用环境搭建
一.安装keepalived和ipvsadm 注意:ipvsadm并不是lvs,它只是lvs的配置工具. 为了方便起见,在这里我们使用yum的安装方式 分别在10.18.1.140和10.18.1.1 ...
- mysql主从之keepalive+MySQL高可用
一 keepalive介绍 1.1 keepalived 是什么 keepalived 是集群管理中保证集群高可用的一个服务软件,用来防止单点故障. 1.2 keepalived 工作原理 keepa ...
- MySQL高可用基础之keepalived+双主复制【转】
环境:MySQL-VIP:192.168.1.3MySQL-master1:192.168.1.1MySQL-master2:192.168.1.2 OS版本:CentOS release 6.4 ( ...
- Mysql + keepalived 实现双主热备读写分离【转】
Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论 架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...
随机推荐
- Python 夺大满贯!三大编程语言榜即将全部“失守”!
有互联网创业者说: 2019年可能会是过去十年里最差的一年 但却是未来十年里最好的一年 真的是这样吗? “每月工资1w,如何赚到200w?” 同样一个问题,问不同的人会得到不同的答案. 有一类人,开始 ...
- vue 组件-组件定义的4种方式
一.组件命名的方式 ①kebab-case,单词之间采用 - (短横线)连接,例如:my-component ,在DOM中使用时,<my-component ></my-compo ...
- Netty源码分析第1章(Netty启动流程)---->第2节: NioServerSocketChannel的创建
Netty源码分析第一章: Server启动流程 第二节:NioServerSocketChannel的创建 我们如果熟悉Nio, 则对channel的概念则不会陌生, channel在相当于一个通 ...
- Gitlab CI-3.遇到的问题
五.遇到的问题 1. cannot validate certificate for x.x.x.x because it doesn't contain any IP SANs 报错信息:ERROR ...
- php从入门到放弃系列-04.php页面间值传递和保持
php从入门到放弃系列-04.php页面间值传递和保持 一.目录结构 二.两次页面间传递值 在两次页面之间传递少量数据,可以使用get提交,也可以使用post提交,二者的区别恕不赘述. 1.get提交 ...
- JS进阶系列之闭包
刚刚总结完作用域链,我觉得很有必要马上对闭包总结一下,因为,之前也写过自己对闭包的理解,那时候只知道,闭包就是可以访问别的函数变量的函数,就是在函数里面的函数就叫做闭包,可是并没有深入探究,为什么,可 ...
- 20162325 金立清 S2 W9 C18
20162325 2017-2018-2 <程序设计与数据结构>第9周学习总结 教材学习内容概要 堆是一棵完全二叉树,其中每个元素大于等于其所有子结点的值. 向堆中添加一个元素的方法是,首 ...
- The Begining
学习记录之旅,就此开始.软件工程,Java神马的统统到我碗里来.
- 我的JAVA运算符理解
基本概念 原码,反码,补码 只需要记住这几句就够了 1.二进制的最高位是符号位:0表示正数,1表示负数 2.正数的原码,反码,补码都一样 3.负数的反码=它的原码符号位不变,其他位取反 4.负数的补 ...
- DocX插件
DocX是一个用C#编写的.NET库,它允许开发人员以简单直观的方式操作Word文件.