背景
本周研究了一下数据库中间件 MyCat ,并验证了 MyCat 单机 + MySQL 主从复制
的部署方案,本文将整理 MyCat 单机的 Schema 的几种部署方案,并以 MyCat 单机 + MySQL 主从复制的部署流程为主,详细介绍这一方案的部署过程。
环境准备
使用 MyCat 单机 + MySQL 主从,最少需要两台机器,本文使用一主一从,MyCat 单独部署,总共三个虚拟机节点。
由于连接的是无线网络,切换工作地时,会出现网络问题,先调整 VirtualBox 的虚拟机节点的 IP,保证宿主机、各节点间网络通畅。
首先,ipconfig
查看本机无限局域网信息,记住默认网关:
其次,启动 VirtualBox 实例,编辑网卡文件 ifcfg-xxx
,设置动态 IP 并将网关配置与宿主机一致:
第三,/etc/init.d/network restart
重启网卡服务,ifconfig
命令查看节点的 IP,然后再调整 SecureCRT 的连接配置,指向新的 IP。
三个虚拟机实例对应的信息如下:
作用 | 主机名称 | IP |
---|---|---|
MyCat 宿主机 | MyCat | 172.20.10.4 |
MySQL 主服务器 | hostM1 | 172.20.10.3 |
MySQL 从服务器 | hostS1 | 172.20.10.5 |
介质准备
选择 MyCat 的稳定版本 1.6.7 和 MySQL 社区版最新版本 5.7.31 ,JDK1.8,需要的安装介质:
文件名称 | 作用 | 下载地址 |
---|---|---|
jdk-8u60-linux-x64.rpm | JDK 安装包 | JDK1.8 |
mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz | MySQL 安装包 | MySQL社区版 |
Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz | MyCat 安装包 | MyCat1.6.7 |
编写安装脚本
先说说为什么要编写安装脚本?MyCat 和 MySQL 都是免安装的,解压后做一些常规的用户创建、目录授权、文件配置就可以了。虽然这些操作都不复杂,但每次部署时,手动敲命令,也很劳心劳力呀,能用程序解决的问题,绝不用亲自动手,这是程序员的一贯思维,所以编写脚本是必不可少的。
更重要的是,生产部署的时候,有自动化部署脚本,效率会高很多。
部署 MyCat + MySQL 主从环境,除了 JDK 安装外【这个以前写过】,笔者写了五个脚本:
脚本名称 | 作用 | 特点 |
---|---|---|
jdk_install.sh | 安装 JDK | 环境变量配置 |
master_install.sh | 安装 MySQL 主节点 | my.cnf 添加主节点配置 |
slave_install.sh | 安装 MySQL 从节点 | my.cnf 添加从节点配置 |
master_grant.sh | Master 授权 | 授权复制权限给从节点 |
slave_grant.sh | Slave 配置 | 设置主节点信息 |
mycat_install.sh | 安装 MyCat | 创建 MyCat 用户和组 |
以 master_grant.sh
为例,它主要是创建一个临时 SQL 脚本,然后以 MySQL 主节点的帐号执行该 SQL 操作集,脚本的参数是 MySQL 的主节点认证密码,内容为:
#!/bin/sh
######################################################################
###### put mycat directory to /home/
###### sh grant_master.sh rootPwd
######################################################################
echo 'Create user and grant master.'
#master server password of ip
mysqlrootpwd=$1
if [ "$mysqlrootpwd" = "" ]; then
echo "Error: You must tell me the password of master root."
exit 1
fi
echo "MySQL master server root password is:$mysqlrootpwd"
#create grant sql script
cat > /tmp/mysql_sec_script<<EOF create user 'replaccount'@'%' identified by 'ReplPassword'; grant replication slave on *.* to 'replaccount'@'%'; show grants for 'replaccount'; show master status \G; EOF
#print script content
cat /tmp/mysql_sec_script
echo '\n to execute grant sql.'
#use mysql command to execute grant sql
/data/mysql/bin/mysql -u root -p$mysqlrootpwd -h localhost < /tmp/mysql_sec_script
#remove temp sql script
rm -f /tmp/mysql_sec_script
脚本地址,感兴趣的小伙伴们可以点击解锁。
部署流程
脚本编写好了之后,部署过程就比较简单了,操作步骤为:
- 安装 JDK:执行 jdk_install.sh;
- 安装 MySQL 主节点:执行 master_install.sh;
- 为主节点创建复制帐号并授权复制权限:执行 master_grant.sh;
- 安装 MySQL 从节点:执行 slave_install.sh;
- 为从节点设置 Master 信息:执行 slave_grant.sh;
- 安装 MyCat:执行 mycat_install.sh;
- 根据主从节点信息,配置 MyCat 的 schema.xml 和 server.xml;
- 启动 MyCat。
后记
笔者用的是一台 8G 内存的 Dell 电脑,开启了三个虚拟机节点,没有宽带的情况下,使用手机热点搭建环境的写成此文的,过程还挺很流畅的。
4G 信号,加上热点,感觉都不用装宽带了。亲自体验了一把手机热点的网速后,终于相信了网上调侃程序员地铁站或者路边蹲着改 bug 的报道不是段子,而是真实职场不易了……
囿于篇幅太长,不利于阅读,本文先搭框架,下一篇接着介绍具体的部署过程。