企业私有云之mariadb集群高可用

author author     2022-08-10     129

关键词:

上篇文章介绍了openstack组件rabbitmq高可用,现在介绍其另一个重要组件mysql高可用。

我是本次选择mysql的版本是mariadb,集群方法是galera cluster多主集群。

其实也有很多其他方案,如pxc、mha等等,选择galera的原因是安装方便,使用与维护也方便,多主模式任何一个节点挂了都可以在另外节点查看数据,同时openstack各组件也支持配置集群方式的配置。

简介

MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步的系统架构,业务层面无需做读写分离工作,数据库读写压力都能按照既定的规则分发到 各个节点上去。在数据方面完全兼容 MariaDB 和 MySQL。

特性

(1).同步复制 Synchronous replication
(2).Active-active multi-master 拓扑逻辑
(3).可对集群中任一节点进行数据读写
(4).自动成员控制,故障节点自动从集群中移除
(5).自动节点加入
(6).真正并行的复制,基于行级
(7).直接客户端连接,原生的 MySQL 接口
(8).每个节点都包含完整的数据副本
(9).多台数据库中数据同步由 wsrep 接口实现

不过局限性也有很多,比如复制仅支持innode,节点必须是3个等等,具体看官网介绍。

下面是安装

环境

系统centos 7.1

/etc/hosts是

node1 192.168.1.18
node2 192.168.1.20
node3 192.168.1.19

一、安装基础库(所有节点运行)

yum -y install make cmake bc gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel nss_ldap openldap openldap-devel  openldap-clients openldap-servers libxslt-devel libevent-devel ntp  libtool-ltdl bison libtool vim-enhanced tar wget readline-devel libyaml-devel  patch telnet lrzsz sysstat screen parted rsync libselinux-python dmidecode ntpdate sar openssh-clients man

二、配置mariadb源(所有节点运行)

cat >/etc/yum.repos.d/mariadb.repo <<EOF
# MariaDB 10.1 CentOS repository list - created 2016-05-24 07:59 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64 
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB 
gpgcheck=1
EOF

三、安装(所有节点运行)

yum install MariaDB-server MariaDB-client -y

四、配置

1、在node1里运行

主要是修改bind-address、wsrep_cluster_name、wsrep_node_address、wsrep_node_name

[[email protected] my.cnf.d]# cat /etc/my.cnf.d/server.cnf |grep -v ‘^#‘|sed ‘/^$/d‘
[server]
[mysqld]
collation-server = utf8_general_ci
init-connect = ‘SET NAMES utf8‘
character-set-server = utf8
skip-name-resolve
skip-host-cache
open_files_limit = 65535
max_connections = 5000
bind-address=192.168.1.18
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_file_per_table
character-set-server = utf8
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="pc.recovery=TRUE;gcache.size=300M"
wsrep_cluster_address=‘gcomm://‘

wsrep_cluster_name=‘ck-galera‘
wsrep_node_address=‘192.168.1.18‘
wsrep_node_name=‘m-1‘
wsrep_sst_method=rsync
[embedded]
[mariadb]
[mariadb-10.1]

启动

systemctl enable mariadb
systemctl start mariadb

初始化

[[email protected] log]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we‘ll need the current
password for the root user.  If you‘ve just installed MariaDB, and
you haven‘t set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from ‘localhost‘.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n
 ... skipping.

By default, MariaDB comes with a database named ‘test‘ that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you‘ve completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

查询集群数量

[[email protected] log]# mysql -uroot -p -e "show status where Variable_name like ‘wsrep_cluster_size‘"
Enter password:
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

可以看到只有一个

查看当前集群ip

[[email protected] log]# mysql -uroot -p -e "show status where Variable_name like ‘wsrep_incoming_addresses‘"
Enter password:
+--------------------------+-------------------+
| Variable_name            | Value             |
+--------------------------+-------------------+
| wsrep_incoming_addresses | 192.168.1.18:3306 |
+--------------------------+-------------------+

2、在node里配置

同样修改bind-address、wsrep_cluster_name、wsrep_node_address、wsrep_node_name

[[email protected] log]# grep -v ‘^#‘ /etc/my.cnf.d/server.cnf |sed ‘/^$/d‘
[server]
[mysqld]
collation-server = utf8_general_ci
init-connect = ‘SET NAMES utf8‘
character-set-server = utf8
skip-name-resolve
skip-host-cache
open_files_limit = 65535
max_connections = 5000
bind-address=192.168.1.20
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_file_per_table
character-set-server = utf8
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="pc.recovery=TRUE;gcache.size=300M"
wsrep_cluster_address=‘gcomm://192.168.1.18‘
wsrep_cluster_name=‘ck-galera‘
wsrep_node_address=‘192.168.1.20‘
wsrep_node_name=‘m-2‘
wsrep_sst_method=rsync
[embedded]
[mariadb]
[mariadb-10.1]

