一次LVS+MySQL的主主负载均衡实战
这是去年做的一个项目的记录,如果大家有更好的解决方案,欢迎指出。
先说说项目需求,用户需要在两个地市部署两套应用系统和两套数据库,在一个地市主用,在另一个热备;数据要互备;而且如果主用地市流量很大,可以分流到备用地市。
再说说用户环境,用户所有地市之间的通信使用MPLS VPN,两个地市之间使用不同的网段(甲方的内网)。
应用系统的主备和负载均衡下次再说,这儿先主要讲讲数据库内容。
1.选择数据库
现在有很多数据库可以满足主备和负载均衡的需求,有关系型数据库,也有NoSQL数据库。
我们选择了MySQL,做项目嘛,首先考虑的是项目成本,在关系型数据库中,能满足需求而且成本低的也就是MySQL了。对NoSQL数据库,我们考虑过mongodb和Hadoop,而且对这两个数据库都做了前期的研究评估,但因为我们的应用系统改造的成本太大,就放弃了。
采用了MySQL,那么就看使用它的什么技术了,我们需要两个地市的数据库都能访问,那么主备技术不能采用;两个地市的数据独立完整,而且在大多数情况下使用主用地市系统,备用地市只做数据同步,不参与应用计算,不消耗网络流量,MySQL Cluster也排除了。
最终采用了MySQL的主主备份技术,来达到数据的备份和两个数据库系统都可以访问的目的。
2.选择负载均衡技术
对MySQL的负载均衡技术,主要有HAPROXY和LVS等,由于我们的数据库要部署在两个不同地市的不同网段上,只有LVS的隧道模式能满足我们的需求。
3.架构图
4.安装LVS
1).安装必须文件
yum install -y gcc gcc-c++ makepcre pcre-devel kernel-devel openssl-devel libnl-devel popt-devel
2).建立内核软连接
ln -s /usr/src/kernels/2.6.-.el5-x86_64/ /usr/src/linux
3).安装lvs程序
modprobe -l|grep ipvs tar xvf ipvsadm-1.24.tar.gz cd ipvsadm-1.24 make make install /etc/init.d/ipvsadm save /etc/init.d/ipvsadm restart
在真实机器上的配置脚本:
#!/bin/bash
# description: Config realserver lo and apply noarp SNS_VIP=192.168.1.1 /etc/rc.d/init.d/functions case "$1" in
start)
ifconfig tunl0 $SNS_VIP netmask 255.255.255.255 broadcast 192.168.2.255
/sbin/route add -host $SNS_VIP dev tunl0
echo "" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore #主要是实现禁止响应对VIP的ARP请求
echo "" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/all/arp_announce
echo > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo > /proc/sys/net/ipv4/conf/tunl0/forwarding
echo > /proc/sys/net/ipv4/ip_forwarding
sysctl -p >/dev/null >&
echo "RealServer Start OK" ;;
stop)
ifconfig tunl0 down
route del $SNS_VIP >/dev/null >&
echo "" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit
esac
exit
5.安装Keepalived
tar xvf keepalived-1.1..tar.gz cd keepalived-1.1. ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.-.el5-x86_64 --enable-lvs make make install cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ mkdir -p /etc/keepalived /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived /usr/local/keepalived/sbin/keepalived /usr/sbin/ chkconfig keepalived on
keepalived.conf文件内容
! Configuration File for keepalived global_defs {
notification_email {
**********
}
notification_email_from *****
smtp_server 192.168.200.1
smtp_connect_timeout
router_id LVS_MASTER
} vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.2.1
}
} virtual_server 192.168.2.1 {
delay_loop
lb_algo wrr
lb_kind TUN
nat_mask 255.255.255.0
persistence_timeout
protocol TCP
real_server 192.168.1.1 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
} } real_server 192.168.3.1 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
}
6.安装MySQL
MySQL数据库的安装我就不记录了,主要记录一下主主备份的配置。
1).在两台数据库上创建同步账户
grant replication slave on *.* to mysqldb1@'192.168.3.1' identified by '*****';
2).修改数据库配置文件
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
server-id= #mysql5.5默认有
log-bin=mysql-bin #mysql5.5默认有
binlog-ignore-db=mysql #mysql库将不同步
auto_increment_offset= #是基数,两边不同server1设置1,server2设置2
auto_increment_increment= #大于等于复制集群中服务器的数量
[client]
default-character-set= utf8
[mysqld]
character-set-server= utf8
server-id= #将默认的1改为2,该值为两边不相同的任意数字
log-bin=mysql-bin #mysql5.5默认有
binlog-ignore-db=mysql #mysql库将不同步
auto_increment_offset= #是基数,两边不同server1设置1,server2设置2
auto_increment_increment= #大于等于复制集群中服务器的数量
3).执行数据同步
show master status\G 结果:
File: binlog.000007
Position: 107
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
依据结果,执行下面的语句
change master to master_host='192.168.1.2', master_user='xxx', master_password='*******', master_log_file='binlog.000007', master_log_pos=107;
7.注意事项
1).数据库链接数要依据项目调整
2).数据库链接的生命周期和LVS会话管理周期的调整 ipvsadm --set 120 20 100,如果时间过短,每次外部请求都会是一个新的链接,超过数据库最大链接数
3).在真实机器上要配置隧道接口,并且要关闭VIP的ARP请求
4).在lvs虚拟机上不手动配置隧道接口,用keepalived去自动管理,但在真实机上要手动创建(可以写开机脚本)
5).在项目中lvs所在区域如果断网,则负载均衡也失效了,只能手动切换至备用系统
搭建lvs,是个要十分细心的工作,很多细节要注意,就不一一说了。
一次LVS+MySQL的主主负载均衡实战的更多相关文章
- (转载)Nginx/LVS/HAProxy三种主流负载均衡软件的对比
原地址:http://www.ha97.com/5646.html PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些 ...
- LVS+Keepalived 实现高可用负载均衡
前言 在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的.此时最常见的方式就是通过负载均衡来进行横向扩展.其中我们最常用的软件就是 Nginx.通过其反向代理的能力能够轻松实现负载均衡,当有服务出 ...
- Windows+IIS结合LVS+Keepalived是实现Linux负载均衡软件
在Discuz!NT的最新版本(企业版)中,支持目前主流LINUX平台上的负载均衡解决方案,比如NGINX,HAPROXY,LVS等.本文与其说是解决方案,倒不如说是介绍如何搭建Discuz!NT负载 ...
- LVS基于NAT模式搭建负载均衡群集
LVS的基本架构图 负载均衡群集中,包括三个层次的组件: 1.第一层,负载调度器(BL) 前段至少有一个负载调度器(Load Balancer 或称为Director)负责响应并分发来自客户端的访问请 ...
- 【Nginx】(主从热备)LVS+Keepalived+Nginx实现高性能负载均衡集群
一.LVS 1.1 概述 1.2 Nginx与LVS区别什么 二.Keepalived 2.1 概述 2.2 keepalived和其工作原理 三.LVS+Keepalived+Nginx 搭建双机主 ...
- LVS+Keepalived 实现高可用负载均衡集群
LVS+Keepalived 实现高可用负载均衡集群 随着网站业务量的增长,网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如 F5 ,Array又太贵,你们又是创业型互联公司如何有效 ...
- LVS+Keepalived实现高可用负载均衡(转)
LVS+Keepalived实现高可用负载均衡 一.原理 1.概要介绍 如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具 ...
- lvs+keepalived+nginx实现高性能负载均衡集群【转】
转自 lvs+keepalived+nginx实现高性能负载均衡集群 - 青衫lys - 博客园http://www.cnblogs.com/liuyisai/p/5990645.html 一.为什么 ...
- 【架构师之路】 LVS+Keepalived实现高可用负载均衡
一.原理 1.概要介绍 如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具有3~5层交换功能,其主要作用是检测web服务器的状态, ...
- centos7使用haproxy1.7.5实现反向代理负载均衡实战
使用haproxy实现反向代理负载均衡实战环境准备:两台虚拟机 # yum install -y gcc glibc gcc-c++ make screen tree lrzsz node1源码编译安 ...
随机推荐
- 关于海康视频采集卡的简介---基于pci的插潮采集卡
vga 640x480 qvga vga的1/4,宽高分别是vga的一半 (1)采集类型 海康威视 DS-2CE16A2P-IT3P 700TVL 1/3" DIS ICR 红外防水筒型摄像 ...
- 获取网站的BaseURL
//get base URL var _urlstr = window.location.href; if (_urlstr.indexOf("? ...
- 一步一步学ios UITextView(多行文本框)控件的用法详解(五5.8)
本文转载至 http://wuchaorang.2008.blog.163.com/blog/static/48891852201232014813990/ 1.创建并初始化 创建UIText ...
- python 基础 1.5 python 数据类型(一)--整型 浮点型 布尔型及字符串和常用方法
一.python 数据类型:数值,字符串,列表,元组,字典.以下操作是在linux 下 ipython中进行 1.数值 1>123 与 “123”的区别 答:123为数值,“123”在pyt ...
- memcached系列
memcached系列:http://blog.csdn.net/xingxing513234072/article/category/2462865
- squid代理缓存服务器
参考文章 http://www.cnblogs.com/mchina/p/3812190.html ;
- iOS 流布局 UICollectionView使用(UICollectionVIew的代理方法)
UICollectionViewDataSource协议 这个协议主要用于collectionView相关数据的处理,包含方法如下: 设置分区数(这个是可选实现的) - (NSInteger)numb ...
- main方法的参数
敲例子的时候无意中把主方法的参数给落下了,当时没有发现,保存之后就去编译,运行了,通常情况下编译没有错误那胜利就在掌握之中了,没想到这次我竟然在"不一般"的行列中,编译无误,运行出 ...
- HTML——input
一个简单的HTML表单,包含两个文本输出框和一个提交按钮: <form action="form_action.asp" method="get"> ...
- ceph分布式存储系统初探
前言 由于公司的业务调整,现在我又要接触ceph这个东西,由于我接手的是一个网盘类项目,所以分布式存储系统ceph就是我必须要学的了.现在压力还是比较大的,从业务直接到后台核心. 大概在这几天,我将c ...