使用 Vmware 11. 创建虚拟机
vm 机器的操作系统是CentOS 6.5
vm的具体参数如下:
注意修改虚拟机的时间:time zone
创建VM后先安装jdk 1.8
wget --no-check-certificate --no-COOKIE --header "COOKIE: oraclelicense=accept-securebackup-COOKIE;" http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm
之后 安装
rpm -ivh jdk-8u45-linux-x64.rpm
安装完毕后 java -version 检验安装
之后再这个虚拟机上安装mysql.(参考mysql on centOS, 和mysql 主从配置)
tar -xzvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
之后下载 mycat server for linux.
将mycat 放入 /urs/local/mycat 目录下
创建系统用户和组
groupadd mycat
adduser -r -g mycat mycat
chown -R mycat.mycat /usr/local/mycat //修改mycat目录所属mycat用户
vi /etc/profile 加入:
MYCAT_HOME=/usr/local/mycat
执行source /etc/profile命令,使环境变量生效
开放防火墙端口
添加需要监听的端口
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
保存设置
/etc/init.d/iptables save
查看状态
/etc/init.d/iptables status
配置环境变量:
cd /usr/local/mycat/
vim /usr/local/mycat/.bash_profile
输入:
export MYCAT_HOME=/usr/local/mycat
PATH=$PATH:$MYCAT_HOME/bin
之后 生效
source .bash_profile
验证配置:
启动mycat: /usr/local/mycat/bin/mycat start
查看mycat 是否正常开启 命令:
ps -ef |grep mycat
说明mycat 没有正常启动。
之后到
/usr/local/mycat/logs 下查看wrapper.log
vim /usr/local/mycat/logs/wrapper.log
看到:
之后看看配置文件中需要 配置的host name.
vim /usr/local/mycat/conf/schema.xml
需要修改hosts 文件
vim /etc/hosts
127.0.0.1 hostM1 hostS2
之后再次开启 /usr/local/mycat/bin/mycat start
ps -ef |grep mycat 这次启动成功。
之后尝试连接 发现 密码不对 需要去 /usr/local/mycat/conf/server.xml
vim /usr/local/mycat/conf/server.xml
配置登录mycat mysql 的user password. (server.xml,和 schema.xml的配置会在后面进行详细的解释)
配置多个schema
修改 /usr/local/mycat/conf/server.xml
修改 /usr/local/mycat/conf/schema.xml
另一种情况:三个数据库schema配置一个schema(利用切片规则 伪切片)
启动mycat
/usr/local/mycat/bin/mycat start
停止mycat
/usr/local/mycat/bin/mycat stop
修改 schema.xml 文件 mycat/conf/schema.xml
下面的配置中的 schema 节点。
验证schema配置成功:
mysql -uroot -p123456 -h127.0.0.1 -P8066 -Dimove
mysql -uroot -p123456 -h127.0.0.1 -P8066 -Dmanage
mysql -uroot -p123456 -h127.0.0.1 -P8066 -Dimanage
说明:
-u 用户名
-p 密码
-h IP地址
-P 端口号
-D 数据库实例schema
如果全局查询三个schema(不用指明-D):
mysql -uroot -p123456 -h127.0.0.1 -P8066
mysql> select * from manage.usersinfo
mycat相关配置
1. scheme.xml配置文件
schema 等于在mycat里定义一个逻辑库
mycat可以有多个逻辑库。
schema标签的相关属性: 属性名 | 值 | 数量限制 |
dataNode | 任意String | (0..1) |
checkSQLschema | Boolean | (1) |
sqlMaxLimit | Integer | (1) |
dataNode:
该属性用于绑定逻辑库到某个具体的database上,
checkSQLschema:
如果设置为Yes,mycat 会对select * from TestDB.table1 自动改成 select * from table1 以(避免在mycat中查询数据库的时候需要ERROR 1146 (42S02):Table TestDB.table1 doesn’t exist)
sqlMaxLimit:
对于没有limit的select语句会自动对sql语句添加limit
table 标签:
定义需要拆分的表的具体细节。
属性名 | 值 | 数量限制 |
name | String | (1) |
dataNode | String | (1..*) |
rule | String | (0..1) |
ruleRequired | boolean | (0..1) |
primaryKey | String | (1) |
type | String | (0..1) |
autoIncrement | boolean | (0..1) |
subTables | String | (1) |
needAddLimit | boolean | (0..1) |
name:
等于表名。
dataNode:
这个表所属的dataNode。
primaryKey:
该逻辑表对于真实表的主键
type:
定义了表的类型:有global和普通表两种类型
dataNode 标签
dataNode:
标签就是一个独立的数据分片。
name:
与schema,table 标签中使用的dataNode相对应。
dataHost:
这个dataNode对应数据库的host,
dataHost 标签
定义了具体的数据库实例、读写分离配置和心跳语句。
属性名 | 值 | 数量限制 |
name | String | (1) |
maxCon | Integer | (1) |
minCon | Integer | (1) |
balance | Integer | (1) |
writeType | Integer | (1) |
dbType | String | (1) |
dbDriver | String | (1) |
name:
datahost 的唯一标示,在其他标签中需要dataHost属性的时候便使用这个属性做引用。
maxCon:
连接池的最大连接数。
minCon:
连接池的最小连接数。用了初始化连接池
balance:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
2. balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
3. balance="2",所有读操作都随机的在writeHost、readhost上分发。
4. balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力,注意balance=3只在1.4及其以后版本有,1.3没有。
writeType:
负载均衡类型,目前的取值有3种:
1. writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
2. writeType="1",所有写操作都随机的发送到配置的writeHost,1.5以后废弃不推荐。switchType属性
- -1 表示不自动切换
- 1 默认值,自动切换
- 2 基于MySQL主从同步的状态决定是否切换
dbType: 使用数据库的类型,支持二进制的mysql协议,还有其他JDBC连接的数据库。如:
mongodb, oracle, spark, sqlserver等。
dbDriver:
指定连接后端数据库使用的Driver,目前可选的值有native和JDBC。使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb。其他类型的数据库则需要使用JDBC驱动来支持。
从1.6版本开始支持postgresql的native原始协议。
如果使用JDBC的话需要将符合JDBC 4标准的驱动JAR包放到MYCAT\lib目录下,并检查驱动JAR包中包括如下目录结构的文件:META-INF\services\java.sql.Driver。在这个文件内写上具体的Driver类名,例如:com.mysql.jdbc.Driver。
switchType:
-1 表示不自动切换
1 默认值,自动切换
2 基于MySQL主从同步的状态决定是否切换
心跳语句为 show slave status
3 基于MySQL galary cluster的切换机制(适合集群)(1.4.1)
心跳语句为 show status like ‘wsrep%’.
heartbeat标签
用于指明和后端数据库进行心跳检查的语句。例如:mysql select user(), oracle 使用select 1 from dual.
writeHost 标签、readHost标签
这两个标签都是用于配置mysql实例。每个标签都可以指定一个后端的数据库。
writeHost指定写实例、readHost指定读实例。
一个dataHost内可以有多个writeHost、readHost标签。
属性名 | 值 | 数量限制 |
host | String | (1) |
url | String | (1) |
password | String | (1) |
user | String | (1) |
weight | String | (0-1) |
usingDecrypt | String | (0-1) |
host:
用于标示不同实例。
url:
如果是native的dbDriver 可以配置为 address:port。用JDBC或者其他dbDriver,则需要特殊指定。如:jdbc:mysql://localhost:3306/
password:
实际数据库的登录密码。
user:
实际数据库的用户
weight:
权重 配置在readhost 中作为读节点的权重(1.4以后)
usingDecrypt:
是否对密码加密默认0 否 如需要开启配置1,同时使用加密程序对密码加密,加密命令为:
执行mycat jar 程序(1.4.1以后):
java -cp Mycat-server-1.4.1-dev.jar org.opencloudb.util.DecryptUtil 1:host:user:password
Mycat-server-1.4.1-dev.jar 为mycat download 下载目录的jar
1:host:user:password 中 1 为db端加密标志,host为dataHost 的host 名称
2. server.xml 配置文件
这里面包含所有mycat 的配置信息。
user标签
这个标签用于定义登录mycat的用户和权限。
对于mysql版本5.1以后的版本,可以通过以下方式启动日志记录。能够记录下包括应用程序执行的sql语句。
MariaDB [(none)]> SET GLOBAL log_output = 'TABLE';
Query OK, 0 rows affected (0.02 sec)
MariaDB [(none)]> SET GLOBAL general_log = 'ON';
Query OK, 0 rows affected (0.00 sec)
show databases;
use mysql
select * from general_log order by event_time desc limit 50;
关闭命令: service iptables stop
永久关闭防火墙:chkconfig iptables off
为了可以查看读写分离的效果去 mycat 修改log4j的logger level 从 info改成 debug
备选方案:
Atlas: 下载地址:
https://github.com/Qihoo360/Atlas/releases
sudo rpm -i Atlas-XX.el6.x86_64.rpm
修改配置文件:
/usr/local/mysql-proxy/conf/test.cnf
4. 配置例子
[mysql-proxy]
#必须 ,管理端口使用的用户名
admin-username = user
#必须 ,管理端口使用的密码
admin-password = pwd
#必须 ,主数据库的地址:
proxy-backend-addresses = 192.168.0.12:3306
# 非必须 ,从数据库的地址:
# The number behind '@'represents the weight used by load balance for reading,
# the default weight is 1. If you want the master backend also can process the read requests,
# add its ip:port to this configuration option.
proxy-read-only-backend-addresses = 192.168.0.13:3306@2
# (必须) 设置用了登录主、从数据库的用户名和密码
# 密码不是明文 需要使用 /usr/loca/mysql-proxy/bin/encrypt. 进行加密。
# For example, the username is: myuser, and the password is:mypwd (encrypted ciphertext is:HJBoxfRsjeI=).
pwds = myuser:HJBoxfRsjeI=,myuser2:RePBqJ+5gI4=
# (必须) 如果是true , atlas 就用daemon模式启动.
daemon = true
# (必须) Atlas will start two processes when the value set true,
# one is monitor process, another is the work process. The monitor process will restart the work process
# automatically when the work process crash unexpectedly.
# If the value set false, Atlas will only start the work process.
keepalive = true
# (必须,按照实际情况进行配置) The count of work threads in work process.
# set the value equal to twice of cpu cores
event-threads = 4
# (必须, 使用默认值就可以) Log level: message, warning, critical, error, debug
log-level = message
# (必须, 使用默认值就可以) Log file path
log-path = /usr/local/mysql-proxy/log
# (必须) sql 日志的配置.
# ON : log the sql to the log file with buffer.
# OFF : not log the sql.
# REALTIME : log the sql to the log file without buffer.
sql-log = REALTIME
# (必须, 按照实际情况进行配置) 日志里慢速sql的设置.
# 当设置了这个参数的时候日志里只显示运行时间超过设置的sql.
# 否则会显示所有sql
#sql-log-slow = 10
# (必须, 按照实际情况进行配置) 关闭和客户端的连接,
# 在设置的时间“wait-timeout”之后
wait-timeout = 10
# (必须, 使用默认值就可以) Atlas的端口
proxy-address = 0.0.0.0:1234
# (必须, 使用默认值就可以) Atlas 管理端口
admin-address = 0.0.0.0:2345
# (非必须, 按照实际情况进行配置) Shard table setting.
# In this case, person is the database name, mt is the table name, id is the shard key,
# the shard table count is 3,and you should create table mt_0, mt_1, mt_2 in mysql manually.
# If you have more shard table,you can set them and separated by commas.
#tables = person.mt.id.3
# (非必须,按照实际情况进行配置)字符集,
# 如果不设置 字符集为:latin1.
charset = utf8
# (非必须) 允许连接Atlas 的客户端地址
# 如果没有就默认允许所有的IP访问
#client-ips = 127.0.0.1, 192.168.1
# (非必须,不要设置这个参数) 如果你使用了client-ips 设置,
#并且客户端是通过LVS 连接Atlas的,
#那你才需要设置lvs-ips, 把LVS的真实IP放在这里.
#lvs-ips = 192.168.1.1
Tips:
修改完配置文件后,运行下面的命令开启 atlas:
/usr/local/mysql-proxy/bin/mysql-proxyd test start
使用下面的命令登录atlas, 然后可以像使用MySQL那样进行 sql 查询
mysql -h127.0.0.1 -umyuser -pmypwd -P1234;
使用下面的命令登录atlas管理
mysql -h127.0.0.1 -uuser -ppwd -P2345;
管理接口支持的命令可以通过下面的sql 查询
select * from help;