- 浏览: 348457 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
pacoson:
感谢楼主。请受小生一拜。
ANT预编译JSP -
zhuhongming123:
一楼的同学Lucene4.* 以上的 已经改成了Numeric ...
Lucene日期排序及组合查询 -
ywjk520:
RangeQuery在哪个包里?
Lucene日期排序及组合查询 -
willwen:
有个疑问,楼主,为何初始化bits 从txt读取已有的网址是直 ...
布隆过滤器(Bloom Filter)之java实例 -
yu_226528:
还不如没有呢
jFreeChart 在jsp页上实现简单的折线图、柱状图
mysql负载均衡完美解决方案V1.0
1.环境:
mysql 5
ubuntu10.04 x86_64
mdb1 eth0 192.168.5.11
mdb2 eth0 192.168.5.12
sdb1 eth0 192.168.5.21
sdb2 eth0 192.168.5.22
sdb3 eth0 192.168.5.23
sdb4 eth0 192.168.5.24
haproxy
eth0 192.168.5.10 (mdb vip write)
eth1 192.168.5.20 (sdb vip read)
说明:mdb vip用于DB的写,sdb vip用于DB读,实现读写分离和负载均衡,带故障检测自动切换
2.架构图
web1 web2 web3
| | |
—————————-
|
haproxy(lb db write/read)
|
———————————-
| |
mdb1 mdb2
| |
————– —————-
| | | |
sdb1 sdb2 sdb3 sdb4
说明:
1)mdb1和mdb1配置成主-主模式,相互同步,通过haproxy提供一个lb的写ip
2)sdb1和sdb2配置为mdb1的从,sdb3和sdb4配置为mdb2的从
3)sdb1,sdb2,sdb3,sdb4这4台从库,通过haproxy提供一个lb的读ip
4) 当mdb2停止复制,mdb1为主库,haproxy停止发送请求到mdb2和sdb3,sdb4
5) 当mdb1停止复制,mdb2为主库,haproxy停止发送请求到mdb1和sdb1,sdb2
6) 当mdb1和mdb2同时停止复制,这时2台主库变成readonly模式,数据库不能写入
7)当mdb2 offline时,mdb1进入backup mode,停止发送请求到mdb2,sdb3,sdb4
8)当mdb1 offline时,mdb2进入backup mode,停止发送请求到mdb1,sdb1,sdb2
9) 当mdb1 mdb2同时offline,整个DB停止工作
3.安装mysql-server
登录mdb1,mdb2,sdb1,sdb2,sdb3,sdb4,输入以下命令进行安装:
apt-get install mysql-server -y
安装时会提示输入mysql root用户密码,输入gaojinbo.com
修改mysql配置,监听所有接口
vi /etc/mysql/my.cnf
修改为:
bind-address = 0.0.0.0
重启mysql
/etc/init.d/mysql restart
4.配置mdb1,mdb2主-主同步
1)mdb1:
vi /etc/mysql/my.cnf
server-id = 1
log_bin = mysql-bin
log-slave-updates #很重要,从前一台机器上同步过来的数据才能同步到下一台机器
expire_logs_days = 10
max_binlog_size = 100M
auto_increment_offset = 1
auto_increment_increment = 2
2)mdb2:
vi /etc/mysql/my.cnf
server-id = 2
log_bin = mysql-bin
log-slave-updates #很重要,从前一台机器上同步过来的数据才能同步到下一台机器
expire_logs_days = 10
max_binlog_size = 100M
auto_increment_offset = 2
auto_increment_increment = 2
3)mdb1和mdb2:
重启mysql
/etc/init.d/mysql restart
添加复制用户
mysql -uroot -pgaojinbo.com
GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’192.168.5.%’ IDENTIFIED BY ‘gaojinbo’;
记录日志文件和pos
mysql -uroot -pgaojinbo.com
show master status\G
4)mdb1:
change master to master_host=’192.168.5.12′,master_port=3306,master_user=’repl’,master_password=’gaojinbo’,master_log_file=’mysql-bin.000003′,master_log_pos=106;
start slave;
show slave status\G
说明:mysql-bin.000003和106是主库配置第3)步记录的信息
出现以下内容,说明同步ok
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
5)mdb2:
change master to master_host=’192.168.5.11′,master_port=3306,master_user=’repl’,master_password=’gaojinbo’,master_log_file=’mysql-bin.000001′,master_log_pos=249;
start slave;
show slave status\G
说明:mysql-bin.000001和249是主库配置第3)步记录的信息
出现以下内容,说明同步ok
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
6)测试主-主同步
mdb1:
mysql -uroot -pgaojinbo.com
show databases;
create database gaojinbo;
mdb2:
mysql -uroot -pgaojinbo.com
show databases;
即可看到在mdb1上建立的数据库gaojinbo
至此mdb1,mdb2主-主配置完成!
5.4台从库配置
sdb1-4配置(注:server-id不能相同):
vi /etc/mysql/my.cnf
server-id = 3
log_bin = mysql-bin
重启mysql
/etc/init.d/mysql restart
sdb1和sdb2配置成mdb1的从库:
mysql -uroot -pgaojinbo.com
change master to master_host=’192.168.5.11′,master_port=3306,master_user=’repl’,master_password=’gaojinbo’,master_log_file=’mysql-bin.000001′,master_log_pos=345;
start slave;
show slave status\G
说明:mysql-bin.000001和345是主库配置第3)步记录的信息
出现以下内容,说明同步ok
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
sdb3和sdb4配置成mdb2的从库:
change master to master_host=’192.168.5.12′,master_port=3306,master_user=’repl’,master_password=’gaojinbo’,master_log_file=’mysql-bin.000003′,master_log_pos=106;
start slave;
show slave status\G
说明:mysql-bin.000003和106是主库配置第3)步记录的信息
出现以下内容,说明同步ok
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
测试:
mdb1:
mysql -uroot -pgaojinbo.com
show databases;
create database eossc;
在其他DB上,这时会看到刚建立的数据库eossc
至此4台从数据库配置完成!
6.编写mysql检测脚本
1)mdb1和mdb2:
vi /etc/xinetd.d/mysqlchk
#
# /etc/xinetd.d/mysqlchk
#
service mysqlchk_write
{
flags = REUSE
socket_type = stream
port = 9200
wait = no
user = nobody
server = /opt/mysqlchk_status.sh
log_on_failure += USERID
disable = no
only_from = 192.168.5.0/24 # recommended to put the IPs that need
# to connect exclusively (security purposes)
}
service mysqlchk_replication
{
flags = REUSE
socket_type = stream
port = 9201
wait = no
user = nobody
server = /opt/mysqlchk_replication.sh
log_on_failure += USERID
disable = no
only_from = 192.168.5.0/24 # recommended to put the IPs that need
# to connect exclusively (security purposes)
}
添加服务端口
vi /etc/services
mysqlchk_write 9200/tcp #mysqlchk_write
mysqlchk_replication 9201/tcp #mysqlchk_replication
mdb1上操作:
vi /opt/mysqlchk_status.sh
#!/bin/bash
MYSQL_HOST="192.168.5.11"
MYSQL_PORT="3306"
MYSQL_USERNAME="root"
MYSQL_PASSWORD="gaojinbo.com"
ERROR_MSG=`/usr/bin/mysql –host=$MYSQL_HOST –port=$MYSQL_PORT –user=$MYSQL_USERNAME –password=$MYSQL_PASSWORD -e "show databases;" 2>/dev/null`
if [ "$ERROR_MSG" != "" ]
then
# mysql is fine, return http 200
/bin/echo -e "HTTP/1.1 200 OK\r\n"
/bin/echo -e "Content-Type: Content-Type: text/plain\r\n"
/bin/echo -e "\r\n"
/bin/echo -e "MySQL is running.\r\n"
/bin/echo -e "\r\n"
else
# mysql is down, return http 503
/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
/bin/echo -e "Content-Type: Content-Type: text/plain\r\n"
/bin/echo -e "\r\n"
/bin/echo -e "MySQL is *down*.\r\n"
/bin/echo -e "\r\n"
fi
vi /opt/mysqlchk_replication.sh
#!/bin/bash
MYSQL_HOST="192.168.5.11"
MYSQL_PORT="3306"
MYSQL_USERNAME="root"
MYSQL_PASSWORD="gaojinbo.com"
/usr/bin/mysql –host=$MYSQL_HOST –port=$MYSQL_PORT –user=$MYSQL_USERNAME –password=$MYSQL_PASSWORD -e "show slave status\G;" >/tmp/check_repl.txt
iostat=`grep "Slave_IO_Running" /tmp/check_repl.txt |awk ‘{print $2}’ `
sqlstat=`grep "Slave_SQL_Running" /tmp/check_repl.txt |awk ‘{print $2}’ `
#echo iostat:$iostat and sqlstat:$sqlstat
if [ "$iostat" = "No" ] || [ "$sqlstat" = "No" ];
then
# mysql is down, return http 503
/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
/bin/echo -e "Content-Type: Content-Type: text/plain\r\n"
/bin/echo -e "\r\n"
/bin/echo -e "MySQL replication is *down*.\r\n"
/bin/echo -e "\r\n"
else
# mysql is fine, return http 200
/bin/echo -e "HTTP/1.1 200 OK\r\n"
/bin/echo -e "Content-Type: Content-Type: text/plain\r\n"
/bin/echo -e "\r\n"
/bin/echo -e "MySQL replication is running.\r\n"
/bin/echo -e "\r\n"
fi
测试同步检测脚本:
mysql -uroot -pgaojinbo.com
stop slave sql_thread; #或者 stop slave io_thread;
/opt/mysqlchk_replication.sh
mdb2上操作:
添加和mdb1一样的脚本,把
/opt/mysqlchk_status.sh 里面的192.168.5.11修改为192.168.5.12
/opt/mysqlchk_replication.sh 里面的192.168.5.11修改为192.168.5.12
2)sdb1,sdb2,sdb3,sdb4上操作:
vi /etc/xinetd.d/mysqlchk
#
# /etc/xinetd.d/mysqlchk
#
service mysqlchk_replication
{
flags = REUSE
socket_type = stream
port = 9201
wait = no
user = nobody
server = /opt/mysqlchk_replication.sh
log_on_failure += USERID
disable = no
only_from = 192.168.5.0/24 # recommended to put the IPs that need
# to connect exclusively (security purposes)
}
vi /opt/mysqlchk_replication.sh
#!/bin/bash
MYSQL_HOST="192.168.5.21"
MYSQL_PORT="3306"
MYSQL_USERNAME="root"
MYSQL_PASSWORD="gaojinbo.com"
/usr/bin/mysql –host=$MYSQL_HOST –port=$MYSQL_PORT –user=$MYSQL_USERNAME –password=$MYSQL_PASSWORD -e "show slave status\G;" >/tmp/check_repl.txt
iostat=`grep "Slave_IO_Running" /tmp/check_repl.txt |awk ‘{print $2}’ `
sqlstat=`grep "Slave_SQL_Running" /tmp/check_repl.txt |awk ‘{print $2}’ `
#echo iostat:$iostat and sqlstat:$sqlstat
if [ "$iostat" = "No" ] || [ "$sqlstat" = "No" ];
then
# mysql is down, return http 503
/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
/bin/echo -e "Content-Type: Content-Type: text/plain\r\n"
/bin/echo -e "\r\n"
/bin/echo -e "MySQL replication is *down*.\r\n"
/bin/echo -e "\r\n"
else
# mysql is fine, return http 200
/bin/echo -e "HTTP/1.1 200 OK\r\n"
/bin/echo -e "Content-Type: Content-Type: text/plain\r\n"
/bin/echo -e "\r\n"
/bin/echo -e "MySQL replication is running.\r\n"
/bin/echo -e "\r\n"
fi
注:脚本/opt/mysqlchk_replication.sh里面的ip
sdb1 MYSQL_HOST="192.168.5.21"
sdb2 MYSQL_HOST="192.168.5.22"
sdb3 MYSQL_HOST="192.168.5.23"
sdb4 MYSQL_HOST="192.168.5.24"
添加服务端口
vi /etc/services
mysqlchk_replication 9201/tcp #mysqlchk_replication
3)所有DB上操作:
增加检测脚本执行权限
chmod +x /opt/mysql*.sh
重启系统
reboot
查看监听端口
netstat -antup|grep xinetd
tcp 0 0 0.0.0.0:9200 0.0.0.0:* LISTEN 903/xinetd
tcp 0 0 0.0.0.0:9201 0.0.0.0:* LISTEN 903/xinetd
注:sdb只有9201监听
发表评论
-
mysq的主从复制、备份、还原
2011-11-24 14:51 1296搭建实验环境说明: 在 RH5.4 yum安装 mysql部 ... -
mysql负载均衡完美解决方案V1.0(2)
2011-06-30 14:23 14067.haproxy安装配置 下载编译安装: wget http ... -
SP2-0618: 无法找到会话标识符
2011-03-11 15:00 1054SQL> set autotrace on;SP2-06 ... -
用SQL删除重复记录的N种方法
2010-12-03 12:34 1001例如:id name ... -
MYSQL外键(Foreign Key)的使用
2010-08-18 11:30 817在MySQL 3.23.44版本后,InnoDB引擎类型的 ... -
SQL获取所有用户名,数据库名、所有表名、所有字段名及字段类型
2010-08-16 17:56 25621.获取所有用户名:SELECT name FROM Sysu ... -
将mysql中的数据迁移到sqlserver中
2010-07-29 16:40 17531.安装mysql数据库的ODBC驱动,mysql-conn ... -
搞定使用MySQL导入外部的SQL文件执行
2010-07-28 18:41 2246很多的时候都需要将外 ... -
判断数据库中表是否存在,并创建
2010-06-16 15:30 2112//SQLServer 2000 IF NOT EXI ... -
sql server中用sql语句查看表结构信息
2010-05-24 16:37 1157select * from information_schem ... -
Berkeley DB Java Edition 使用手册
2010-05-21 17:06 2220package test; import com.sleep ... -
介绍和使用Berkeley DB Java Edition(嵌入式数据库)
2010-05-21 16:49 1239一、 简介 Berkeley DB Java ... -
Berkely DB Java Edition学习笔记
2010-05-21 16:45 1060Berkely DB对于高并发、要求速度快的应用来说是个不错的 ... -
三种SQL分页方法
2010-02-08 16:06 1037表中主键必须为标识列,[ID] int IDENTITY (1 ... -
经典 SQL 语句集锦(收藏版,必看)
2009-11-11 09:11 956下列语句部分是MsSql语 ... -
SQL操作全集
2009-07-05 20:03 750下列语句部分是Mssql语 ... -
MySQL基本命令总结
2009-06-24 20:25 1119测试环境:mysql 5.0.45【注:可以在mysq ... -
Oracle数据库开发的一些经验积累
2009-06-18 23:23 9571、不安装Oracle客户连接Oracle 8的方法请将以下文 ... -
Oracle函数列表
2009-06-18 23:09 829PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并 ... -
Oracle临时表空间Temp满了怎么办
2009-06-18 23:04 3078最近遇到这样一个问 ...
相关推荐
《JspShop网络购物系统 v1.0:构建高效电商解决方案》 JspShop网络购物系统 v1.0是一款基于Java技术开发的电子商务平台,它为商家提供了完整的网上销售和管理功能,支持用户进行在线浏览、选购商品、支付结算以及...
《Xweibo媒体微博解决方案 v1.0》是一款基于PHP编程语言开发的微博应用系统,专为媒体和社交网络提供高效、便捷的信息分享与互动平台。这个解决方案集成了博客日记的功能,使得用户不仅可以发布短小精悍的微博,还...
本文将详细阐述一种基于LVS(Linux Virtual Server)、Keepalived、MHA(Master High Availability)和MySQL的高可用架构配置,旨在为IT专业人士提供一套稳定且高效的数据库集群解决方案。 **第一部分:MHA介绍** ...
齐博B2B电子商务系统v1.0模板是一款基于PHP编程语言开发的电子商务平台解决方案,专为搭建B2B(Business-to-Business)网站而设计。这个红色模板是该系统的一个版本,旨在提供一个视觉上吸引人的用户界面,以促进...
系统的核心部分是其数据库管理系统,这里选择了MySQL作为数据存储解决方案。MySQL是一款开源、关系型数据库管理系统,以其高性能、高可用性和稳定性著称。在交易系统中,MySQL负责存储交易记录、用户信息、账户余额...
综上所述,FFS V1.0正式版——MFH即时文件存储系统,凭借其强大的PHP编程基础,提供了高效、安全的文件存储解决方案。它的即时性、可扩展性、安全性及易用性,使其成为各类网站和应用程序的理想选择。通过深入了解和...
在Web开发领域,这样的命名方式暗示了这是一个专门为Web平台设计的软件,可能包括前端用户界面、后端服务器逻辑以及可能的数据存储解决方案。 Web应用程序是由HTML、CSS、JavaScript等技术构建的,用于在Web浏览器...
11. **性能优化**:考虑到大型电商网站的高并发需求,系统可能采用缓存技术(如Redis),负载均衡和CDN服务来提升性能和响应速度。 12. **后台管理系统**:除了前端用户界面,系统还包括一个管理后台,用于管理员...
Mycat高可用是通过KP+HA实现的,KP(Keepalived+Pacemaker)是一种高可用解决方案,通过心跳机制来保证服务的高可用性。HA(High Availability)是高可用性的缩写,指的是系统或者服务的高可用性。 二、Mycat实现...
FeasyBlog V1.0是该系统的首个正式版本,它包含了博客的基本功能,如文章管理、分类管理、评论系统以及自定义主题等,旨在为用户提供一个快速搭建个人博客的解决方案。 在FeasyBlog V1.0中,我们可以看到以下几个...
首先,"Bty分销系统v1.0开源版源码"是一个基于PHP编写的电子商务解决方案,其核心在于实现商品的多级分销模式。分销系统通常包含供应商管理、分销商管理、订单处理、佣金结算等多个模块,是电商运营的重要组成部分。...
总之,SOCUT投票系统.Net开源版 v1.0是一个基于.NET技术栈的开源投票解决方案,具备高度的定制性和可扩展性。开发者可以通过学习和修改源代码,进一步优化系统功能,满足特定场景下的投票需求。对于想深入了解.NET...
综上所述,《龙腾网站订单系统XP V1.0》是一个全面的电子商务解决方案,结合先进的技术和人性化的用户体验,为电子购物领域提供了可靠的运营支持。无论是商家管理商品、处理订单,还是消费者选购商品、跟踪物流,都...
08cms小说系统 v1.0 是一款专...总结,08cms小说系统 v1.0是一款面向商业运营的全方位在线阅读平台解决方案,其功能强大且全面,从内容管理到用户交互,再到商业化运营,都考虑得十分周全,是搭建小说网站的理想选择。
10. **性能优化**:通过缓存、负载均衡等技术,确保系统在高并发访问时仍能保持稳定运行。 总的来说,"基于PHP的淘乐云点播 php版 v1.0.zip"是一个集成了多种技术和功能的Web应用程序,旨在提供高效、便捷的在线...
总之,中小企业服务网投融资服务发布系统 v1.0 是一个综合性的解决方案,旨在简化中小企业的融资过程,同时为投资者提供高效的投资决策工具。其开源和可定制的特点,使得该系统在不同的商业环境中都能发挥出应有的...
综上所述,"ASP源码—曲阳热线互联网新闻采集系统 v1.0.zip"包含了一个完整的新闻采集和发布解决方案,它利用ASP技术实现了从互联网上获取、处理和发布新闻的功能。对于开发者而言,深入研究这个源码可以帮助学习ASP...
《网钛商城系统 v1.0》是一款专为商业运营设计的在线购物平台源码,其核心在于提供了一个高效、安全、易用的电子商务解决方案。本文将深入探讨该系统的架构设计、功能特性、开发语言及数据库结构等关键知识点。 1. ...
【网络书店v1.0源码】是一款商业级的在线图书销售系统,它包含了完整的前端用户界面和后端管理系统,为用户提供了一套完整的网络书店运营解决方案。源码中涵盖了多种编程技术,包括但不限于Web开发、数据库管理、...