[ 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存储引擎

工作流程图

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

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

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

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'; [ Openstack ] Openstack-Mitaka 高可用之 Mariadb-Galera集群部署
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;

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

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

上一篇:信安实践——CSRF攻击与防御


下一篇:跟着刚哥梳理java知识点——流程控制(六)