启动

systemctl enable mariadb
systemctl start mariadb

查看集群数量

[[email protected] log]# mysql -uroot -p -e "show status where Variable_name like ‘wsrep_cluster_size‘"
Enter password:
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+

可以看到已经有2个节点了

查看集群ip

[[email protected] log]# mysql -uroot -p -e "show status where Variable_name like ‘wsrep_incoming_addresses‘"
Enter password:
+--------------------------+-------------------------------------+
| Variable_name            | Value                               |
+--------------------------+-------------------------------------+
| wsrep_incoming_addresses | 192.168.1.20:3306,192.168.1.18:3306 |
+--------------------------+-------------------------------------+

可以看到node1与node2都在里面

3、在node3里配置

修改跟node1与node2一样

[[email protected] ~]# grep -v ‘^#‘ /etc/my.cnf.d/server.cnf |sed ‘/^$/d‘
[server]
[mysqld]
collation-server = utf8_general_ci
init-connect = ‘SET NAMES utf8‘
character-set-server = utf8
skip-name-resolve
skip-host-cache
open_files_limit = 65535
max_connections = 5000
bind-address=192.168.1.19
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_file_per_table
character-set-server = utf8
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="pc.recovery=TRUE;gcache.size=300M"
wsrep_cluster_address=‘gcomm://192.168.1.18,192.168.1.20‘
wsrep_cluster_name=‘ck-galera‘
wsrep_node_address=‘192.168.1.19‘
wsrep_node_name=‘m-3‘
wsrep_sst_method=rsync
[embedded]
[mariadb]
[mariadb-10.1]

启动

systemctl enable mariadb
systemctl start mariadb

查看集群数量

[[email protected] ~]# mysql -uroot -p -e "show status where Variable_name like ‘wsrep_cluster_size‘"
Enter password:
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

查看集群ip

[[email protected] ~]# mysql -uroot -p -e "show status where Variable_name like ‘wsrep_incoming_addresses‘"
Enter password:
+--------------------------+-------------------------------------------------------+
| Variable_name            | Value                                                 |
+--------------------------+-------------------------------------------------------+
| wsrep_incoming_addresses | 192.168.1.19:3306,192.168.1.20:3306,192.168.1.18:3306 |
+--------------------------+-------------------------------------------------------+

可以看到3个节点都在里面了。

下一步大家如果想测试,可以在任意一个节点里创建数据库与表,插入数据后,在另外节点里查看是否有对应信息,我这里就不列举了。

本文出自 “吟—技术交流” 博客,请务必保留此出处http://dl528888.blog.51cto.com/2382721/1865285

中小企业openstack私有云布署实践5数据库mariadb集群

kxcontroller1 kxcontroller2 controller1这3台作角色确保服务器的域名解析访问正常 确保NTP时间同步 配置HAproxy主备访问,其中的一项数据库3306端口项,参考Haproxy配置文档。 每台安装如下包-------------------------------------... 查看详情

lvs&keepalived—集群负载均衡企业高可用详解

LVS负载均衡集群及配置负载均衡概述1、集群通过集群(cluster)技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对高的收益,其任务调度则是集群系统中的核心技术。集群搭建完成后,可以利用多台计... 查看详情

linux企业运维——k8s高可用集群架构搭建详解(代码片段)

K8s高可用集群文章目录K8s高可用集群一、K8s高可用集群架构原理二、实验环境三、K8s高可用集群架构搭建3.1、负载均衡Loadbalancer部署—haproxy3.2、Docker部署3.3、K8s集群部署3.4、K8s集群添加worker节点四、集群高可用性能测试一、K8s... 查看详情

linux企业运维——k8s高可用集群架构搭建详解(代码片段)

K8s高可用集群文章目录K8s高可用集群一、K8s高可用集群架构原理二、实验环境三、K8s高可用集群架构搭建1、负载均衡Loadbalancer部署—haproxy2、Docker部署3、K8s集群部署4、K8s集群添加worker节点四、集群高可用性能测试一、K8s高可用... 查看详情

