[ 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集群启动是有顺序的,遵循一个原则:最后宕机的最先启动,因为集群认为这个节点的数据是最新的。

本文作者:hukey

本文链接:https://www.cnblogs.com/hukey/p/8047125.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   hukey  阅读(3850)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 彩虹 Jay
彩虹 - Jay
00:00 / 00:00
An audio error has occurred.

彩虹 + 轨迹 (Live) - 周杰伦 (Jay Chou)

彩虹

词:周杰伦

曲:周杰伦

哪里有彩虹告诉我

哪里有彩虹告诉我

能不能把我的愿望还给我

能不能把我的愿望还给我

为什么天这么安静

为什么天这么安静

所有的云都跑到我这里

有没有口罩一个给我

有没有口罩一个给我

释怀说了太多就成真不了

释怀说了太多就成真不了

也许时间是一种解药

也许时间是一种解药

也是我现在正服下的毒药

也是我现在正服下的毒药

看不见你的笑 我怎么睡得着

看不见你的笑 我怎么睡得着

你的声音这么近我却抱不到

你的声音这么近我却抱不到

没有地球太阳还是会绕

没有地球太阳还是会绕

没有理由我也能自己走

没有理由我也能自己走

你要离开 我知道很简单

你要离开 我知道很简单

你说依赖 是我们的阻碍

你说依赖 是我们的阻碍

就算放开 但能不能别没收我的爱

就算放开 但能不能别没收我的爱

当作我最后才明白

当作我最后才明白

看不见你的笑 要我怎么睡得着

看不见你的笑 要我怎么睡得着

你的声音这么近我却抱不到

没有地球太阳还是会绕 会绕

没有理由我也能自己走掉

释怀说了太多就成真不了

也许时间是一种解药 解药

也是我现在正服下的毒药

轨迹

词:黄俊郎

曲:周杰伦

我会发着呆然后忘记你

接着紧紧闭上眼

想着哪一天 会有人代替

想着哪一天 会有人代替

让我不再想念你

我会发着呆 然后微微笑

我会发着呆 然后微微笑

接着紧紧闭上眼

又想了一遍 你温柔的脸

又想了一遍 你温柔的脸

在我忘记之前