zoukankan      html  css  js  c++  java
  • galera(多主架构)

    单点故障解决方案:
    主主架构:配置2台主机
    互为主备,互相监控对方二进制日志文件进行同步
    同步:效率低,安全性高,无延迟
    note:当两个sql语句发生冲突的时候主主架构有可能出现数据不一致的现象;
    MHA(master hi avalible)
    HMA可以有多个配置文件,一个配置文件监控一个主从架构

    配置:
    yum配置
    [mariadb]
    name=MariaDB
    baseurl=http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/
    gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
    gpgcheck=1

     

     mariadb galera集群(多主)
    galera集群多用于关键性业务,因为galera集群为了数据的一致性,采用的是同步的机制,这就使galera牺牲了一部分性能来换取数据一致性。

    实战Mariadb10.3(10.3自带galera软件) galera Cluster集群架构
    Mariadb galera Cluster安装:
    操作系统:Centos7.3版本
    集群数量:3个节点
    主机信息:
    192.168.126.8 node1 selinux=disabled firewalld关闭
    192.168.126.7 node2 selinux=disabled firewalld关闭
    192.168.126.4 node3 selinux=disabled firewalld关闭
    搭建步骤
    1.主机之间互相解析:三台节点都要执行
    vim /etc/hosts
    192.168.126.8 node1
    192.168.126.7 node2
    192.168.126.4 node3

    第一步:下载数据库(三台主机都下载)
    ─root@zxw7 ~
    ╰─➤ yum install mariadb mariadb-server -y
    停止所有数据库
    第二步:配置
    [root@zxw8 ~]# vim /etc/my.cnf.d/server.cnf
    [galera]
    # Mandatory settings
    wsrep_on=ON
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address="gcomm://192.168.126.8,192.168.126.7,192.168.126.4"
    binlog_format=row
    #wsrep_node_address=192.168.126.8
    default_storage_engine=InnoDB
    wsrep_node_name=node1 (node2,node3与主机名无关)

    参数介绍
    wsrep_on=ON
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so #galera的库文件的地址
    wsrep_cluster_address="gcomm://192.168.153.142,192.168.153.143,192.168.153.144" #各节点的ip
    wsrep_node_name=node1         #节点主机名
    wsrep_node_address=192.168.153.142 #节点ip
    binlog_format=row #二进制日志设置为行模式
    default_storage_engine=InnoDB    #使用的默认引擎
    innodb_autoinc_lock_mode=2 #性能最好
    wsrep_slave_threads=1 #并行复制线程数

    第三步:初始化其中一台数据库(192.168.126.8)
    [root@zxw8 ~]# mysqld_safe --wsrep_cluster_address=gcomm://192.168.126.8,192.168.126.7,192.168.126.4
    190710 07:10:42 mysqld_safe Logging to '/var/lib/mysql/zxw8.err'.
    190710 07:10:42 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

    [root@zxw8 ~]# galera_new_cluster

    第四步:编辑配置文件(192.168.126.7,192.168.126.4)
    配置文件192.168.126.7
    wsrep_on=ON
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address="gcomm://192.168.126.8,192.168.126.7,192.168.126.4"
    binlog_format=row
    wsrep_node_name=node2

    配置文件192.168.126.4
    wsrep_on=ON
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address="gcomm://192.168.126.8,192.168.126.7,192.168.126.4"
    binlog_format=row
    wsrep_node_name=node3

    启动数据库

    ╭─root@zxw7 ~
    ╰─➤ service mariadb restart
    查看端口
    [root@zxw8 ~]# ss -tnl
    LISTEN 0 128 *:4567 *:*

    第五步:查看状态(192.168126.8。。三台都可以看)

    show status like '%wsrep%';

    关键参数:
    wsrep_cluster_size | 3 | ##集群成员
    wsrep_cluster_status | Primary | ##主服务器
    wsrep_connected | ON | ##当前是否连接中
    wsrep_incoming_addresses | 192.168.126.8:3306,192.168.126.7:3306,192.168.126.4:3306 | ##连接中的数据
    wsrep_ready | ON | ##插件是否应用中

     

    主节点配置文件server.cnf
    vim /etc/my.cnf.d/server.cnf
    [galera]
    wsrep_on=ON 
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so     #galera的库文件的地址
    wsrep_cluster_address="gcomm://192.168.153.142,192.168.153.143,192.168.153.144"   #各节点的ip
    wsrep_node_name=node1         #节点主机名  
    wsrep_node_address=192.168.153.142 #节点ip
    binlog_format=row            #二进制日志设置为行模式
    default_storage_engine=InnoDB    #使用的默认引擎
    innodb_autoinc_lock_mode=2      #性能最好
    wsrep_slave_threads=1              #并行复制线程数
    innodb_flush_log_at_trx_commit=0   #0.log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。
                         #1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。
                          #2:每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作
    innodb_buffer_pool_size=120M       #设置缓存池大小
    wsrep_sst_method=rsync             #远程同步
    wsrep_causal_reads=ON         #避免各个节点的数据不一致,这种情况需要等待全同步复制
    将此文件复制到mariadb-2、mariadb-3,注意要把 wsrep_node_name 和 wsrep_node_address 改成相应节点的 hostname 和 ip。
  • 相关阅读:
    ORACLE数据库找回用户密码
    PO、POJO、BO、DTO、VO之间的区别(转)
    Http报头Accept与Content-Type的区别
    java.lang.IllegalStateException: getWriter() has already been called for this response
    利用策略模式实现了同一接口的多个Servicel实现类,如何同时注入Controller
    java.util.Stack类简介
    java为什么要重写hashCode和equals方法?
    PowerDesigner15连接Oracle数据库并导出Oracle的表结构
    解决ODBC连接Oracle数据库报Unable to connect SQLState=08004问题
    IIS 返回 405
  • 原文地址:https://www.cnblogs.com/itzhao/p/11294048.html
Copyright © 2011-2022 走看看