zoukankan      html  css  js  c++  java
  • mysql 多主

    原理:多个msyql/mariadb之间可以实时同步,任意节点的操作可以立即同步到其他节点,底层采用galera插件同步,类似rsync,上层mysql相对于galera是透明的,可以实现多节点同时读写(无法实现读写分离)。

    NOTE:普通的msyql/mariadb无法集成galera,要想使用galera必须编译msyql/mariadb让其拥有调用galera 的能力,或者可以直接下载支持galera的mysql/mariadb。

    环境:

    1.采用三节点

       节点一:192.168.85.136

       节点二:192.168.85.137

       节点三:192.168.85.138

    2.系统平台:

    Red Hat Enterprise Linux Server release 6.7 (Santiago)

    3.关闭防火墙(所有节点执行)

    /etc/rc.d/init.d/iptables stop

    setenforce 0

    4.设置galera.repo

    http://releases.galeracluster.com//mysql-wsrep-5.5/redhat/6/x86_64/      #mysql-server软件包
    http://releases.galeracluster.com//galera-3/redhat/6/x86_64/                   #galera组件

    将上面地址加入yum repo

    5.查看libgalera_smm.so路径(mysql 会调用此模块像其他节点同步数据)

    rpm -ql galera-3-25.3.25-2.el6.x86_64 | grep smm.so

     /usr/lib64/galera-3/libgalera_smm.so

    6.配置my.cnf

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    
    wsrep_node_name=node1
    wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
    wsrep_sst_method=rsync
    port=3306
    user=mysql
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    innodb_locks_unsafe_for_binlog=1
    innodb_flush_log_at_trx_commit=0
    innodb_doublewrite=0
    innodb_file_per_table=1
    binlog_format=ROW
    log-bin=mysql-bin
    server-id=101
    relay-log=mysql-relay-bin
    log-slave-updates=1
    symbolic-links=0
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

    三个节点全部同步此配置文件,需注意:

    wsrep_node_name=node1     #配置成节点node名称
    wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so    #就是刚才我们查出的模块路径


    7.启动mysql:
    node1:service mysql start --wsrep_cluster_address=gcomm://
    node2:
    service mysql start --wsrep_cluster_address=gcomm://192.168.85.136
    node3:service mysql start --wsrep_cluster_address=gcomm://192.168.85.137

    8.验证:
    在node1上创建数据库:

    
    

    在其余node查看:

    node2:

    node3:

    接下来可以将集群信息写入到my.cnf
    在每个节点中my.cnf 文件mysqld段中加入:
    wsrep_cluster_address="gcomm://192.168.85.136,192.168.85.137,192.168.85.138"

    ################################################################################
    排错:
      启动mysql出现without updating PID file (/var/lib/mysql/node1.pid):
    解决:
      注释my.cnf中
    wsrep_cluster_address="gcomm://192.168.85.136,192.168.85.137,192.168.85.138"
    启动第一个node:
      /etc/rc.d/init.d/mysql start --wsrep_cluster_address=gcomm://
    启动第二个node:
    /etc/rc.d/init.d/mysql start --wsrep_cluster_address=gcomm://192.168.85.136
    启动第三个node:
      /etc/rc.d/init.d/mysql start --wsrep_cluster_address=gcomm://192.168.85.136
    全部启动完成后将
    wsrep_cluster_address="gcomm://192.168.85.136,192.168.85.137,192.168.85.138" 加入到每个节点中

    NOTE:导致上述问题的原因未知,也未去深入研究,只要三个节点不同时启动就不会有问题,如果三个节点同时启动就会出现上述问题(重启三节点任意一个节点不会出现任何问题)。
     
  • 相关阅读:
    pdf文件怎么转换成word文档
    数据库的发展历程
    数据库的三级模式
    数据库概述
    时间序列的自回归模型—从线性代数的角度来看
    数据清洗
    sql commit的三种方式
    数据库标准语言SQL((Structured Query Language)
    正则化推导转载
    leetcode刷题
  • 原文地址:https://www.cnblogs.com/dufeixiang/p/10616895.html
Copyright © 2011-2022 走看看