在上一节基础上,通过添加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中连接数据库比较复杂啊。

最好配置一个ip,让内部自动分配读写。这样php就简单些了

艺搜参考

http://bbs.ywlm.net/thread-855-1-1.html

http://94j69.blog.51cto.com/542780/1054768

MySQL集群系列2:通过keepalived实现双主集群读写分离相关推荐

  1. Keepalived+LVS+MySQL双主复制实现读写负载均衡及高可用

    目录 一.Keepalived和LVS简介 1. Keepalived简介 2. LVS简介 二.安装配置 1. 下载安装LVS 2. 下载安装Keepalived 3. Keepalived配置 5 ...

  2. MySQL 对于千万级的大表要怎么优化?(读写分离、水平拆分、垂直拆分)

    海豚精灵:https://www.whhtjl.com:优课GO:https://mgo.whhtjl.com 思考 如何设计或优化千万级别的大表?此外无其他信息,个人觉得这个话题有点范,就只好简单说 ...

  3. centos MySQL 双机_CentOS利用Keepalived构建双主MySQL+双机热备

    之前的文章介绍了如何配置MysqL双主互备,见http://www.linuxidc.com/Linux/2013-05/83784.htm 这里介绍如何配合前者实现Keepalived双机热备 系统 ...

  4. CENTOS利用Keepalived构建双主MySQL+双机热备

    之前的博文介绍了如何配置MYSQL双主互备. 见http://showerlee.blog.51cto.com/2047005/1187693 这里介绍如何配合前者实现Keepalived双机热备 系 ...

  5. Mysql+Keepalived实现双主热备

    我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短 MySQL双主复制,即互为Mast ...

  6. Hapoxy+keepalived实现双主高可用负载均衡

    在测试了Nginx+Keepalived的负载均衡后,也对Haproxy+Keepalived双主模式做了测试,双主的模式充分利用了服务器资源,这样不会导致服务器浪费. 这里举例说明: 默认情况下,第 ...

  7. MySQL同步机制、主从复制半同步和双主配置

    复制架构衍生史 在谈这个特性之前,我们先来看看MySQL的复制架构衍生史. 在2000年,MySQL 3.23.15版本引入了Replication.Replication作为一种准实时同步方式,得到 ...

  8. Redis 笔记系列(十二)——Redis的主从复制、读写分离

    2019独角兽企业重金招聘Python工程师标准>>> 本文为本系列中重要指数的5颗星章节. 如果从机还没有与主机建立主从关系时,它还是master,这时如果它已经写入了一些键值对, ...

  9. MariaDB+Keepalived 搭建双主HA数据库服务

    1.安装mysql   在linux版本下,mysql称为mariadb,可以选择在线安装,或编译安装.MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开 ...

最新文章

  1. Flask基础-(模板)
  2. asp.net mvc 重定向
  3. MapReduce PLinq 简单示例
  4. php中json_decode返回数组或对象的实例
  5. STM32 - 定时器的设定 - 基础-04 - 输出波形控制 - PWM 模式
  6. barplot函数--R语言
  7. ubuntu20.04安装交叉编译工具链流程
  8. 实用win7桌面小工具
  9. Dlib模型之驾驶员疲劳检测一(眨眼)
  10. 路由器k2固件改系统时间
  11. Manjaro Gnome Hidpi 缩放问题
  12. 【汉化】nitrosdk。。。这个。。。天朝V5
  13. 耗时86小时的「百变小樱」最强数据可视化作品!
  14. 前端成长之路之打好根基
  15. Android图片压缩——Luban鲁班压缩
  16. 解读0715微淘客大封号
  17. unity获取电磁笔压感_电磁笔的分类和特性
  18. 【算法刷题日记之本手篇】左右最值最大差与顺时针打印矩阵
  19. T9键盘[用户通过数字键盘输入,手机将提供与这些数字相匹配的单词列表]
  20. 英国名校TOP10对Alevel成绩要求汇总

热门文章

  1. 转:http与https
  2. 【转】[C# 基础知识系列]专题四:事件揭秘
  3. sourcesafe管理phpproj文件的补充说明(downmoon)
  4. 小猿圈之git 的几个好用自定义命令
  5. CSS选择器学习小结
  6. 重定向、别名、绝对路径、相对路径 详解
  7. Broadcast Receiver广播接收器
  8. 37 windows_37_Thread_InterLock 线程-原子锁
  9. Android ContentProvider和getContentResolver
  10. httpd基于域名不同的虚拟主机配置