• Galera_Cluster_Mysql部署


    前言

    先来了解下它的身世,Galera Cluster是Codership公司开发的一套免费开源的高可用方案
    官网为http://galeracluster.com。Galera Cluster即为安装了Galera的Mariadb集群(本文只介绍Mariadb Garela集群)
    其本身具有multi-master特性,支持多点写入
    Galera Cluster的三个(或多个)节点是对等关系,每个节点均支持写入,集群内部会保证写入数据的一致性与完整性

    下面是这个架构的一些特性:

    • 真正的多主集群,Active-Active架构;

    • 同步复制,没有复制延迟;

    • 多线程复制;

    • 没有主从切换操作,无需使用虚IP;

    • 热备份,单个节点故障期间不会影响数据库业务;

    • 支持节点自动加入,无需手动拷贝数据;

    • 支持InnoDB存储引擎;

    • 对应用程序透明,原生MySQL接口;

    • 无需做读写分离;

    • 部署使用简单。

    安装部署
    环境说明
    系统:centos7.7 galera1:192.168.191.128 galera2:192.168.191.129 galera3:192.168.191.130

    安装操作
    1)上传带有galera补丁的数据库包(下载地址,提取码:8888 )

    ##三台节点同时进行以下操作
    [root@galera1 ~]# yum -y install lrzsz vim   #工具包
    [root@galera1 ~]# mkdir galera
    [root@galera1 ~]# cd galera
    

    2)哦噢,对了要把系统默认关于数据库的一切全部卸载

    #三台节点同时进行以下操作
    [root@galera1 galera]# rpm -qa | grep mariadb
    mariadb-libs-5.5.56-2.el7.x86_64
    [root@galera1 galera]# rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps  #强制卸载
    

    3)关闭防火墙

    ##三台节点同时进行以下操作
    [root@galera1 galera]# setenforce 0;systemctl stop firewalld
    

    4)上才艺,要安装咯要安装咯!

    ##三台节点同时进行以下操作
    [root@galera1 galera]# yum -y install mysql-wsrep-client-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-common-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-devel-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-libs-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-libs-compat-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-server-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-test-5.7-5.7.31-25.23.el7.x86_64.rpm   #先安依赖
     
    [root@galera1 galera]# yum -y install galera-3-25.3.31-1.el7.x86_64.rpm mysql-wsrep-5.7-5.7.31-25.23.el7.x86_64.rpm   ##这是有galera补丁的数据库
    

    5)先启动数据库,给节点三兄弟配个集群通信账号(重点哦~)

    ##三台节点同时进行以下操作
    [root@galera1 galera]# systemctl start mysqld
    [root@galera1 galera]# systemctl status mysqld    #状态running启动成功
    [root@galera1 galera]# new=`grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'`;mysqladmin -p"$new" password "ghy@6666"    #设置数据库root的密码
    [root@galera1 galera]# mysql -uroot -pghy@6666     #登录数据库
    mysql> grant all on *.* to ghy@"%" identified by 'ghy@6666';    #授权创建数据库账户
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    mysql> flush privileges;                   ##刷新权限
    Query OK, 0 rows affected (0.00 sec)
    

    6)修改数据库配置文件,创建galera集群(这个是真的重点哦很容易出错)

    ###第一台节点先配置
    [root@galera1 galera]# vim /etc/my.cnf    #最下面添加
    server-id=1                    #三个节点id不能一样
    binlog_format=row
    default_storage_engine=InnoDB
    innodb_file_per_table=1
    innodb_autoinc_lock_mode=2
     
    wsrep_on=ON
    wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
    wsrep_cluster_name='galera'             #集群名称
    wsrep_cluster_address='gcomm://'        #第一个节点配置时暂时不加入ip,表示新创建集群的意思,一但加ip会报配置文件错误。需要在后续集群创建完成加入各个节点后在回来填写ip
    wsrep_node_name='galera1'               #集群中这个节点的名称不不能与其他节点重复
    wsrep_node_address='192.168.191.128'
    wsrep_sst_auth=ghy:"ghy@6666"
    wsrep_sst_method=rsync    #注意没有rsync需要yum下载
    [root@galera1 galera]# systemctl restart mysqld   ##重启数据库
    [root@galera1 galera]# mysql -uroot -pghy@6666
    mysql>  show status like 'wsrep_incoming%';      #galera集群创建成功目前只有一个节点
    +--------------------------+----------------------+
    | Variable_name            | Value                |
    +--------------------------+----------------------+
    | wsrep_incoming_addresses | 192.168.191.128:3306 |
    +--------------------------+----------------------+
    1 row in set (0.01 sec)
     
    ###第二台节点配置如下
    [root@galera2 galera]# vim /etc/my.cnf
    server-id=2
    binlog_format=row
    default_storage_engine=InnoDB
    innodb_file_per_table=1
    innodb_autoinc_lock_mode=2
     
    wsrep_on=ON
    wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
    wsrep_cluster_name='galera'
    wsrep_cluster_address='gcomm://192.168.191.128,192.168.191.130'  ##这里的ip要写第一台节点的ip,作用用于引导此节点加入galera集群。如果空着不写表示新创建集群
    wsrep_node_name='galera2'
    wsrep_node_address='192.168.191.129'
    wsrep_sst_auth=ghy:"ghy@6666"
    wsrep_sst_method=rsync
    [root@galera2 galera]# systemctl restart mysqld  
    [root@galera2 galera]# mysql -uroot -pghy@6666
    mysql>  show status like 'wsrep_incoming%';   ##此时galera集群中已加入此节点
    +--------------------------+-------------------------------------------+
    | Variable_name            | Value                                     |
    +--------------------------+-------------------------------------------+
    | wsrep_incoming_addresses | 192.168.191.129:3306,192.168.191.128:3306 |
    +--------------------------+-------------------------------------------+
    1 row in set (0.01 sec)
     
    ###第三台节点配置如下
    [root@galera3 galera]# vim /etc/my.cnf
    server-id=3
    binlog_format=row
    default_storage_engine=InnoDB
    innodb_file_per_table=1
    innodb_autoinc_lock_mode=2
     
    wsrep_on=ON
    wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
    wsrep_cluster_name='galera'
    wsrep_cluster_address='gcomm://192.168.191.128,192.168.191.129'  ##引导地址写前两个节点的ip
    wsrep_node_name='galera3'
    wsrep_node_address='192.168.191.130'
    wsrep_sst_auth=ghy:"ghy@6666"
    wsrep_sst_method=rsync
    [root@galera3 galera]# systemctl restart mysqld
    [root@galera3 galera]# mysql -uroot -pghy@6666
    mysql>  show status like 'wsrep_incoming%';   ##此时三台节点已加入
    +--------------------------+----------------------------------------------------------------+
    | Variable_name            | Value                                                          |
    +--------------------------+----------------------------------------------------------------+
    | wsrep_incoming_addresses | 192.168.191.129:3306,192.168.191.128:3306,192.168.191.130:3306 |
    +--------------------------+----------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> show status like '%wsrep%';
    +------------------------------+----------------------------------------------------------+
    | Variable_name                | Value                                                    |
    +------------------------------+----------------------------------------------------------+
    | wsrep_local_state_uuid       | e142ca9d-497f-11eb-845a-ee955e84fe5b                     |
    | wsrep_protocol_version       | 7                                                        |
    | wsrep_last_committed         | 47297                                                    |
    | wsrep_replicated             | 0                                                        |
    | wsrep_replicated_bytes       | 0                                                        |
    | wsrep_repl_keys              | 0                                                        |
    | wsrep_repl_keys_bytes        | 0                                                        |
    | wsrep_repl_data_bytes        | 0                                                        |
    | wsrep_repl_other_bytes       | 0                                                        |
    | wsrep_received               | 216                                                      |
    | wsrep_received_bytes         | 786352                                                   |
    | wsrep_local_commits          | 0                                                        |
    | wsrep_local_cert_failures    | 0                                                        |
    | wsrep_local_replays          | 0                                                        |
    | wsrep_local_send_queue       | 0                                                        |
    | wsrep_local_send_queue_max   | 1                                                        |
    | wsrep_local_send_queue_min   | 0                                                        |
    | wsrep_local_send_queue_avg   | 0.000000                                                 |
    | wsrep_local_recv_queue       | 0                                                        |
    | wsrep_local_recv_queue_max   | 61                                                       |
    | wsrep_local_recv_queue_min   | 0                                                        |
    | wsrep_local_recv_queue_avg   | 8.648148                                                 |
    | wsrep_local_cached_downto    | 47086                                                    |
    | wsrep_flow_control_paused_ns | 1012209                                                  |
    | wsrep_flow_control_paused    | 0.000010                                                 |
    | wsrep_flow_control_sent      | 0                                                        |
    | wsrep_flow_control_recv      | 1                                                        |
    | wsrep_cert_deps_distance     | 26.429245                                                |
    | wsrep_apply_oooe             | 0.000000                                                 |
    | wsrep_apply_oool             | 0.000000                                                 |
    | wsrep_apply_window           | 1.000000                                                 |
    | wsrep_commit_oooe            | 0.000000                                                 |
    | wsrep_commit_oool            | 0.000000                                                 |
    | wsrep_commit_window          | 1.000000                                                 |
    | wsrep_local_state            | 4                                                        |
    | wsrep_local_state_comment    | Synced                                                   |
    | wsrep_cert_index_size        | 148                                                      |
    | wsrep_causal_reads           | 0                                                        |
    | wsrep_cert_interval          | 2.580189                                                 |
    | wsrep_incoming_addresses     | vm10-11-0-131:3306,vm10-11-0-133:3306,vm10-11-0-132:3306 |
    | wsrep_evs_delayed            |                                                          |
    | wsrep_evs_evict_list         |                                                          |
    | wsrep_evs_repl_latency       | 0.000684446/0.000684446/0.000684446/0/1                  |
    | wsrep_evs_state              | OPERATIONAL                                              |
    | wsrep_gcomm_uuid             | 86abfa4d-49b8-11eb-a0d7-b7a96cc64b5d                     |
    | wsrep_cluster_conf_id        | 3                                                        |
    | wsrep_cluster_size           | 3                                                        |
    | wsrep_cluster_state_uuid     | e142ca9d-497f-11eb-845a-ee955e84fe5b                     |
    | wsrep_cluster_status         | Primary                                                  |
    | wsrep_connected              | ON                                                       |
    | wsrep_local_bf_aborts        | 0                                                        |
    | wsrep_local_index            | 2                                                        |
    | wsrep_provider_name          | Galera                                                   |
    | wsrep_provider_vendor        | Codership Oy <info@codership.com>                        |
    | wsrep_provider_version       | 3.12(r9921e73)                                           |
    | wsrep_ready                  | ON                                                       |
    +------------------------------+----------------------------------------------------------+
    56 rows in set (0.01 sec)
    
    监测状态说明 
    1. 集群完整性检查: 
    wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群. 
    wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时”分区”了.当节点之间网络连接恢复的时候应该会恢复一样的值. 
    wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接. 
    wsrep_cluster_status:集群组成的状态.如果不为”Primary”,说明出现”分区”或是”split-brain”状况. 
    2. 节点状态检查: 
    wsrep_ready: 该值为ON,则说明可以接受SQL负载.如果为Off,则需要检查wsrep_connected. 
    wsrep_connected: 如果该值为Off,且wsrep_ready的值也为Off,则说明该节点没有连接到集群.(可能是wsrep_cluster_address或wsrep_cluster_name等配置错造成的.具体错误需要查看错误日志) 
    wsrep_local_state_comment:如果wsrep_connected为On,但wsrep_ready为OFF,则可以从该项查看原因. 
    3. 复制健康检查: 
    wsrep_flow_control_paused:表示复制停止了多长时间.即表明集群因为Slave延迟而慢的程度.值为0~1,越靠近0越好,值为1表示复制完全停止.可优化wsrep_slave_threads的值来改善. 
    wsrep_cert_deps_distance:有多少事务可以并行应用处理.wsrep_slave_threads设置的值不应该高出该值太多. 
    wsrep_flow_control_sent:表示该节点已经停止复制了多少次. 
    wsrep_local_recv_queue_avg:表示slave事务队列的平均长度.slave瓶颈的预兆.
     
    ########最后我们在把三个节点的引导地址配置完全
    只改一行,三台节点依次修改,改一台节点需重启一次数据库服务,不能等全部改完一起重启,切记!
    [root@galera1 galera]# vim /etc/my.cnf
    wsrep_cluster_address='gcomm://192.168.191.129,192.168.191.130,192.168.191.128'
    [root@galera1 galera]# systemctl restart mysqld
     
    mysql>  show status like 'wsrep_incoming%';  #仍然为三节点
    +--------------------------+----------------------------------------------------------------+
    | Variable_name            | Value                                                          |
    +--------------------------+----------------------------------------------------------------+
    | wsrep_incoming_addresses | 192.168.191.129:3306,192.168.191.128:3306,192.168.191.130:3306 |
    +--------------------------+----------------------------------------------------------------+
    1 row in set (0.35 sec)
    

    7)测试集群

    ###这里我简单的测试下,实际情况我已测试过多边。此处只做演示
    [root@galera1 galera]# mysql -uroot -pghy@6666   #节点1
    mysql> create database hya;
    Query OK, 1 row affected (0.01 sec)
    [root@galera2 galera]# mysql -uroot -pghy@6666   #节点2
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | hya                |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    5 rows in set (0.00 sec)
     
    [root@galera3 galera]# mysql -uroot -pghy@6666
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | hya                |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    5 rows in set (0.00 sec)
    

    备注:

    --wsrep-new-cluster   在第一台只第一次启动需要加这个参数来启动集群或者拿service mysql start --wsrep-new-cluster命令启动
    nohup /usr/sbin/mysqld --wsrep-new-cluster --defaults-file=/data/mysql/dragonclouddb/my.cnf --user=mysql &
    pkill mysql
    
  • 相关阅读:
    科学家质疑当今商用量子计算机的性能
    科学家研制出可模拟大脑信息处理的微芯片
    2014年电子科技市场衰退
    号外!CentOS 宣布加入红帽公司!
    hadoop,高富帅的玩具?
    成为Linux内核高手的四个方法
    分阶段事件驱动架构【SEDA】
    原型程式设计【原型语言】
    IOS7.1 企业应用 证书无效 已解决
    iOS7.1企业应用"无法安装应用程序 因为证书无效"的解决方案
  • 原文地址:https://www.cnblogs.com/gaohongyu/p/14208082.html
Copyright © 2020-2023  润新知