部署结构图
示例:
Datanode 1
Datanode 2
Datanode 3
Datanode 4
jdk安装
1 先卸载系统带的jdk
yum remove java
2 创建目录
mkdir -p /opt/appl/jdk
3 减压
tar -zxvf jdk-8u102-linux-x64.gz -C /opt/appl/jdk
4 创建软连接
cd /opt/appl/jdk
ln -s /opt/appl/jdk/jdk1.8.0_102 java8
5 修改环境变量
vim /etc/profile
1
2
3
|
# jdk
export JAVA_HOME=/opt/appl/jdk/java8
export PATH=$PATH:$JAVA_HOME/bin
|
6 验证
source /etc/profile
验证: java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
则安装成功
MyCat安装
1、下载
官方下载地址
wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20171228230037-linux.tar.gz
建议放在/opt/appl/mycat目录下
groupadd mycat useradd -r -g mycat mycat
chown -R mycat.mycat /opt/appl/mycat
ln -si /opt/appl/mycat/bin/mycat /usr/bin/mycat
然后可以使用
mycat start
mycat stop
mycat restart等命令启动或者停止了。
启动前,先修改配置文件,确保连接的数据库存在并且用户名密码正确。
配置文件件/opt/appl/mycat/mycat-1.6.5/conf/schema.xml。
读写分离配置
写mysql实例 配置在 writeHost
读mysql实例 配置在 <readHost />
读写依赖mysql自身的主从复制
注意:启动时 mysql 主从实例都需正常,否则启动后 发起查询sql 报错
MyCAT的读写分离机制如下:
- 事务内的SQL,全部走写节点,除非某个select语句以注释/*balance*/开头
- 自动提交的select语句会走读节点,并在所有可用读节点中间随机负载均衡
- 当某个主节点宕机,则其全部读节点都不再被使用,因为此时,同步失败,数据已经不是最新的,MYCAT会采用另外一个主节点所对应的全部读节点来实现select负载均衡。
- 当所有主节点都失败,则为了系统高可用性,自动提交的所有select语句仍将提交到全部存活的读节点上执行,此时系统的很多页面还是能出来数据,只是用户修改或提交会失败。
dataHost的balance属性设置为:
- 0,不开启读写分离机制
- 1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
- 2,所有的readHost与writeHost都参与select语句的负载均衡,也就是说,当系统的写操作压力不大的情况下,所有主机都可以承担负载均衡。
一个dataHost元素,表明进行了数据同步的一组数据库,DBA需要保证这一组数据库服务器是进行了数据同步复制的。writeHost相当于Master DB Server,而旗下的readHost则是与从数据库同步的Slave DB Server。当dataHost配置了多个writeHost的时候,任何一个writeHost宕机,Mycat 都会自动检测出来,并尝试切换到下一个可用的writeHost。
MyCAT支持高可用性的企业级特性,根据您的应用特性,可以配置如下几种策略:
- 后端数据库配置为一主多从,并开启读写分离机制。
- 后端数据库配置为双主双从(多从),并开启读写分离机制
- 后端数据库配置为多主多从,并开启读写分离机制
后面两种配置,具有更高的系统可用性,当其中一个写节点(主节点)失败后,Mycat会侦测出来(心跳机制)并自动切换到下一个写节点,MyCAT在任何时候,只会往一个写节点写数据。
<!-- 定义MyCat的逻辑库 -->
<schema name="pcx_schema" checkSQLschema="false" sqlMaxLimit="10000" dataNode="pcxNode"></schema>
<!-- 定义MyCat的数据节点 -->
<dataNode name="pcxNode" dataHost="localhost1" database="pcx" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100" tempReadHostAvailable="1"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="172.30.2.58:3306" user="root" password="root"> <!-- can have multi read hosts --> <readHost host="hostS1" url="172.30.2.60:3306" user="root" password="root" /> </writeHost> <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> --> </dataHost>
高可用配置
lvs+keepalived