在学习数据库中间件前,我们先抛出三个问题
1、数据库数据量不大,但并发读写操作很大,应该怎么办?
此时我们首先考虑使用缓存中间件来减轻读压力,如果不能满足则考虑数据库读写分离,此时就会引入新的问题,这会对我们的应用代码dao产生影响,如何隔离呢
2、应用数据模块很多,总的数据量很大,并发读写超过了单个数据库服务器的能力?
这时候我们可以按业务将数据库拆分为多个数据库,此时就面临如果管理多数据源的问题以及跨库联表查询等问题
3、单表数据量很大,超过了单表的存储上线,例如mysql单表数据量超过1000万,类似订单表超过这个数值怎么办?
此时可以需要按一定的条件分表,分表又会带来数据库如何存储到对应位置的问题以及查询是如何找到这些数据,分表规则怎么定等
为了解决以上问题,我们就有必要引入数据库中间件,来隔离应用代码和数据库,实现快速的读写分离,分库分表,数据库中间件有两种方式:客户端模式,在我们的应用集成数据库中间件模块,在这个模块来配置要访问的数据源,使用于中小系统;第二种服务端代理模式,应用直接像访问数据库一样访问数据库中间件,由中间件去访问对应的数据库。常用的客户端模式有sharding-jdbc、TDDL,常用的proxy则有mycat、oneproxy等,数据库中间件使用比较多的就是sharding-jdbc和mycat(因为开源),下面进入正题mycat的安装部署
为了满足最基本的读写分离和分表,我们至少要准备两台centos7服务器,mycat是java开发的,所以我们需要安装的有jdk、mysql和mycat
jdk安装
1、卸载openjdk,没有就算了,rpm -qa | grep jdk 查看jdk信息,卸载yum -y remove java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7
2、下载地址 :http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
3、解压安装包到/usr/local/ 例如: tar -zxvf jdk-8u152-linux-x64.tar.gz -C /usr/local/
4、添加环境变量,在/etc/profile文件最后加上下面配置,source /etc/profile 使配置文件生效
export JAVA_HOME=/usr/local/jdk1.8.0_152 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
mysql安装
这里使用最基础的tar包安装
1、下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz,解压安装包到/usr/local/ 例如: tar -zxvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz -C /usr/local/,建议修改解压好的包名为 mysql.5.7.27,进入 mysql.5.7.27 ,创建data文件夹mkdir data,用来存放数据库文件
2、检查 linux 是否安装了 mariadb数据库,mariadb数据库是 mysql的分支,是免费开源的和msyql会有冲突。如果安装了需要先卸载,查看是否安装yum list installed | grep mariadb 卸载,yum -y remove mariadb-libs.x86-64
3、创建用户,创建mysql用户和用户组,用来执行MYSQL的命令mysqld useradd mysql; groupadd mysql
4、使用mysql的mysqld 命令初始化数据库的基本信息。切换到mysql-5.7.27/bin目录下执行。
命令:./mysqld --initialize --user=mysql --datadir=/usr/local/mysql-5.7.27/data --basedir=/usr/local/mysql-5.7.27 参数说明: --initialize 初始化mysql,创建mysql的root, 随机生成密码。记住密码,登录msyql使用。 --user执行msyqld 命令的linux用户名 --datadir : mysql数据文件的存放位置,目录位置参照本机的设置。 --basedir : msyql安装程序的目录,目录位置参照本机的设置。 该命令执行后,会生成一个临时的mysql数据库root用户的密码,请先拷贝出来记住,后续第一次登录mysql 例如#/T3ds.jhdUM
5、启用安全功能:在服务器与客户机之间来回传输的所有数据进行加密。通过证书提供了身份验证机制,mysql命令程序,mysql_ssl_rsa_setup提供了开启数据加密功能,生成数字证书。在mysql-5.7.27/bin目录下执行命令:
./mysql_ssl_rsa_setup --datadir=/usr/local/mysql-5.7.27/data
6、mysql安装后,需要更改mysql-5.7.27整个文件夹目录权限,更改所属的用户和组,是之前创建的mysql用户。在mysql安装目录的上级(/usr/local/)位置,执行命令chown .
例如:chown -R mysql:mysql /usr/local/mysql-5.7.27/
7、创建mysql配置文件,vi /etc/my.cnf,添加如下配置
[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #跳过权限表校验 #skip-grant-tables skip-name-resolve #设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=/usr/local/mysql-5.7.27 # 设置mysql数据库的数据的存放目录 datadir=/usr/local/mysql-5.7.27/data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 表名不区分大小写 lower_case_table_names=1 max_allowed_packet=16M log-error=/var/log/mysqld.log pid-file=/usr/local/mysql-5.7.27/data/mysqld.pid
8、启动和关闭MySQL服务,mysql-5.7.18/bin目录下执行命令:./mysqld_safe &(其中& 符号表示后台启动),输入命令后按Enter,mysqld_safe程序会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它。用mysqld_safe程序来启动MySQL服务器的做法在unix/linux系统上很常见,确认msyql是否启动,查看进程 ,使用ps -ef | grep mysql,mysql-5.7.18/bin目录下执行:./mysqladmin -uroot -p shutdown输入密码停止mysql
9、通常我们会将mysql配置为一个服务,以方便管理,做一下操作后执行service mysqld start即可启动mysql ,service mysqld stop停止mysql
cp /usr/local/mysql-5.7.27/support-files/mysql.server /etc/init.d/mysqld vim /etc/init.d/mysqld,添加第46,47行地址 basedir=/usr/local/mysql-5.7.27 datadir=/usr/local/mysql-5.7.27/data
10、修改root密码并配置远程客户端连接,mysql启动后,登录进入mysql,mysql-5.7.18/bin目录下执行命令:./mysql-uroot -p,-u表示使用root用户登录系统,使用第8步生成的密码,-p表示使用密码登录,在mysql中修改root用户的密码:alter user 'root'@'localhost' identified by '123456';授权远程访问,在没有授权之前只能在本机访问msyql,远程授权就是让其他计算机通过网络访问mysql(这样远程客户端才能访问),grant all privileges on *.* to root@'%' identified by '123456';其中*.* 的第一个*表示所有数据库名,第二个*表示所有的数据库表;root@'%' 中的root表示用户名,%表示ip地址,%也可以指定具体的ip地址,比如root@localhost,root@192.168.10.129,更新权限信息,执行flush刷新权限: flush privileges ;执行exit退出msyql自己的客户端。
11、防火墙开放,firewall-cmd --zone=public --add-port=3306/tcp --permanent,重新加载一次firewall-cmd --reload
mycat安装
1、下载最新版的mycat:wget http://dl.mycat.io/1.6.7.1/Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz,解压到/usr/local目录下tar -zvxf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /usr/local。
2、mycat目录构成
bin 程序目录,存放了window 版本和linux 版本,除了提供封装成服务的版本之外,也提供了nowrap 的 shell 脚本命令,方便大家选择和修改
conf 目录下存放配置文件,server.xml 是Mycat 服务器参数调整和用户授权的配置文件,schema.xml 是逻辑库定义和表以及分片定义的配置文件,rule.xml 是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改,需要重启Mycat 或者通过9066 端口reload
lib 目录下主要存放mycat 依赖的一些jar
文件日志存放在logs/mycat.log 中,每天一个文件,日志的配置是在conf/log4j2.xml 中,根据自己的需要,可以调整输出级别为debug,debug 级别下,会输出更多的信息,方便排查问题
3、配置环境变量
vi /etc/profile,追加 export MYCAT_HOME=/usr/local/mycat,source /etc/profile
4、新增用户mycat(建议不要用root用户来运行mycat),useradd mycat,passwd mycat,chown -R mycat:mycat /usr/local/mycat,切换到mycat用户 su mysql
5、启动mycat,cd /usr/local/mycat/bin ./mycat start,ps -ef | grep mycat 查看是否启动成功
6、配置防火墙,在/conf/server.xml 查看配置端口和用户,默认服务端口为8066,管理端口是9066,有root用户和user用户,密码为12346和user,执行如下命令
firewall-cmd --zone=public --add-port=8066/tcp --permanent
firewall-cmd --zone=public --add-port=9066/tcp --permanent
firewall-cmd --reload,开发环境中也可以直接关闭防火墙
7、在本机可以通过数据库客户端连接工具例如navicat,输入端口8066,数据库所在ip,用户密码测试配置是否有效。