私有云rabbitmq集群部署

  默认openstack使用rabbitmq做信息队列,如果想要是云高可用,那么需要对每个涉及的组件都进行高可用配置,本文介绍如何使用rabbitmq做高可用 高可用方法通过Erlang的分布式特性(通过magiccookie认证节点)进行RabbitMQ集... 查看详情

mariadb高可用架构之mha(代码片段)

MHA(MasterHighAvailability)该软件由两部分组成:MHAManager(管理节点)和MHANode(数据节点)。MHAManager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHANode运行在每台MySQL服务器上,MHAManage... 查看详情

corosync+pacemaker实现高可用的mariadb

一、准备工作承接上文:corosync+pacemaker使用crmsh构建高可用集群二、MariaDBserver配置(基于nfs)nfsserver准备1、在nfs server准备LVM存储空间[[email protected] ~]# fdisk /dev/sdbDevice contains neither  查看详情

5-1企业级高可用集群介绍以及开源软件应用

HACluster:集群类型:LB(lvs/nginx(http/upstream,stream/upstream))、HA、HPSPoF:SinglePointofFailure系统可用性的公式:A=MTBF/(MTBF+MTTR)---失效转移(failover)(0,1),95%几个9(指标):99%,...,99.999%系统故障:硬件故障:设计缺陷、wearout、自然灾害、...软... 查看详情

企业私有云之共享存储ceph在centos7安装与应用

构建云设施,存储是一个重要组件,所以本文主要介绍一下我这里如何使用ceph的。云软件选择openstack,版本是Mitaka,部署系统是centos7.1,ceph版本是10.2.2.选择ceph的原因是,免费、开源、支持多,并且市面上大部分都是选择ceph做... 查看详情

关于 MariaDB 的 JDBC 故障转移/高可用性的说明

】关于MariaDB的JDBC故障转移/高可用性的说明【英文标题】:ClarificationaboutJDBCfailover/HighAvailabilitywithMariaDB【发布时间】:2018-04-2822:10:20【问题描述】:我已经使用两个MariaDB10.2数据库设置了一个小型集群,一个是(主动)主数据库... 查看详情

企业高可用切换的说明

企业的应用场景,基本上都离不开高可用,不管是windows下自带的集群软件,或者是Linux下的heartbeat,keepalived等,AIX下的hacmp等。-----------------------------引用老男孩老师对高可用切换的说明------------------------------关于企业高可用切... 查看详情

linux企业运维——k8s高可用集群架构搭建详解(代码片段)

K8s高可用集群文章目录K8s高可用集群一、K8s高可用集群架构原理二、实验环境三、K8s高可用集群架构搭建3.1、负载均衡Loadbalancer部署—haproxy3.2、Docker部署3.3、K8s集群部署3.4、K8s集群添加worker节点四、集群高可用性能测试一、K8s... 查看详情

高可用集群企业级应用实战-keepalived

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入... 查看详情

kubernetes如何构建高可用集群

...主机的网络是怎么样的,底层的网络是怎么样的。集群在企业做生产运维的话,要和企业的认证授权平台去做集成,通常是和认证平台去做集成。网络是使用overlay还是underlay,overlay是适配性强,涉及到性能问题比如封包和解包... 查看详情

linux企业运维——hadoop大数据平台(下)hdfs高可用yarn高可用hbase高可用(代码片段)

Linux企业运维——Hadoop大数据平台(下)hdfs高可用、Yarn高可用、hbase高可用文章目录Linux企业运维——Hadoop大数据平台(下)hdfs高可用、Yarn高可用、hbase高可用一、Hadoop高可用1.1、zoomkeeper集群部署1.2、hdfs高可用1.... 查看详情

zabbix高可用搭建--数据库集群(代码片段)

一、数据mariadb集群搭建分为两个内容1、负载均衡搭建2、mariadbgaleracluster二、负载均衡搭建负载均衡集群是loadbalance集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡... 查看详情

构建docker高可用私有仓库基于harbor开源系统

...p; 一、Harbor项目介绍1、Harbor来源VMware公司最近开源了企业级Registry项目Harbor,其的目标是帮助用户迅速搭建一个企业级的Dockerregistry服务。它以Docker公司开源的registry为基础, 查看详情

keepalived+lvs(dr)高可用负载均衡集群的实现

一环境介绍1.操作系统CentOSLinuxrelease7.2.1511(Core)2.服务keepalived+lvs双主高可用负载均衡集群及LAMP应用keepalived-1.2.13-7.el7.x86_64ipvsadm-1.27-7.el7.x86_64httpd-2.4.6-45.el7.centos.x86_64mariadb-5.5.52-1.el7.x86_64php-5.4 查看详情