目录

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
-rw-r--r-- root root Oct : client.cnf
-rw-r--r-- root root Oct : mysql-clients.cnf
-rw-r--r-- root root Aug : server.cnf
-rw-r--r-- root root Aug : 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=              # 关闭查询缓存
binlog_format=ROW              # binlog文件格式:行
default_storage_engine=innodb         # Mariadb 存储引擎
innodb_autoinc_lock_mode=           #主键自增模式修改为交叉模式
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=
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=
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=
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=
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 =
bind_address = 192.168.0.11
tmpdir = /tmp
skip-external-locking
skip-name-resolve
max_connections=
innodb_flush_log_at_trx_commit=
innodb_log_file_size=100m
innodb_log_files_in_group=
thread_concurrency=
innodb_thread_concurrency=
innodb_commit_concurrency=
character-set-server = utf8
collation-server = utf8_general_ci
event_scheduler = ON
max_allowed_packet = 20M

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

注意:

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

[ Openstack ] Openstack-Mitaka 高可用之 Mariadb-Galera集群部署的更多相关文章

  1. MariaDB Galera集群部署--技术流ken

    Galera集群介绍 MariaDB集群是MariaDB同步多主机集群.它仅支持XtraDB/ InnoDB存储引擎. 主要功能 同步复制 真正的multi-master,即所有节点可以同时读写数据库 ...

  2. 高可用Mysql架构_Mycat集群部署(HAProxy + 两台Mycat+Mysql双主双从)

    既然大家都知道了Mysql分布式在大型网站架构中的作用,在这里就不再阐述.本片博客文章是基于我曾经搭建过的一个Mysql集群基础上实现的,实现过双主热备.读写分离.分库分表. 博客链接:http:// ...

  3. Sentry(v20.12.1) K8S 云原生架构探索,玩转前/后端监控与事件日志大数据分析,高性能+高可用+可扩展+可伸缩集群部署

    Sentry 算是目前开源界集错误监控,日志打点上报,事件数据实时分析最好用的软件了,没有之一.将它部署到 Kubernetes,再搭配它本身自带的利用 Clickhouse (大数据实时分析引擎)构 ...

  4. Linux下MySQL/MariaDB Galera集群搭建过程【转】

    MariaDB介绍 MariaDB是开源社区维护的一个MySQL分支,由MySQL的创始人Michael Widenius主导开发,采用GPL授权许可证. MariaDB的目的是完全兼容MySQL,包 ...

  5. Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群

    大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(H ...

  6. 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南

    原文:http://my.oschina.net/wstone/blog/365010#OSC_h3_13 (WJW)高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南 [X] ...

  7. HAProxy+Varnish+LNMP实现高可用负载均衡动静分离集群部署

    HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3. ...

  8. 分布式架构高可用架构篇_01_zookeeper集群的安装、配置、高可用测试

    参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...

  9. JMS之——ActiveMQ 高可用与负载均衡集群安装、配置(ZooKeeper + LevelDB + Static discovery)

    一.说明 从 ActiveMQ 5.9 开始, ActiveMQ 的集群实现方式取消了传统的 Master-Slave 方式,增加了基于ZooKeeper + LevelDB 的 Master-Sla ...

  10. Mariadb galera 集群

    部署galera 多主架构 (galera集群多用于关键性业务,因为galera集群为了数据的一致性,采用的是同步的机制,这就使galera牺牲了一部分性能来换取数据一致性.) 环境准备:三台服务器 ...

随机推荐

  1. Leetcode 686.重复叠加字符串匹配

    重复叠加字符串匹配 给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1. 举个例子,A = "abcd", ...

  2. JavaScript 面向对象 原型(prototype) 继承

    1.对象的概念:无需属性的集合,属性可以为数值,对象或函数,ECMAscript中没有类的概念,这点是javascript与其他面向对象(OO)语言不同的地方. //创建一个自定义对象 var per ...

  3. linux 进程间通信之pipe

    在实际开发过程中,程序员必须让拥有依赖关系的进程集协调,这样才能达到进程的共同目标.  每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内 ...

  4. 玩lua

    https://my.oschina.net/wangxuanyihaha/blog/186401

  5. Java 利用枚举实现单例模式

    引言 单例模式比较常见的实现方法有懒汉模式,DCL模式公有静态成员等,从Java 1.5版本起,单元素枚举实现单例模式成为最佳的方法. Java枚举 基本用法 枚举的用法比较多,本文主要旨在介绍利用枚 ...

  6. JSP九大内置对象及其方法

    内置对象包括 request response pageContext session application out config page exception 1.out (1)clear()清除 ...

  7. 【bzoj3813】奇数国 线段树

    题目描述 给出一个长度为n的序列,每个数都可以由前60个质数的乘积表示,初始每个数都是3.支持两种操作:(1)修改一个数 (2)查询一段区间内所有数的乘积的欧拉函数值模19961993. 输入 第一行 ...

  8. DataBase -- Second Highest Salary

    Question: Write a SQL query to get the second highest salary from the Employee table. +----+-------- ...

  9. Antlr 在 idea 中正确使用的方式

    问题 Caused by: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN ...

  10. GDI+小例子

    原文链接地址:http://www.cnblogs.com/chuanzifan/archive/2011/11/26/2264507.html 1.在stdafx.h中 #include <G ...