zoukankan      html  css  js  c++  java
  • Linux安装Mycat1.6.7.4并实现Mysql数据库读写分离简单配置

    1. Mycat简介

    • 一个彻底开源的,面向企业应用开发的大数据库集群
    • 支持事务、ACID、可以替代MySQL的加强版数据库
    • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
    • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
    • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
    • 一个新颖的数据库中间件产品
      官网:http://www.mycat.org.cn/

    2. Mycat优势

      基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到Mycat的基因中,使Mycat在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
      Mycat背后有一支强大的技术团队,其参与者都是5年以上软件工程师、架构师、DBA等,优秀的技术团队保证了Mycat的产品质量。
      Mycat并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。

    3. 前期准备

    # yum源安装
    yum search jdk
    
    yum -y install java-1.8.0-openjdk.x86_64
    
    # 查看jsk版本
    java -version
    

    4. 安装Mycat

    # 进入安装包所在目录
    cd /opt
    
    # 解压
    tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
    
    # 改名(可忽略)
    mv mycat/ mycat-1.6.7.4
    
    # 移动到/usr/local目录
    mv mycat-1.6.7.4/ /usr/local/
    

    5. 配置(一主一从)

    # 进入配置文件目录,并查看文件
    cd /usr/local/mycat-1.6.7.4/conf
    
    ls
    
    # 修改server.xml
    vi server.xml
    
    # 修改底部管理员用户和只读用户信息及密码,配置schemas
    <user name="root" defaultAccount="true">
        <property name="password">123456</property>
        <property name="schemas">TESTDB</property>
        <property name="defaultSchema">TESTDB</property>
    </user>
    
    <user name="user">
        <property name="password">user</property>
        <property name="schemas">TESTDB</property>
        <property name="readOnly">true</property>
        <property name="defaultSchema">TESTDB</property>
    </user>
    
    # 退出并保存
    :wq
    
    # 修改schema.xml
    vi schema.xml
    
    # 替换为以下内容
    # 其中192.168.133.129为写主机(主数据库)IP,192.168.133.130为读主机(从数据库)IP。
    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
    
    	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    	</schema>
    	<dataNode name="dn1" dataHost="host1" database="test" />
    	<dataHost name="host1" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
    		<heartbeat>select user()</heartbeat>
    		<writeHost host="hostM1" url="192.168.133.129:3306" user="root" password="password">
    			<readHost host="hostS1" url="192.168.133.130:3306" user="root" password="password" />
    		</writeHost>
    	</dataHost>
     
    </mycat:schema>
    
    # 退出并保存
    :wq
    

      dataHost节点中的balance(负载均衡类型)属性值共四种情况:

    • balance="0"
        不开启读写分离机制,所有读操作都发送到当前可用的writeHost上;
    • balance="1"
        全部的readHost与stand by writeHost参与select 语句的负载均衡,简单的说,当双主双从
      模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与 select语句的负载均衡;
    • balance="2"
        所有读操作都随机的在writeHost、readhost上分发;
    • balance="3"
        所有读请求随机的分发到readhost 执行,writerHost不负担读压力。

    6. 启动并测试(一主一从)

    # 启动
    cd /usr/local/mycat-1.6.7.4/bin/
    ./mycat start
    
    # 查看启动状态
    ./mycat status
    
    # 关闭防火墙
    # 查看防火墙状态
    systemctl status firewalld
    
    # 关闭防火墙
    systemctl stop firewalld
    
    # 使用工具连接
    # IP:192.168.133.132
    # 端口:8066
    # 用户名:root
    # 密码:123456
    
    # 创建测试表
    create table t_data(`id`int not null primary key auto_increment, `value` varchar(255));
    
    # 插入一条记录
    insert into t_data(`value`) values('C3Stones');
    
    # 查询
    select * from t_data;
    
    # 模拟主从数据库不一致情况,验证数据库读写分离
    # 查询主从数据库所在的服务器主机名称是否一致
    hostname
    
    # 若一致,可修改为不同的主机名
    # 分别在不同的主机上执行
    vi /etc/hostname
    
    # 修改为不同的名称,并保存
    # 例如:Mysql01、Mysql02
    
    # 修改完重启
    reboot
    
    # 重启之后检查
    # 检查hostname
    hostname
    
    # 检查mysql服务
    mysql -uroot -p
    
    # 启动mysql
    service mysql start
    
    # 关闭防火墙
    # 查看防火墙状态
    systemctl status firewalld
    
    # 关闭防火墙
    systemctl stop firewalld
    
    # 检查从数据库同步状态
    mysql -uroot -p -h192.168.133.130 -P3306
    
    show slave statusG
    
    # 如果参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则正常
    
    # 使用Mycat插入一条记录,但使用变量,造成主从数据库不一致情况
    insert into t_data(`value`) values(@@hostname);
    
    # 查询(查询结果与上述schema.xml中dataHost节点配置的balance属性有关)
    # 上述配置值为2,即读操作在主从数据库上分发
    select * from t_data;
    

    7. 配置(双主双从)

    # 修改schema.xml
    vi schema.xml
    
    # 替换为以下内容
    # 其中192.168.133.129为写主机1(主数据库1)IP,192.168.133.130为读主机1(从数据库1)IP,192.168.133.131为写主机2(主数据库2)IP,192.168.133.132为读主机2(从数据库2)IP。
    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
    
    	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    	</schema>
    	<dataNode name="dn1" dataHost="host1" database="test" />
    	<dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100" >
    		<heartbeat>select user()</heartbeat>
    		<writeHost host="hostM1" url="192.168.133.129:3306" user="root" password="password">
    			<readHost host="hostS1" url="192.168.140.130:3306" user="root" password="password" />
    	</writeHost>
    	<writeHost host="hostM2" url="192.168.140.131:3306" user="root" password="password">
    		<readHost host="hostS2" url="192.168.140.132:3306" user="root" password="password" />
    	</writeHost>
     
    </mycat:schema>
    

      dataHost节点中的属性值解释:

    • balance
        balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡;
    • writeType
        writeType="0" ,所有写操作发送到配置的第一个writeHost,第一个挂了切到正常的第二个writeHost;writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5版本后不推荐使用。
    • writeHost
        Mycat重新启动后以切换后的为准,即可能因为写主机异常而发送写主机变动的情况,切换记录在配置文件中:dnindex.properties。
    • switchType
        switchType="1",默认值,自动切换;switchType="-1",表示不自动切换;switchType="2",基于Mysql 主从同步的状态决定是否切换。

    8. 启动并测试(双主双从)

    # 重新启动
    cd /usr/local/mycat-1.6.7.4/bin/
    ./mycat restart
    
    # 查看启动状态
    ./mycat status
    
    # 关闭防火墙
    # 查看防火墙状态
    systemctl status firewalld
    
    # 关闭防火墙
    systemctl stop firewalld
    
    # 使用工具连接
    # IP:192.168.133.132
    # 端口:8066
    # 用户名:root
    # 密码:123456
    
    # 创建测试表
    create table t_data2(`id`int not null primary key auto_increment, `value` varchar(255));
    
    # 插入一条记录
    insert into t_data2(`value`) values('C3Stones');
    
    # 查询
    select * from t_data2;
    
    # 模拟主从数据库不一致情况,验证数据库读写分离
    # 查询主从数据库所在的服务器主机名称是否一致
    hostname
    
    # 若一致,可修改为不同的主机名
    # 分别在不同的主机上执行
    vi /etc/hostname
    
    # 修改为不同的名称,并保存
    # 例如:Mysql01、Mysql02、Mysql03、Mysql04
    
    # 修改完重启
    reboot
    
    # 重启之后检查
    # 检查hostname
    hostname
    
    # 检查mysql服务
    mysql -uroot -p
    
    # 启动mysql
    service mysql start
    
    # 关闭防火墙
    # 查看防火墙状态
    systemctl status firewalld
    
    # 关闭防火墙
    systemctl stop firewalld
    
    # 检查数据库同步状态
    mysql -uroot -p -h192.168.133.129 -P3306
    show slave statusG
    
    mysql -uroot -p -h192.168.133.130 -P3306
    show slave statusG
    
    mysql -uroot -p -h192.168.133.131 -P3306
    show slave statusG
    
    mysql -uroot -p -h192.168.133.132 -P3306
    show slave statusG
    
    # 如果参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则正常
    
    # 使用Mycat插入一条记录,但使用变量,造成主从数据库不一致情况
    insert into t_data2(`value`) values(@@hostname);
    
    # 查询(查询结果与上述schema.xml中dataHost节点配置的balance属性有关)
    # 上述配置值为1,即读操作在主数据库2、从数据库1、从数据库2数据库上分发
    select * from t_data2;
    

    9. 高可用测试(双主双从)

    # 停止主数据库1
    service mysql stop
    
    # Mycat查询
    select * from t_data2;
    
    # 再次插入数据
    insert into t_data2(`value`) values(@@hostname);
    
    # Mycat查询
    select * from t_data2;
    
    # 启动主数据库1
    service mysql start
    
    # Mycat查询
    # 读操作在主数据库1、从数据库1、从数据库2数据库上分发
    select * from t_data2;
    

      双主双从环境下,Master1、Master2互做备机,负责写的主机宕机,备机切换负责写操作,保证了数据库读写分离的高可用性。

  • 相关阅读:
    在Ubuntu11.10中安装OpenCV2.3.1的详细步骤
    基于二元语法模型的中文分词
    相似图片搜索的原理
    基于GPU的KMeans聚类算法
    Windows下Eclipse和PyDev搭建完美Python开发环境
    Ubuntu 11.10+win7双系统启动项管理及配置方法
    主题爬虫
    vue定义全局过滤器
    element elimage 放多张图片,显示大图
    element UI的form 禁止浏览器自动填充用户名或密码
  • 原文地址:https://www.cnblogs.com/cao-lei/p/13639563.html
Copyright © 2011-2022 走看看