前情提要:

参考链接:

http://www.osyunwei.com/archives/7464.html

ps:以上为本次操作的主要参考资料,非常感谢此文作者的贡献,我的随笔的主要目的是

说明在使用以上资料参考部署的过程中,遇到的一些问题以及补充。

目的:

  1、解决web读写分离功能缺陷,实现数据库从库负载均衡与高可用

  2、简化web与主要功能模块的配置,使用vip接管

实验环境:

  操作系统:redhat6.4 64位   #目前主流的版本应该在6.4以上,主要是硬件要求

DB版本:mysql5.6           #这个没什么可说的,选择版本主要看应用需求

lvs主机:192.168.1.180   #部署lvs+keepalived,用于管理VIP,并分发数据库读写请求

     从库IP:192.168.20.182、192.168.20.183   #mysql_slave 一主两从

测试机:192.168.20.181   #用于测试整套架构的功能

VIP:192.168.20.253   #虚拟IP,用于请求的分发

一、环境安装配置  

数据库mysql5.6安装(20.182、20.183)

rpm -ivh

MySQL-server-5.6.16-1.el6.x86_64.rpm

MySQL-devel-5.6.16-1.el6.x86_64.rpm

MySQL-shared-5.6.16-1.el6.x86_64.rpm

MySQL-client-5.6.16-1.el6.x86_64.rpm

MySQL-shared-compat-5.6.16-1.el6.x86_64.rpm

mysql5.6的安全性有所提高,安装完成后会有如下提示:

You will find that password in '/root/.mysql_secret'

cat /root/.mysql_secret

# The random password set for the root user at Mon Aug 31 08:28:44 2015 (local time): 06tIwUud

通过密码进入mysql之后:通过:SET PASSWORD = password('xxxxxx'); 重置密码即可。 其他跟正常的mysql安装相同。

数据库主从搭建(略)

  恩......不是我偷懒,主要是网上这块的内容太多了,一抓一大把,没有什么可写的价值,之后如果有兴趣可能单开一个随笔,这就不写了。

大家随意的搜一下。

网络环境配置(所有机器)

  由于我的生产环境有单独的思科防火墙,所以我所有的服务器的系统防火墙都是关闭的,包括selinux,不然太麻烦。

有些莫名其妙的报错可能都是iptable和selinux引起的,为了方便一般默认关闭

1、关闭selinux:

修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。
   如果不想重启系统,使用命令setenforce 0

2、关闭iptables:

  service iptables stop
  chkconfig iptables off
 

二、LVS+keepalive主机搭建(192.168.1.180)

为了简化步骤,这里不做管理机器的高可用配置,
 

1、安装LVS

yum install ipvsadm  #当前版本的linux内核已经集成lvs,此为管理模块
modprobe ip_vs  #加载模块
执行ipvsadm 测试是否安装成功
 

2、安装keepalived

yum install  gcc gcc-c++ make openssl-devel kernel-devel ncurses-devel

下载keeplived:http://www.keepalived.org/download.html

cd /usr/local/src

wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz

ps:由于安装时间的不同,我新的生产环境是centos6.5  而测试环境是redhat6.4,并且我的生产之前一直都是redhat系列,一直使用的都是手动rpm以及编译安装,虽然很苦逼,但是着实锻炼动手能力以及一些说不清道不明的对系统的理解能力,并且yum本身并不是非常的安全,没有手动安装那么放心(俺的感受),我的建议是如果非用不可的话,安装可以用yum,但是卸载需要手动,这是我的底线。

tar -zxvf keepalived-1.2.19.tar.gz

cd keepalived-1.2.19

./configure  #配置,必须看到以下提示,说明配置正确,才能继续安装

Use IPVS Framework : Yes

IPVS sync daemon support : Yes

Use VRRP Framework       : Yes

make #编辑

make install  #安装

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

mkdir /etc/keepalived

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

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

cp /usr/local/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/

chmod +x /etc/rc.d/init.d/keepalived  #添加执行权限

chkconfig keepalived on  #设置开机启动

service keepalived start #启动

service keepalived stop  #关闭

service keepalived restart  #重启

ps:以上直接辅助的原作者的命令,主要是没什么可写的,按照命令操作即可。

ps2:参考资料在这会安装perl的相关环境,因为他的从库状态监测脚本需要用到,但是我并没有在这添加,主要考虑到如下的情况

  1、我有单独的数据库从库状态监测告警脚本(见上两篇原创随笔)

2、keeplived本身有对3306端口的检测,如果数据库出现异常可以发现并处理。

3、我希望即便从库同步出现问题,也能够继续提供服务,因为线上环境需要的是服务畅通,短暂不同步的代价我是能够接受的。

3、配置keepalived

cp /etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf-bak

>/etc/keepalived/keepalived.conf   #清空配置文件

vi /etc/keepalived/keepalived.conf  #以下内容直接全部粘贴即可

======================================
! Configuration File for keepalived
 
global_defs {
        router_id LVS_DEVEL
}
 
vrrp_instance VI_1 {
 
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
        auth_type PASS
        auth_pass 1111
        }
 
        virtual_ipaddress {
                192.168.20.253
        }
}
 
virtual_server 192.168.20.253 3306 {
 
                delay_loop 6
                lb_algo wlc
                lb_kind DR
                #persistence_timeout 120
                protocol TCP
 
        real_server 192.168.20.182 3306 {
 
                weight 1
                TCP_CHECK {
                        connect_timeout 3 
                        nb_get_retry 3 
                        delay_before_retry 3 
                        connect_port 3306
                }
        }
 
        real_server 192.168.20.183 3306 {
 
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        nb_get_retry 3
                        delay_before_retry 3
                        connect_port 3306
        }
}
}
==============================================
#wp    #保存退出
注:最好在使用以上内容前,复制到编辑器,检查括号是否齐全与匹配,这很重要。
 

三、数据库从库配置(192.168.20.182、183)

1、绑定LVS虚拟服务器(VIP):192.168.20.253到lo:0

#编辑增加如下代码:

vi  /etc/rc.d/init.d/realserver
==================================================
#!/bin/sh
# chkconfig: - 80 90
# description:realserver
# mysql_vip start realserver
mysql_vip=192.168.20.253 
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $mysql_vip netmask 255.255.255.255 broadcast $mysql_vip
/sbin/route add -host $mysql_vip dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $mysql_vip >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
==========================================================

chmod +x /etc/rc.d/init.d/realserver  #添加脚本执行权限

chkconfig realserver on                    #添加开机启动

/etc/rc.d/init.d/realserver start         #开启,参数stop为关闭

2、配置允许ARP转发

 
vi /etc/sysctl.conf
============================
net.ipv4.ip_forward = 1   #修改原有配置
# MYSQL-VIP-NewAdd    #此为新增配置
net.ipv4.conf.lo.arp_ignore= 1
net.ipv4.conf.lo.arp_announce= 2
net.ipv4.conf.all.arp_ignore= 1
net.ipv4.conf.all.arp_announce= 2
============================
/sbin/sysctl -p  #使配置及时生效

四、负载均衡功能测试

1、LVS主机(20.180)执行:

service keepalived start  #启动keepalived

ipvsadm -Ln  #检查lvs运行状态

2、数据库从库(20.182、20.183)

/etc/rc.d/init.d/realserver start

VIP已经绑定到lo:0

3、负载均衡功能测试

20.182:执行service mysql stop

在20.180(LVS主机)上执行

ipvsadm -Ln  #检查lvs运行状态

可以看到20.182服务器已经被去掉。同理再次启动之后此服务器会被再次加入服务。

4、VIP数据库功能测试

在测试服务器(1.181)上执行数据库连接命令

mysql -uroot -pXXXXXX -h192.168.20.253

或者使用telnet 192.168.20.253 3306 命令去尝试连接,如果提示输入密码,说明连接正常。

FAQ:

  1、能够ping通,但是telnet不通,不知道是为什么?

答:网上看到很多人,包括我自己,都遇到了这个问题,VIP能够ping通,但是telnet以及mysql连接命令不通,怎么着也找不到问题。

这个问题困扰了我很长时间,中间试验停止了两个月,因为实在找不到原因,但是后来实在是啼笑皆非,原因竟然是:没有使用测试机,

我所有的测试命令都是在LVS主机上执行的,而LVS主机上绑定了VIP,并且没有mysql服务,肯定能ping通,但是在没有转发请求的

情况下,肯定服务不通。

  2、原资料中的一些命令的困扰?

    答:比如ipvsadm -L   在我的服务器上是不显示具体IP的,只显示localhost,一度让我以为服务不通跟这个有联系,但实际上执行ipvsadm -Ln就ok了。

  3、数据库从库状态检测脚本是否使用?

   答:我觉得这个应该根据具体的业务系统的需求去考虑,我的系统要求的是能够持续提供服务,对数据一致性的要求没有那么高,所以我只需要对同步状态进行

告警,并保证能及时处理即可,并不需要停止服务这么严苛。另外脚本使用perl或者shell实际上应该没有什么不同。

ok!整个方案就这样了,中间省略了一些步骤,比如数据库主从服务的搭建,LVS高可用的搭建,这两个服务我在很久之前就搭建了无数次,实在是懒得再写,并且这种单独的服务在网上已经有了无数个攻略,写的价值不是很大,大家各种研究下吧。

  另外水平有限,如果有所遗漏和错误请大家指出,我及时修改,如果有更完善的方案,大家能分享就更好了。

linux keepalived+LVS 实现mysql 从库负载均衡的更多相关文章

  1. haproxy实现mysql从库负载均衡

    本文主要讲述通过haproxy实现mysql从库间的负载均衡,至于mysql主从的搭建,本文不再重述,可以参考我之前写的博客. 1.首先下载haproxy包 wget http://haproxy.1 ...

  2. Mysql双主 keepalived+lvs实现mysql高可用性

    MySQL复制 能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.但是MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现 ...

  3. 搭建MySQL高可用负载均衡集群

    1.简介 使用MySQL时随着时间的增长,用户量以及数据量的逐渐增加,访问量更是剧增,最终将会使MySQL达到某个瓶颈,那么MySQL的性能将会大大降低.这一结果也不利于软件的推广. 那么如何跨过这个 ...

  4. 搭建MySQL高可用负载均衡集群(转)

    阅读目录 1.简介 2.基本环境 3.配置MySQL主主复制 4.中间件简述 4.1.Haproxy介绍 4.2.keepalived介绍 5.中间件的安装与配置(haproxy.keepalived ...

  5. [转]搭建MySQL高可用负载均衡集群

    转自:http://www.cnblogs.com/phpstudy2015-6/p/6706465.html 阅读目录 1.简介 2.基本环境 3.配置MySQL主主复制 4.中间件简述 4.1.H ...

  6. Linux keepalived+lvs实现高可用负载均衡

    LVS的具有强大的负载均衡功能,但是它缺少对负载层节点(DS)的健康状态检测功能,也不能对后端服务(RS)进行健康状态检测:keepalived是专门用来监控高可用集群架构的中各服务的节点状态,如果某 ...

  7. (转载)Nginx/LVS/HAProxy三种主流负载均衡软件的对比

    原地址:http://www.ha97.com/5646.html PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些 ...

  8. Nginx(haproxy)+keepalived+Tomcat双主高可用负载均衡

    周末的时候一个正在学Linux的朋友问我,高可用怎么玩?我和他微信了将近三个小时,把Nginx和haproxy双主高可用教给他了,今天突然想把这个给写进博客里,供给那些正在学习Linux系统的朋友们, ...

  9. Dubbo入门到精通学习笔记(十六):Keepalived+Nginx实现高可用Web负载均衡

    文章目录 Keepalived+Nginx实现高可用Web负载均衡 Keepalived+Nginx实现高可用Web负载均衡 高可用架构篇 Keepalived + Nginx 实现高可用 Web 负 ...

随机推荐

  1. spark1.5 scala.collection.mutable.WrappedArray$ofRef cannot be cast to ...解决办法

    下面是我在spark user list的求助贴,很快就得到了正确回答,有遇到问题的同学解决不了也可以去上面提问. I can use it under spark1.4.1,but error on ...

  2. jquery获取(设置)节点的属性与属性值

    1. attr(属性名)        //获取属性的值(取得第一个匹配元素的属性值.通过这个方法可以方便地从第一个匹配元素中获取一个属性的值.如果元素没有相应属性,则返回 undefined ) 2 ...

  3. JavaScipt 源码解析 回调函数

    函数是第一类对象,这是javascript中的一个重要的概念,意味着函数可以像对象一样按照第一类管理被使用,所以在javascript中的函数: 能"存储"在变量中,能作为函数的实 ...

  4. redis初步入门

    http://blog.csdn.net/u014419512/article/details/25693425 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+] 环境 安装 ...

  5. WCF初探-12:WCF客户端异常处理

    前言: 当我们打开WCF基础客户端通道(无论是通过显式打开还是通过调用操作自动打开).使用客户端或通道对象调用操作,或关闭基础客户端通道时,都会在客户端应用程序中出现异常.而我们知道WCF是基于网络的 ...

  6. 利用JAVA想数据库中提交数据

    1.用户信息提交界面 <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...

  7. Spring 整合 Hibernate

    Spring 整合 Hibernate •Spring 支持大多数流行的 ORM 框架, 包括 Hibernate JDO, TopLink, Ibatis 和 JPA. •Spring 对这些 OR ...

  8. Linux定时器相关源码分析

    Linux的定时器使用时间轮算法.数据结构不难理解,核心数据结构与散列表及其相似,甚至可以说,就是散列表.事实上,理解其散列表的本质,有助于对相关操作的理解. 数据结构 这里先列出一些宏,稍后解释: ...

  9. hdu 1036 (I/O routines, fgets, sscanf, %02d, rounding, atoi, strtol) 分类: hdoj 2015-06-16 19:37 32人阅读 评论(0) 收藏

    thanks to http://stackoverflow.com/questions/2144459/using-scanf-to-accept-user-input and http://sta ...

  10. jquery替换URL参数值

    由于经常会用到替换URL参数值,而网上写的方法代码都太长了,所以在这里写了一个简单的方法,供大家使用. 说明: reLoad(参数名,参数值) function reLoad(p, v) { var ...