本文档以mysql5.6.17-1 rhel版本为例,介绍mysql一机多实例,以两台机器各两个实例,实现机器间的mysql实例主主复制功能。并将4个mysql实例纳入到cobar集群,实现mysql的分布式部署。部署结构图如下:
一. Mysql RPM包多实例安装以及双主复制配置
- 1. 检测是否有历史版本存在,命令为:rpm –qa|grep –iE mysql;
- 2. 卸载历史版本,命令为:rpm -e –nodeps 包名。包名为步骤一中所查询的结果;
- 3. 删除历史版本的文件和库,查找命令为:find / -name mysql,然后利用rm –rf “路径”来删除;
- 4. 删除配置文件,my.cnf一般存在于/etc/my.conf下面或者/usr/bin下面,需要手动删除。
- 5. Mysql RPM包5.6以后会自动建立mysql用户组与用户,安装前可以卸载到原有的mysql用户,命令:userdel –rf mysql;
- 6. Mysql基本功能仅需要安装 MySQL-server-community.*.rpm和MySQL-client-community.*.rpm,以root用户登录后, 执行rpm –ivh “MySQL-*.rmp”完成mysql客户端与服务端的安装。安装完成后,可以看到在系统目录/var/lib/mysql下面,生成了mysql系统默认的数据库信息;在/usr/bin下面为mysql服务于客户端程序;/usr/lib64/mysql为mysql的插件和so程序;/usr/share/mysql为数据库的示例配置等相关信息。
- 7. Mysql一机多实例及主主复制配置,为在一台机器上使用一个mysqld管理多份实例,我们需要做更多的操作。在mysql安装完成后,rpm默认在系统下建立了mysql用户以及mysql用户组,为便于管理数据,我们在系统的/home目录下建立mysql用户目录,并授权该目录的所有者为mysql:mysql。
- 1) 无损拷贝两份mysql数据库目录到/home/mysql下,具体的命令为cp –rp /var/lib/mysql /home/mysql/mysql3006、cp –rp /var/lib/mysql /home/mysql/mysql3007。此时我们可以删除/var/lib/mysql目录,从而将数据库的数据目录完全迁移到/home/mysql下。
- 2) 构建启动配置文件,运行mysqld_multi –example >> /usr/my-multi.cnf可以生成mysql多实例启动的模板配置信息,修改[mysqld_multi],配置user和password项,这两个可以配置任意的用户名和密码,后续当我们初次启动各实例后,使用GRANT SHUTDOWN ON *.* TO user@localhost IDENTIFIED BY ‘password‘来建立刚刚配置的用户。然后我们修改配置中的各个[mysqld*]组,*为一个数字,也就是我们的mysql实例的唯一标号,从1开始。各组中需要配置mysql实例的启动socket文件、端口号、pid文件、数据文件(也就是我们上一步所拷贝的数据目录)、数据库启动用户、server-id(主主模式中的身份标识)、log-bin(启用bin log日志)、主主复制时数据库的过滤规则(主要配置binlog-ignore-db和binlog-do-db)以及复制过滤规则(主要使用replication-wild-ignore-table)。有多少个实例就配置多少个mysqld组。
- 3) 启动mysql的多个实例,运行mysqld_multi --defaults-extra-file=/usr/my-multi.cnf --user=mysql start 1-n,即可以启动mysql标号为1到n的实例。
- 4) 连接指定的mysql实例,运行mysql –uroot –p –P端口 –Ssocket文件(mysql –uroot –p –P3306 –S/temp/mysql.sock1),然后输入root默认密码,该密码存放在文件/root/.mysql_secret中。运行set password=password(“ password”)修改mysql root用户密码;运行GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY ‘password‘建立步骤2)中所要求的管理用户;运行GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘user‘@‘192.168.1.10‘ IDENTIFIED BY ‘password‘建立主主复制管理用户;如果有需要,还可以建立供外部访问的其它用户,并设置对应的管理权限,或者开放root用户的部分外部访问权限。
- 5) 关闭数据库多实例,使用命令mysqld_multi --defaults-extra-file=/usr/my-multi.cnf --user=mysql stop 1-n。如果没有在步骤4)中正确的建立步骤2)配置文件所要求的用户,则无法实现数据库多个实例的关闭。
- 6) 建立实例间的双主复制,开启各机器上的多个mysql数据服务,分别连接个实例,运行show master status命令,可以看到数据库所使用的bin-long日志文件名称和偏移量。运行stop slave停止从库服务,然后使用CHANGE MASTER TO MASTER_HOST=‘<master‘s IP>‘, MASTER_USER=‘<slave user>‘, MASTER_PASSWORD=‘<slave password>‘, MASTER_LOG_FILE=‘<master‘s log file name>‘, MASTER_LOG_POS=<master‘s log file position>指定当前实例的主库,由于是主主模式,所以需要在所有的库上均指定的主库。一般情况下,我们推荐在一台机器上启动两个mysql实例,两台机器间两个实例交叉互为对方的备库。当完成所有实例的上述操作后,运行start slave启动从属服务,完成数据库实例见的双主复制。使用show salve status可以查看从库的运行情况。如果看到Slave_IO_Running和Slave_SQL_Running均为yes则证明配置成功。
实际环境中,启动单机的mysql多实例,可以使用/home/mysql/startup.sh启动,关闭则使用/home/mysql/shutdown.sh实现。
二. Cobra集群部署
cobar为淘宝开源的一个mysql分布式框架,其通过简单的配置实现了mysql的分表分库。其主要的配置包括schema.xml、server.xml、rule.xml,下面我们将以双机双实例来介绍cobar的分布式集群配置。
首先我们需要下载cobar的最新版本,可以到github上下载,下载后需要将cobar源码编译并打包成cobar-server-version.jar,并添加到lib目录下(如果是windows系统,需要查看下载包中bin目录下startup.bat中的版本号,linux可以自行指定版本号),至此完成了cobar主程序的制作。
Jre的安装,cobar是一个java程序,因此需要jre的支持,其需要java、jps等命令的支持。我们以jre1.7.0_60的rpm包作为源执行安装,执行命令rpm –ivh jre1.7.0_60.x64.rpm。完成安装后需要在/etc/profile中添加JAVA_HOME环境变量,使用source /etc/profile使环境变量立即生效。
Cobra的配置,我们默认部署的双机双实例,为保证数据在扩容后的可迁移性,cobar建议在建立集群的初期在每个mysql实例上建立多份数据库,我们默认建立了16个(一般根据规模推荐建立32个或者64个),如果后续扩容,则仅需要将一个mysql实例的一半的库移动到另一台主机的mysql实例中,无需琐碎的数据迁移。所有的数据库使用同样的帐号和密码以及数据库前缀,这样可以方便的在cobar的schema.xml中配置数据源(使用$m-n的模式)。然后通过数据源配置dataNode,以dataNode来配置schema结构。详细的配置说明见附件
启动cobar框架,使用cobar目录bin下的startup.sh可以开启cobar,用netstat –an可以查看cobar的端口是否开启(默认为8066与9066),若开启,则证明开启成功,通过8066则可以访问mysql集群。实际环境中,cobar提供的外部访问用户为root,密码为r#dcenter9(所有mysql实例外部的访问用户都设置为该用户与密码)。默认提供的数据库实例为dbtest,提供的示例表sample,通过sample表的ID字段以hash算法散列到16个不同的mysql库中。集群提供了一个common库,用户建立的其它表将被部署到该实例中,其没有设置散列算法,仅做主从备份。
附件: