MySQL集群系列2:通过keepalived实现双主集群读写分离
在上一节基础上,通过添加keepalived实现读写分离。
首先关闭防火墙
安装keepalived
2台机器都要安装
rpm -q openssl kernel-devel yum install -y kernel-devel openssl-devel ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-279.el6.x86_64/
注意上面要替换成你的内核路径
如果你没有用到LVS可以把lvs去掉,即:
./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-431.5.1.el6.x86_64/ --disable-lvs-syncd --disable-lvs make && make install
下面部分可以全部复制并粘贴到终端里:
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived
设置开机启动
chkconfig --add keepalived chkconfig keepalived on
配置keepalived
2台仅优先级不同,主为100,从为99,都为BACKUP状态,还有IP要在同一局域网内的
#vim /etc/keepalived/keepalived.conf
global_defs { router_id mysql_ha } vrrp_instance vi { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1nopreempt authentication { auth_type PASS auth_pass 1234} virtual_ipaddress {172.30.23.200}}
注:“vrrp_instance vi {” 里vi后面一定要有空格。也尽量不要让“{”单独一行,因为很容易让vi后没有空格。
启动 service keepalived start
测试keepalived
查看相关日志/var/log/messages
- 启动主A:
Keepalived_vrrp[4955]: VRRP_Instance(vi) Entering BACKUP STATE
先进入设定的backup状态,然后转换成master状态。
Keepalived_vrrp[4749]: VRRP_Instance(vi) Transition to MASTER STATE Keepalived_vrrp[4749]: VRRP_Instance(vi) Entering MASTER STATE
此时可以ping 通vip(172.30.23.200)
通过ip add也可以查看到eth0上的虚拟IP
- 启动优先级低的另一台从服务器B
Keepalived_vrrp[3158]: VRRP_Instance(vi) Entering BACKUP STATE
可见B进入BACKUP状态。
注:如果防火墙不关闭,会导致2台机器都进入MASTER状态。
chkconfig --level 0123456 iptables off
- 关闭主节点A的网卡,测试切换是否正常
ifdown eth0
观察节点B的日志:
Keepalived_vrrp[3158]: VRRP_Instance(vi) Transition to MASTER STATE Keepalived_vrrp[3158]: VRRP_Instance(vi) Entering MASTER STATE
可见从机器进入master状态了
- 启动节点A的网卡测试切换是否正常
ifup eth0
观察节点B的日志:
状态不变,节点A变成了BACKUP状态
现在可以通过vip登录mysql了
mysql -u root -h 172.30.23.200 -p
但目前是在一台机器上实现读和写,另一台闲置。
测试读写分离
配置文件中2台机器的读写优先级互换。即主的vi_w为100,则从的vi_w为90,主的vi_r为90,则从的vi_r为100。
global_defs { router_id mysql_ha } vrrp_instance vi_w {state BACKUP interface eth0 virtual_router_id 51 //另一台一样 priority 90 advert_int 1nopreempt authentication { auth_type PASS auth_pass 1234} virtual_ipaddress { 172.30.23.200 } } vrrp_instance vi_r {state MASTER interface eth0 virtual_router_id 44 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1234} virtual_ipaddress { 172.30.23.210 }}
只有主(IP201)一台启动时,主都进入Master状态。
此时mysql可利用vip200写,vip210读。
2个虚拟IP均在主201上(ip add),从而读和写都在主201上。
- 下面启动从202,重启Keepalived即可
vip210出现短暂漂移。

发现主201上的读已转换为backup状态,通过ip add也只有vip200一个了。
在从202上,vip写直接进入设定的backup状态,vip读进入master状态了。此时
通过ip add发现vip210已移动到从202上,
从而此时写在主201,读在备202。
- 现在模拟从202挂掉

此时主201上都进入master状态,实现主可读可写
- 现在启动从202,将和上面情况一样。写在主,读在备。
- 现在模拟主201挂掉
挂掉前,主上写为master,读为backup,从202上写为backup,读为master,即主写从读。
挂掉后,

发现从202上,写已进入master状态,读仍为master状态,即从可读可写。
- 下面模拟主故障修复完成,重新启动成功。
发现主都进入了backup状态。正常应该是主把写抢回来,可能是从服务器设置了非抢占参数nopreempt
网上说这个参数只在优先级高的机器上设置即可,优先级低的机器不设置,实验后发现主仍然都是backup.
下面将主和从的nopreempt参数都删除。
发现正常,主写进入master,从写转换成backup
从而写在主201,读在202
这里仅仅是监控了网络故障和keepalived本身进程,在网络或者keepalived进程出现问题的时候会切换,但是我的节点A里面还有很多服务呢,
例如nginx,PHP,mysql进程出问题或高负载的时候怎么办,怎么切换呢,这时就要用到脚本了,下一节我们来看看keepalived是如何通过脚本实现对服务器的监控和切换的。
小结
此文实现:
1,当只有一台机器时,通过2个虚拟ip可以实现可读可写;
2,当有2台机器时,一台读,一台写,
3,当其中一台故障时,同1,即另一台可读可写。
4,当另一台正常后,同2,一台读一台写(根据配置文件中设置的固定的读写优先级,即1为写,若1故障,2可读可写,1恢复后,1继续写)。
可在php脚本中对读的vip进行数据库查询操作,写的vip进行插入操作,
当只有一台机器时,2个vip(虚拟ip)在一台机器上,从而读写在一个机器上,当2台机器时,各占一个vip,从而读写在2台机器上,所以要配置好mysql主从数据同步。
这种方式感觉php中连接数据库比较复杂啊。
艺搜参考
http://bbs.ywlm.net/thread-855-1-1.html
http://94j69.blog.51cto.com/542780/1054768
MySQL集群系列2:通过keepalived实现双主集群读写分离的更多相关文章
- Mysql + keepalived 实现双主热备读写分离【转】
Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论 架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...
- MySQL自动化安装(双主多从读写分离)
shell #!/bin/bash # Create by # version 1.0 # // # # check out lockfile whether or not exist IsInput ...
- mycat 1.6.6.1安装以及配置docker 安装mysql 5.7.24 双主多从读写分离主主切换
mycat和mysql的高可用参考如下两个图 简介:应用程序仅需要连接HAproxy或者mycat,后端服务器的读写分离由mycat进行控制,后端服务器数据的同步由MySQL主从同步进行控制. 服务器 ...
- 【 Linux 】Keepalived实现双主模型高可用集群
要求: 1. 两台web服务器安装wordpress,数据库通过nfs共享 2. 使用keepalived实现双主模型 环境: 主机: 系统:CentOS6.7 x64 ...
- 基于 MySQL 5.6 keepalived的双主搭建
环境介绍: 说明 IP 节点1 192.168.56.56 节点2 192.168.56.57 w_ip 192.168.56.6 安装keepalived tar -zxvf keepalived- ...
- Nginx(haproxy)+keepalived+Tomcat双主高可用负载均衡
周末的时候一个正在学Linux的朋友问我,高可用怎么玩?我和他微信了将近三个小时,把Nginx和haproxy双主高可用教给他了,今天突然想把这个给写进博客里,供给那些正在学习Linux系统的朋友们, ...
- MySQL集群系列1:2台机器搭建双主集群
先配置静态IP 2台机器mysql密码一样,最好在同一局域网内,最好在mysql刚安装时就配置好,后面有数据了不好同步. 本文实现了2台机器mysql数据同步成功: 配置my.cnf 先关闭防火墙 s ...
- 集群相关、用keepalived配置高可用集群
1.集群相关 2.keepalived相关 3.用keepalived配置高可用集群 安装:yum install keepalived -y 高可用,主要是针对于服务器硬件或服务器上的应用服务而 ...
- centos 下 mysql+keepalived实现双主自由切换
目录 ip规划 mysql双主配置 keepalived配置 mysql1中keepalived的配置 mysql2中keepalived的配置 VIP漂移检测 本文的目的是搭建一个互为主从的mysq ...
随机推荐
- Hadoop 伪分布式上安装 Hive
下载地址:点此链接(P.S.下载带bin的安装包) 下载hive后放到虚拟机文件夹内,打开: -bin.tar.gz -C /home/software/ 修改并保存环境配置: gedit /etc/ ...
- 使用JTextArea示例
相对于JLabel显示提示文字,JTextArea有一个先天优势:文字可以拷贝出来.经过下面设置它也能在外观上和JLabel一致. 代码如下: JTextArea txtArea=new JTextA ...
- 网页图表控件Highcharts选项配置参数
Highcharts提供大量的选项配置参数,您可以轻松定制符合用户要求的图表,目前官网只提供英文版的开发配置说明文档,而中文版的文档网上甚少,且零散不全.这里,我把Highcharts常用的最核心的参 ...
- vue - check-versions.js for child_process
webpack之类的配置文件. webpack.base.conf.js
- 剑指OFFER之二叉搜索树与双向链表(九度OJ1503)
题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入的第一行为一个数 ...
- Navicat Premium如何打开SQL文件.MDF和.LDF文件
相信大家再装SQL Server时都会遇到一件很头疼的事情--装完SQL server之后发现没有启动程序.没有经验的会以为SQL SERVER安装失败了于是选择重装.可是呵呵,重装了4,5次还是一样 ...
- socket.io(转载)
socket.io 中文手册,socket.io 中文文档转载于:http://www.cnblogs.com/xiezhengcai/p/3956401.html 服务端 io.on(‘connec ...
- 创建cocos2d-x+lua项目
1> 创建cocos2d-x+lua项目 进入到cocos2d-x-2.1.5\tools\project-creator文件夹运行下面命令: python create_project ...
- java 环境配置 maven 环境配置
1.windows 下Java 环境的安装和配置: 下载jdk并安装 配置环境变量: (1) 新建JAVA_HOME环境变量,赋值为JDK的安装目录: (2) 新建CLASSPATH环境变量,赋值为. ...
- 联想E440问题:点击鼠标时,弹出“无法连接synaptics定点装置驱动程序”错误
笔记本:Levono E440 问题描述: 在控制面板中,点击鼠标时,弹出“无法连接synaptics定点装置驱动程序”错误,如何解决? 即使在安装联想的驱动后,也没办法解决 解决步骤: 1. ...