本文档以mysql5.6.17-1 rhel版本为例,介绍mysql一机多实例,以两台机器各两个实例,实现机器间的mysql实例主主复制功能。并将4个mysql实例归入到cobar集群,实现mysql的分布式部署。部署结构图以下:php
一. Mysql RPM包多实例安装以及双主复制配置java
1. 检测是否有历史版本存在,命令为:rpm –qa|grep –iE mysql;node
2. 卸载历史版本,命令为:rpm -e –nodeps 包名。包名为步骤一中所查询的结果;mysql
3. 删除历史版本的文件和库,查找命令为:find / -name mysql,而后利用rm –rf “路径”来删除;linux
4. 删除配置文件,my.cnf通常存在于/etc/my.conf下面或者/usr/bin下面,须要手动删除。git
5. Mysql RPM包5.6之后会自动创建mysql用户组与用户,安装前能够卸载到原有的mysql用户,命令:userdel –rf mysql;github
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。sql
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库,用户创建的其它表将被部署到该实例中,其没有设置散列算法,仅作主从备份。
附件: