• [ Openstack ] Openstack-Mitaka 高可用之 Mariadb-Galera集群部署


     目录

        Openstack-Mitaka 高可用之 概述
        Openstack-Mitaka 高可用之 环境初始化
        Openstack-Mitaka 高可用之 Mariadb-Galera集群部署
        Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署
        Openstack-Mitaka 高可用之 memcache
        Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群
        Openstack-Mitaka 高可用之 认证服务(keystone)
        OpenStack-Mitaka 高可用之 镜像服务(glance)
        Openstack-Mitaka 高可用之 计算服务(Nova)
        Openstack-Mitaka 高可用之 网络服务(Neutron)
        Openstack-Mitaka 高可用之 Dashboard
        Openstack-Mitaka 高可用之 启动一个实例
        Openstack-Mitaka 高可用之 测试

     简介及特点

    MariaDB Galera Cluster主要功能:
        (1)多个节点数据同步复制
        (2)每个节点都是主节点,每个节点都有全部的数据
        (3)每个节点都可以提供读写操作
        (4)失效节点自动剔除,新节点加入自动同步(慎重,新节点加入会造成锁表)
        
    优点:
        (1)多主的结构,不存在同步延迟的问题。(master-slave是异步同步数据,Galera是同步同步数据)
        (2)不存在事务丢失的情况(有待验证)
        (3)节点都可以进行读写,客户端可以任意连接到其中节点,增强负载能力
        
    缺点:
        (1)加入新节点时,同步数据会造成锁表
        (2)对于写入操作会发生到每个节点上
        (3)多少个节点就有多少份数据
        (4)网络不稳,会出现脑裂情况,服务将不可用,不适用与重要数据的生产环境
        (5)仅支持InnoDB/XtraDB存储引擎

     工作流程图

    当客户端发送一个commit命令,在事务被提交之前,所有对数据的更改都会被write-set收集起来,并且将write-set记录的内容发送给其他节点。
    write-set将在每个节点上使用搜索到的主键进行确认性测试,测试结果决定着节点是否应用write-set更改数据。如果认证测试失败,节点将丢弃write-set;如果测试成功,则事务提交。工作如下:

      Galera集群的搭建

    以下操作在三个节点都要执行:

    # yum install MariaDB-Galera-server MariaDB-client galera -y

    安装完后的配置文件:

    # ll /etc/my.cnf.d/
    total 16
    -rw-r--r-- 1 root root  295 Oct 27 08:23 client.cnf
    -rw-r--r-- 1 root root  232 Oct 27 08:23 mysql-clients.cnf
    -rw-r--r-- 1 root root 1007 Aug 16 18:24 server.cnf
    -rw-r--r-- 1 root root  285 Aug 16 18:24 tokudb.cnf

    启动数据库

    # /etc/init.d/mysql start

    加固数据库

    # mysql_secure_installation

    我这里密码是123456,不必一致

    授权认证用户:

    # mysql -p123456

    添加集群认证用户:

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'galera'@'%' IDENTIFIED BY 'galera' WITH GRANT OPTION;
    MariaDB [(none)]> flush privileges;

    停止所有节点mysql服务

    # /etc/init.d/mysql stop

    在 [mariadb] 模块中添加如下:

    Controller1 :

    
    [mariadb]
    query_cache_size=0                                     # 关闭查询缓存
    binlog_format=ROW                                      # binlog文件格式:行
    default_storage_engine=innodb                             # Mariadb 存储引擎
    innodb_autoinc_lock_mode=2                              #主键自增模式修改为交叉模式
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so              #galera 库文件
    wsrep_cluster_address=gcomm://192.168.0.12,192.168.0.13        # galera集群url
    wsrep_cluster_name='openstack'                       # galera集群名称
    wsrep_node_address='192.168.0.11'                    # 该节点的地址
    wsrep_node_name='controller1'                      # 该节点的主机名
    wsrep_sst_method=rsync                          # 拷贝模式
    wsrep_sst_auth=galera:galera                      # galera集群认证用户:密码

     Controller2:

    [mariadb]
    query_cache_size=0
    binlog_format=ROW
    default_storage_engine=innodb
    innodb_autoinc_lock_mode=2
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address=gcomm://192.168.0.11,192.168.0.13
    wsrep_cluster_name='openstack'
    wsrep_node_address='192.168.0.12'
    wsrep_node_name='controller2'
    wsrep_sst_method=rsync
    wsrep_sst_auth=galera:galera

    Controller3:

    [mariadb]
    query_cache_size=0
    binlog_format=ROW
    default_storage_engine=innodb
    innodb_autoinc_lock_mode=2
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address=gcomm://192.168.0.11,192.168.0.12
    wsrep_cluster_name='openstack'
    wsrep_node_address='192.168.0.13'
    wsrep_node_name='controller3'
    wsrep_sst_method=rsync
    wsrep_sst_auth=galera:galera

    这里,启动第一个集群节点有点特殊:

    Controller1:
    /etc/init.d/mysql bootstrap
    
    Controller2:
    /etc/init.d/mysql start
    
    Controller3:
    /etc/init.d/mysql start

    登录任意节点进行验证:

    # mysql -p123456
    MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
    
    
    
    MariaDB [(none)]> show global status like 'ws%';

    注释:
    wsrep_cluster_status为Primary,表示节点为主节点,正常读写。
    wsrep_ready为ON,表示集群正常运行。
    wsrep_cluster_size为3,表示集群有三个节点。

    创建数据库进行测试:

     MariaDB [(none)]> create database abcd;

    然后,登录其他节点数据库查看是否存在。

    MariaDB [(none)]> show databases;

     

    Mariadb-Galera集群搭建完毕。

    在集群搭建完毕后在写其他的配置文件:

    # vim server.cnf
    [mariadb-10.0]
    port            = 3306
    bind_address    = 192.168.0.11
    tmpdir          = /tmp
    skip-external-locking
    skip-name-resolve
    max_connections=3600
    innodb_flush_log_at_trx_commit=2
    innodb_log_file_size=100m
    innodb_log_files_in_group=5
    thread_concurrency=24
    innodb_thread_concurrency=24
    innodb_commit_concurrency=24
    character-set-server = utf8
    collation-server = utf8_general_ci
    event_scheduler = ON
    max_allowed_packet = 20M

    三个controller节点都需要监听各自的管理地址。

     注意:

    当所有节点都宕机的情况下,再次启动节点,Mariadb-Galera集群会出现无法启动的现象
    Mariadb-Galera集群启动是有顺序的,遵循一个原则:最后宕机的最先启动,因为集群认为这个节点的数据是最新的。

  • 相关阅读:
    异或交换真的比开一个tmp快吗?
    淘宝前端团队的干货《论版本号的正确打开方式》
    箭头函数
    js对象引用问题
    json+underscore+Node 小例子
    fs.stat()
    Express static静态路由
    剑指offer(二) 替换空格
    Node实现简单的表单+图片上传+路由
    剑指offer(一) 二维数组的查找
  • 原文地址:https://www.cnblogs.com/hukey/p/8047125.html
Copyright © 2020-2023  润新知