MySQL + Amoeba 负载均衡、主从备份方案
1. 基本环境
4台内网虚拟机的操作系统都是ubuntu-14.04.4 64位
IP为:192.168.169.11、192.168.169.12、192.168.169.13、192.168.169.14
MySQL 4台2读2写,2写互为主从,2组1读1写为主从备份,Amoeaba安装在任一机器上,物理分离更好
2. 安装mysql
#apt-get update
#apt-get install mysql-server (root/admin)
== 已开机自启动
#mysql -V
#mysql -u root -p
#mysql -h 192.168.169.11 -u root -p #远程登录
mysql> show databases;
mysql> show global variables like 'port'; 查看端口号
mysql> show processlist;
== 设置允许远程登录,共2步
== 第一步:
#vim /etc/mysql/my.cnf
== 注释掉下面这行
#bind-address = 127.0.0.1
== 第二步:
mysql> use mysql
mysql> select host,user,password from user;
mysql> update user set host='%' where user='root' and host='localhost';
mysql> flush privileges;
mysql> exit
3. MySQL 主从同步
== 主 192.168.169.11 & 192.168.169.12 (2写)
mysql> grant REPLICATION SLAVE ON *.* TO 'repl'@'192.168.169.%' IDENTIFIED BY 'admin';
== [mysqld]下面增加下面几行代码
#vim /etc/mysql/my.cnf
server-id = 11
log_bin = /var/log/mysql/master-bin
log_bin_index = master-bin.index
log_slave_updates = 1 //很重要,从前一台机器上同步过来的数据才能同步到下一台机器,当有2台写数据库时,需此设置
relay_log = /var/log/mysql/slave-relay-bin.index //relay_log其实是从的一端设置,因为11/12互为主从,所以也要设置
relay_log_index = slave-relay-bin.index
general_log = 1
general_log_file = /var/log/mysql/mysql.log //打开普通log,这样负载均衡设置完后,可以看到插入查询发生在具体哪个MySQL上
#reboot
==reboot后,自动开启master
mysql> show master status;
== 同步时,暂时锁住表,解锁
mysql> flush tables with read lock;
mysql> unlock tables;
== 从 192.168.169.13 & 192.168.169.14 (2读)
== [mysqld]下面增加下面几行代码
#vim /etc/mysql/my.cnf
server-id = 13
relay_log = /var/log/mysql/slave-relay-bin.index
relay_log_index = slave-relay-bin.index
general_log = 1
general_log_file = /var/log/mysql/mysql.log
#reboot
== reboot后,自动开启slave
mysql> change master to
master_host='192.168.169.11', //11、12互为主从,11、13主从,12、14主从,从的一端都要配一下
master_port=3306,
master_user='repl',
master_password='admin',
master_log_file='master-bin.000003', //show master status; 的File值
master_log_pos=0; //show master status; 的Position值
== 启动Slave同步进程
mysql> start slave;
mysql> stop slave;
mysql> show slave status\G
== 若无法连接master
mysql> reset slave;
mysql> change master to ...... //上面的change命令再执行一遍
//检查下吧,插入一条记录到11,看看12/13/14有同步么? 11->12, 11->13, 11>12->14,插入一条到12,也应该一样
4. 安装Amoeba
== 所有mysql都新增用户
mysql> grant all ON *.* TO 'amoeba'@'192.168.169.%' IDENTIFIED BY 'admin';
#tar -zxvf amoeba-mysql-binary-2.2.0.tar.gz –C /usr/local/servers/amoeba-mysql-binary-2.2.0
#vim ./conf/dbServers.xml
<dbServer name="abstractServer" abstractive="true">
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">${defaultManager}</property>
<property name="sendBufferSize">64</property>
<property name="receiveBufferSize">128</property>
<property name="port">3306</property>
<property name="schema">ssh</property>
<property name="user">amoeba</property>
<property name="password">admin</property>
</factoryConfig>
<poolConfig ...>
</dbServer>
<dbServer name="master1" parent="abstractServer">
<factoryConfig>
<property name="ipAddress">192.168.169.11</property>
</factoryConfig>
</dbServer>
<dbServer name="master2" parent="abstractServer">
<factoryConfig>
<property name="ipAddress">192.168.169.12</property>
</factoryConfig>
</dbServer>
<dbServer name="slave1" parent="abstractServer">
<factoryConfig>
<property name="ipAddress">192.168.169.13</property>
</factoryConfig>
</dbServer>
<dbServer name="slave2" parent="abstractServer">
<factoryConfig>
<property name="ipAddress">192.168.169.14</property>
</factoryConfig>
</dbServer>
<dbServer name="masters" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
<property name="loadbalance">1</property>
<property name="poolNames">master1,master2</property> //设成这样master1,master1,master2,表示2:1
</poolConfig>
</dbServer>
<dbServer name="slaves" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
<property name="loadbalance">1</property>
<property name="poolNames">slave1,slave2</property>
</poolConfig>
</dbServer>
#vim ./conf/amoeba.xml
<property name="authenticator">
<bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
<property name="user">amoeba_user</property>
<property name="password">admin</property>
<property name="filter">
<bean class="com.meidusa.amoeba.server.IPAccessController"></bean>
</property>
</bean>
</property>
<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
<property name="ruleLoader">
<bean class="com.meidusa.amoeba.route.TableRuleFileLoader">
<property name="ruleFile">${amoeba.home}/conf/rule.xml</property>
</bean>
</property>
<property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
<property name="LRUMapSize">1500</property>
<property name="defaultPool">masters</property>
<property name="writePool">masters</property>
<property name="readPool">slaves</property>
<property name="needParse">true</property>
</queryRouter>
#/usr/local/servers/amoeba-mysql-binary-2.2.0/bin/amoeba start &
#mysql -u amoeba_user -p -h 192.168.169.14 -P8066
== 启动报错下列错误的话,修改amoeba & amoeba.bat
The stack size specified is too small, Specify at least 228k
Error: Could not create the Java Virtual Machine.
#vim amoeba
#vim amoeba.bat
DEFAULT_OPTS="-server -Xms1024m -Xmx1024m -Xss256k"
5. 应用程序
Java应用程序只要连 jdbc:mysql://192.168.169.14:8066/ssh?useUnicode=true&characterEncoding=utf-8
备注:存在Amoeba单点,需要进一步热备Amoeba,完善方案
其实最简单的方法是Amoeba可以配2个,应用程序端弄2个数据源
MySQL + Amoeba 负载均衡、主从备份方案的更多相关文章
- keepalived和lvs实现mysql读负载均衡
keepalived+lvs实现对mysql读负载均衡 环境:redhat 6.5 real server: 172.25.254.189 172.25.254.224 lvs: 172.25.254 ...
- nginx 实现mysql的负载均衡【转】
默认Nginx只支持http的反向代理,要想nginx支持tcp的反向代理,还需要在编译时增加tcp代理模块支持,即nginx_tcp_proxy_module 下面操作步骤只让nginx支持tcp_ ...
- mysql数据库负载均衡高可用之主从、主主备份,实时同步
一:MySQL Replication 什么是MySQL Replication Replication可以实现将数据从一台数据库服务器(master)复制到一或多台数据库服务器(slave) 默认情 ...
- keepalived容灾方案,实现nginx负载均衡主从架构(1)
一:环境准备:4台nginx服务器,两台用yum安装,两台使用源码安装 第一步:使用yum安装nginx服务器,在浏览器输入ip,可以显示以下内容,这步比较简单,安装好修改/usr/share/ngi ...
- SQL Server 负载均衡集群方案之Moebius
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 架构原理(Architecture) 测试环境(Environment) 安装Moebius( ...
- Keepalived+Nginx提供前端负载均衡+主从双机热备+自动切换
原文链接:http://unun.in/linux/156.html 方案: 采用两台Nginx服务器作为前端,提供静态web内容,分发web请求,一主一从,Keepalived实现状态监测,保证 N ...
- 变形虫mysql的负载均衡 读写分离
变形虫概述 图片来自 http://docs.hexnova.com/amoeba/amoeba-products.html 文档上说也可以做mongdb的分布式. 应用: 具有负载均衡.高可用 ...
- MySQL Route负载均衡与读写分离Docker环境使用
Docker环境描述 主机名 部署服务 备注 MySQL Route MySQL Route 部署在宿主机上的MySQL Route服务 MySQL Master1 MySQL 5.7.16 Dock ...
- 2.高并发教程-基础篇-之nginx+mysql实现负载均衡和读写分离
技巧提示:mysql读写分离搭建好之后,配合nginx的负载均衡,可以高效的mysql的集群性能,同时免去麻烦的query分流.比如,sever1收到的请求就专门链接slave1从mysql读取数据, ...
随机推荐
- linux下搭建SVN服务器完全手册【转】
转自:http://blog.csdn.net/bullbat/article/details/9115559 系统环境 RHEL5.4最小化安装(关iptables,关selinux) ...
- python 查询数据
查找课程不及格学生最多的前5名老师的id 表:student 字段名 类型 是否为空 主键 描述 StdID int 否 是 学生ID StdName varchar(100) 否 学生姓名 Gend ...
- JMeter乱码问题的解决
一.JMeter返回数据是乱码 解决办法是: 在JMeter安装路径的bin目录下,以记事本打开文件jmeter.properties, 找到Sampleresult.default.encoding ...
- flask的orm框架(SQLAlchemy)-创建表
# 转载请留言联系 ORM 是什么? ORM,Object-Relation Mapping.意思就是对象-关系映射.ORM 主要实现模型对象到关系数据库数据的映射. 优点 : 只需要面向对象编程, ...
- Java微信公众平台开发_01_本地服务器映射外网
做微信开发之前,我们需要先做一个内网穿透,让我们的工程可以在公网上被访问. 一.工具列表 内网穿透的相关工具有: (1)natapp 官网 :https://natapp.cn/ (2)花生壳 官网: ...
- 51nod 1091 线段的重叠【贪心/区间覆盖类】
1091 线段的重叠 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 2 ...
- 2017 ACM-ICPC Asia Xi'an Problem A XOR(异或线性基 )
题目链接 2017西安赛区 Problem A 题意 给定一个数列,和$q$个询问,每个询问中我们可以在区间$[L, R]$中选出一些数. 假设我们选出来的这个数列为$A[i_{1}]$, $A[ ...
- Redis主从复制、哨兵模式
1.部署主从 环境:主IP:10.0.0.15,端口6379;从IP:10.0.0.16,端口6379. 原理:基于RDB持久化的功能来实现主从复制的功能. a.linux-redis1(10.0.0 ...
- [LOJ6278]数列分块入门 2
题目大意: 给你一个长度为$n(n\leq 50000)$的序列$A$,支持进行以下两种操作: 1.将区间$[l,r]$中所有数加上$c$: 2.询问区间$[l,r]$中小于$c^2$的数的个数.思路 ...
- lua的深拷贝和浅拷贝
--- Deep copies a table into a new table. -- Tables used as keys are also deep copied, as are metata ...