十一、代理集群
1.代理简介
名词
DB Proxy,数据库中间件
功能
读写分离 M-S-S M-M-S-S
负载均衡
支持数据的分片自动路由与聚合
产品
MySQL Proxy MySQL官方
MyCat 阿里巴巴
2.MyCat实战
架构
准备好域名解析
vim /etc/sysconfig/network-scripts/ifcfg-enp0s17
把BOOTROTO改成none手动,把IPADDR固定为136
:wq
systemctl restart network
vim /etc/hosts
192.168.56.132 master1
192.168.56.133 master2
192.168.56.134 slave1
192.168.56.135 slave2 把域名统一
在ssh里打开同步所有会话
vim /etc/hosts
192.168.56.136 mycat
:wq
ping mycat
3.案例1
mycat服务器
配置Java环境
解压
tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/
ls /usr/local/
建立软链接
ln -s /usr/local/jdk1.8.0_91/ /usr/local/java
设置JAVA变量,便于JAVA调用
vim /etc/profile
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH 先声明JAVA的路径,声明默认路径,声明前两个变量为全局变量
:wq
刷新profile文件
source /etc/profile
检验
echo $JAVA_HOME
echo $PATH
java -version 调出java的工作版本,证明java环境配置成功
配置Mycat
下载mycat
Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz
解压
tar xf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local
ls /usr/local/
配置mycat前端
vim /usr/local/mycat/conf/server.xml
注释掉多余的用户
注释前
注释后
启动mycat管理员
管理员账户、密码、为后方数据库群定义的统称
:wq
配置mycat后端
备份schema.xml架构文件
cp /usr/local/mycat/conf/schema.xml .
vim /usr/local/mycat/schema.xml
解释:
<schema name="tianyun" mycat维护的集群名称
checkSQLchema="false" 关闭校验库,不需要校验
sqlMaxLimit="100" 每秒钟支持最大100次访问量
dataNode="dn1"> 自己新加的,后方节点群的名称,起关联作用,承接下文
table表不需要设置,可以删掉
<dataNode name="dn1" 这里是用来统称下文的数据库的名字
dataHost="localhost1" 后方节点群的主机名称
database="tianyun"/> 数据库
<dataHost name="localhost1" 数据主机设置
maxCon="1000" 最大连接数,与访问量不一样,访问量是个体,连接数是与服务器互动的次数
minCon="10" 最小连接数
balance="1" 0是关闭读写分离功能。所有度操作都发送到单枪可用的writeHost上。
1是读写分离。所有读操作都随机的发送到readHost,写操作发送到writeHost。
writeType="0" 写属性 0,备份型,所有写的操作发送到配置的第一个writeHost,第一个瘫痪才会切到第二个writeHost,重新启动后以切换后为准,切换记录在配置文件中:dnindex.properties
dbType="mysql" 数据库类型
dbDriver="native" 数据库驱动,默认本地驱动就行了
switchType="1" 指交换类型,目前有4种,-1表示不自动切换
1默认值,表示根据延时自动切换
2表示根据Mysql主从同步的状态决定是够切换,心跳语句show slave status
slaveThreshold="100" 认为延迟的时间100毫秒
<heartbeat>select user()</heartbeat> 心跳,指用命令去检测服务器是否健康
<writeHost host="master1" 写操作的主机名
url="master1:3306" 因为已经做了域名解析,master1后面跟端口号就行了
user="mycatproxy" 不可能一直用root账号,所以新建一个账号密码使用
password="Qianfeng@123">
</writeHost>
其他主从服务器同理
:wq
配置mysql群
实现配置mycat时候创建新账户的诺言
master1
mysql -uroot -p'Qianfeng@123'
grant all on *.* to 'mycatproxy'@'192.168.56.136' identified by 'Qianfeng@123'; 授权
启动Mycat
mycat服务器
/usr/local/mycat/bin/mycat start
netstat -anpt | grep java
Mycat使用后方数据库
安装客户端
yum install -y mariadb
登录前端的管理员账号
mysql -hmycat -uroot -p123456 -P8066
show databases;
tianyun库看上去是数据库,其实是虚拟的,是给前端的人看的,不能在这里进行创库创表等操作,会在后台卡很久
master1服务器
mysql -uroot -p'Qianfeng@123'
create database tianyun;
create table tianyun.t1(id int);
mycat服务器
select * from tianyun.t1;
有反馈,证明试验成功。
案例2
配置多套集群
就是把/usr/local/mycat/schema.xml中的内容多做几套dn1、dn2、dn3。如果做到dn3的M-M-S-S模式就是要12+1台服务器