• MariaDB Galera 集群安装配置


    MariaDB Galera Cluster 介绍

    MariaDB Galera Cluster 是开源的 MariaDB同步多主机集群。它仅支持XtraDB/ InnoDB存储引擎。MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力,集群部署是必不可少的。

    主要功能:

    • 同步复制
    • 真正的multi-master,即所有节点可以同时读写数据库
    • 自动的节点成员控制,失效节点自动被清除
    • 新节点加入数据自动复制
    • 真正的并行复制,行级
    • 用户可以直接连接集群,使用感受上与MySQL完全一致

    优势:

    • 因为是多主,所以不存在Slavelag(延迟)
    • 不存在丢失事务的情况
    • 同时具有读和写的扩展能力
    • 更小的客户端延迟
    • 节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的

    技术:

    Galera集群的复制功能基于Galeralibrary实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API。

    Galera插件保证集群同步数据,保持数据的一致性,靠的就是可认证的复制,工作原理如下图: 

    当客户端发出一个commit的指令,在事务被提交之前,所有对数据库的更改都会被 write-set 收集起来,并且将write-set 纪录的内容发送给其他节点。

    write-set 将在每个节点进行认证测试,测试结果决定着节点是否应用write-set更改数据。

    如果认证测试失败,节点将丢弃 write-set ;如果认证测试成功,则事务提交。

    1 安装环境准备

    安装MariaDB集群至少需要3台服务器(如果只有两台的话需要特殊配置,请参照官方文档

    操作系统版本:centos7

    • controller1:192.168.0.194
    • controller2:192.168.0.195
    • controller3:192.168.0.196

    为了保证节点间相互通信,需要禁用防火墙设置

    在三个节点分别执行命令:

    echo  '关闭selinux、防火墙'
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    firewall-cmd --state
    sed -i '/^SELINUX=.*/c SELINUX=disabled' /etc/selinux/config
    sed -i 's/^SELINUXTYPE=.*/SELINUXTYPE=disabled/g' /etc/selinux/config
    grep --color=auto '^SELINUX' /etc/selinux/config
    setenforce 0

    2 安装 MariaDB Galera Cluster

      配置yum源, 所有节点:

    echo "#
    [mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/10.1/centos7-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1
    #">/etc/yum.repos.d/mariadb.repo

      所有节点安装:

    yum install -y mariadb mariadb-galera-server mariadb-galera-common galera rsync

     配置时间同步,所有节点执行:

    echo  '时间同步'
    [[ -f /usr/sbin/ntpdate ]] || { echo "install ntp";yum install ntp ntpdate -y &> /dev/null; } #若没NTP则安装
    /usr/sbin/ntpdate ntp6.aliyun.com 
    echo "*/3 * * * * /usr/sbin/ntpdate ntp6.aliyun.com  &> /dev/null" > /tmp/crontab
    crontab /tmp/crontab

    3 配置 MariaDB Galera Cluster

    初始化数据库服务,只在controller1进行:

    #声明数据库的密码作为临时变量供下面调用
    DBPass=123456


    #mysql_secure_installation #初始化设置密码,自动交互
    [[
    -f /usr/bin/expect ]] || { yum install expect -y; } #若没expect则安装 /usr/bin/expect << EOF set timeout 30 spawn mysql_secure_installation expect { "enter for none" { send " "; exp_continue} "Y/n" { send "Y " ; exp_continue} "password:" { send "$DBPass "; exp_continue} "new password:" { send "$DBPass "; exp_continue} "Y/n" { send "Y " ; exp_continue} eof { exit } } EOF

    关闭数据库,修改 /etc/my.cnf.d/galera.cnf

    systemctl stop mariadb

    #galera配置
    /usr/bin/cp /etc/my.cnf.d/galera.cnf{,.bak}
    egrep -v "#|^$" /etc/my.cnf.d/galera.cnf.bak >/etc/my.cnf.d/galera.cnf
    #sed -i 's/wsrep_on=1/wsrep_on=ON/' /etc/my.cnf.d/galera.cnf
    #sed -i 's/wsrep_sst_auth=root:/wsrep_sst_auth=root:'$DBPass'/' /etc/my.cnf.d/galera.cnf
     vi /etc/my.cnf.d/galera.cnf
    
    [mysqld]
    wsrep_provider = /usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address = "gcomm://controller1,controller2,controller3"
    wsrep_node_name = controller1
    wsrep_node_address=192.168.0.194
    #wsrep_provider_options="socket.ssl_key=/etc/pki/galera/galera.key; socket.ssl_cert=/etc/pki/galera/galera.crt;"

        提示:如果不用ssl的方式认证的话,请把 wsrep_provider_options 注释掉。

        将此文件复制到controller2、controller3,注意要把 wsrep_node_name 和 wsrep_node_address 改成相应节点的hostname 和 ip

    4 启动 MariaDB Galera Cluster 服务

        在controller1节点启动集群

    /usr/libexec/mysqld --wsrep-new-cluster --user=root &

        观察日志:

    tail -f /var/log/mariadb/mariadb.log

        出现“ ready for connections” 表示启动成功

        controller2节点启动

    systemctl start mariadb

      controller3节点启动

    systemctl start mariadb

    可以查看 /var/log/mariadb/mariadb.log,在日志可以看到节点均加入了集群中。

    警告⚠:--wsrep-new-cluster 这个参数只能在初始化集群使用,且只能在一个节点使用。

    5 查看集群状态

    mysql -u root -p123456 -e "show status like 'wsrep_cluster_size';"

    +--------------------+-------+
    | Variable_name | Value |
    +--------------------+-------+
    | wsrep_cluster_size | 3 |
    +--------------------+-------+

    6 验证数据同步

    controller1节点创建数据库

    mysql  -uroot  -p123456  -e  "create database galera_test"

    controlelr2 controller3节点查看

    mysql  -uroot  -proot  -e  "show databases"

    如果都有刚才新建的数据库表示同步成功

    MariaDB Galera Cluster 已经成功部署。

    7 排错

    # #排错
    # #关闭selinux、防火墙
    # tail /var/log/mariadb/mariadb.log
    # rm -f /var/lib/mysql//galera.cache
    # #关闭群集后,重启
    # #在其中一台
    # sed -i 's#seqno: -1#seqno: 1#' /var/lib/mysql/grastate.dat
    # galera_new_cluster #启动第一个节点
    # #其它节点
    # systemctl start mariadb
    
    #test
    #/usr/libexec/mysqld --wsrep-new-cluster --user=root &
    #systemctl start mariadb.service
    #设置开机启动,设置为第一个节点
    # systemctl disable mariadb.service
    # echo '#作为第一个节点启动SQL
    # /usr/bin/galera_new_cluster
    # sleep 5
    # ssh controller2 "systemctl start mariadb.service"
    # ssh controller3 "systemctl start mariadb.service"
    # sleep 3
    # systemctl restart mariadb.service
    # '>>/etc/rc.local
  • 相关阅读:
    微软一站式示例代码浏览器 v5.1 更新
    Developers’ Musthave: the new Microsoft AllInOne Code Framework Sample Browser and 3500+ samples
    栈溢出攻击 [转]
    深入浅出Java的访问者模式 [转]
    优先级反转 [转]
    latex 引用section [转]
    linux内存管理浅析 [转]
    静态,动态,强类型,弱类型 [转]
    linux硬链接与软链接 [转]
    GCC __attribute__ 详解 [转]
  • 原文地址:https://www.cnblogs.com/fang888/p/8258807.html
Copyright © 2020-2023  润新知