实战mariadb-galera集群架构

day6

复习昨天的内容:

数据库代理--数据库中间件


功能:


负载均衡LB:将客户端请求以相对均衡的方式分发给后端的服务器;

读写分离:能够区分读和写,将相应的操作分汉给对应的服务;

分库分表分片:提高读性能,让后端服务器缓冲不同的数据;

sql路由并发查询:将一条 复杂的sql语句分成多条 sql语句,分发给后端对应的服务器。


软件:


mysql-proxy和atlas:mysql官方的,使用的公司有魔兽世界

mycat:在阿里马马cobar上的二次开发,是一个神话

数据库高可用――HA

1、什么是高可用?

表示法:百分比、9规则

例如:0.99999%代表一年中只能有5分钟的宕机时间(365天*24*60*0.00001=5.256分)

宕机造成的损失和降低宕机时间所花费的成本的衡量

一般能做到两个9(3天)、3个9(8h)、4个9(52.56分)

2、宕机的原因归纳

硬件上最普遍的问题是磁盘空间耗尽;

性能上最普遍的问题是糟糕的sql语句;

复制问题通常是主备数据不一致导致的;

人为误操作

3、如何实现高可用

降低故障率

优化架构

4、数据库高可用软件

mariadb  galera  cluster

mysql  NDB  cluster

5、mariadb  galera cluster


功能


同步复制

新节点加入自动同步数据

失效节点自动清除


优势


没有延迟

拓展能力强


适用架构

6、网络拓扑


序号


主机名


IP地址


必备软件(本例用mariadb-10.0.3)


1


node25


192.168.10.25


mariadb-server、mariadb-cluster-server


2


node26


192.168.10.26


mariadb-server、mariadb-cluster-server


3


node27


192.168.10.27


mariadb-server、mariadb-cluster-server


4


node11


192.168.10.11


atlas或mysql-proxy、MyCat等dbproxy代理软件

7、软件和版本:

下载安装

###galera-10.0.31官方rpm包下载(以下实验首选):

centos6版的galera-10.0.31软件(首选):http://yum.mariadb.org/10.0.31/centos6-amd64/rpms/

centos7版的galera-10.0.31软件(首选):http://yum.mariadb.org/10.0.31/centos7-amd64/rpms/

###galera-10.3官方rpm包下载(已测试OK):

centos6版的galera-10.3软件:http://yum.mariadb.org/10.3/centos6-amd64/rpms/

centos7版的galera-10.3软件: http://yum.mariadb.org/10.3/centos7-amd64/rpms/

专家建议:直接在官网下载整个rpms目录中的rpm软件包。然后在本地搭建galera安装包yum源,进行安装。

galera-10.0.31版的安装(本例已测OK):

yum  search  galera

yum  install  -y  MariaDB-Galera-server MariaDB-client galera  rsync mlocate  createrepo

rpm  -q  MariaDB-Galera-server  MariaDB-client galera

ls   /etc/my.cnf.d/

galera-10.3版安装(测试OK):

yum  search   galera

yum install MariaDB-server  MariaDB-client  galera rsync  mlocate  createrepo -y  (配置方法同下)

rpm  -q  MariaDB-server  MariaDB-client  galera

ls   /etc/my.cnf.d/

galera集群配置思路:

1、在每台主机上停止运行mysqld或mariadb服务。并设置服务为开机不启动。

2、在每台主机上安装galera软件,并启动mysql服务(此处是galera的服务)。

3、在每台主机上创建用于galera同步数据的用户账号,停止mysql服务(此处是galera的服务)。

4、设置每台galera主机的配置文件/etc/my.cnf.d/server.cnf,保证设置正确。

5、初始化启动第1台galera主机的集群环境:

service  mysql stop

servicemysql start --wsrep-new-cluster

mysql-uroot -p -e  "show status like‘wsrep_%‘;"

6、启动其他galera主机,验证集群状态:mysql -uroot -p -e  "show status like ‘wsrep_%‘;"

8、修改hosts文件,实现本地主机名解析

修改系每台galera主机的hosts文件,实现本地域名解析(选做,不做也不影响)。

高效率技巧:在一台主机上创建好,用scp远程推送复制到其他主机。

vi /etc/hosts    添加如下内容

  1. 192.168.10.25      node25
  2. 192.168.10.26     node26
  3. 192.168.10.27     node27
  4. 192.168.10.11     node11

9、关闭安全功能

配置防火墙规则,参考官方的说明,我这里偷懒就直接关闭了防火墙。

service  iptables  stop

chkconfig  iptables  off

setenforce  0

getenforce

sed  -i  ‘/^SELINUX=/s/enforcing/permissive/‘   /etc/selinux/config

10、用vsftpd在物理机共享galera软件包(192.168.10.1)。

第1步:安装并共享galera软件包。

yum   install   -y   vsftpd   ftp  lftp

service   vsftpd   restart

chkconfig  vsftpd  on

cp  -rv   galera   /var/ftp/

firefox  ftp://127.0.0.1

第2步:创建galera.repo网络yum源,并测试。

vi /etc/yum.repos.d/galera.repo

[7galera]

name=galera

baseurl=ftp://192.168.10.1/galera

enabled=1

gpgcheck=0

第3步:测试yum源和仓库

yum  clean   all

yum  repolist

yum  search   galera

11、需要先卸载mariadb-libs或mysql-libs

说明:不卸载会导致冲突,服务无法正常运行。


centos7


centos6.5


rpm  -e  mariadb-libs  --nodeps

rpm  -e  mariadb-common  --nodeps


rpm  -e  mysql-libs   --nodeps

rpm  -e  mysql-common  --nodeps


彻底卸载mysql-server:yum  remove   mysql-server   mysql   mysql-libs   mysql-compact

12、初始安装配置

安装MariaDB和galera软件


yum   search   galera

yum  install  -y  MariaDB-Galera-server   MariaDB-client galera  rsync   mlocate  createrepo

rpm   -q  MariaDB-Galera-server   MariaDB-client galera

ls    /etc/my.cnf.d/

安装和初始化MariaDB数据库并启动MariaDB服务,并作安全加固


centos7


centos6.5


systemctl   restart   mysql

mysql_secure_installation

systemctl   stop   mysql


service    mysql   restart

mysql_secure_installation

service  mysql  stop


说明:系统提供了mysql和mariadb两个服务脚本,可用service   mariadb  restart来重启。

附加需求:在每台主机启动mysql服务后,用grant创建两个Mysql账号,一个管理员账号admin,密码也用admin,再创建一个普通账号。


mysql -uroot

grant   all  on   *.*   to   [email protected]‘%‘    identified  by  ‘admin‘   with    grant   option;

grant  all  on  *.* to  [email protected]‘%‘  identified  by ‘reppass‘;

FLUSH PRIVILEGES;

select   user,host,password  from  mysql.user;

exit

13、配置文件讲解

主配置文件:/etc/my.cnf

附加功能配置文件:/etc/my.cnf.d/*.cnf

查galera的API动态链接库文件路径:

updatedb

locate  libgalera_smm.so

vi  /etc/my.cnf.d/galera.cnf   参考代码如下


[galera]

#Mandatory  settings

#启用wsrep  API接口

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

#启动节点时需要指定galera cluster的地址,作为cluster中第一个启动的节点wsrep_cluster_address="gcomm://",对于后续启动的节点用wsrep_cluster_address="gcomm://ip1,ip2,ip3  "

wsrep_cluster_address="gcomm://"

##wsrep_cluster_address="gcomm://192.168.100.70,192.168.10.71,192.168.10.72"

#集群名称(群名),所有node必须一样

wsrep_cluster_name="galera"

#本节点的地址

wsrep_node_address=192.168.100.70

#本节点名称

wsrep_node_name=node70

#Snapshot  Stat  Transfer快照状态转移方法:mysqldump/rsync,默认mysqldump

wsrep_sst_method=rsync

#mysqldump同步账号和密码(grant授权的账号和密码)

wsrep_sst_auth="myroot:reppass"

#binlog的格式也有三种:STATEMENT、ROW、MIXED

binlog_format=ROW

#默认存储引擎

default_storage_engine=innodb

#调整锁策略

innodb_autoinc_lock_mode=2

#本机的监听地址

bind-address=0.0.0.0

#每隔0秒同步刷新数据

innodb_flush_log_at_trx_commit=0

#设置utf8为默认字符集

#character_set_server=utf8

#指定binlog日志文件

log-bin=mysql-bin

14、galera集群配置文件

node25主机的配置文件(192.168.10.25)

vim  /etc/my.cnf.d/galera.cnf


[galera]

#Mandatory  settings

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address="gcomm://"

##wsrep_cluster_address="gcomm://192.168.10.25,192.168.10.26,192.168.10.27"

wsrep_cluster_name="galera"

wsrep_node_address=192.168.10.25

wsrep_node_name=node25

wsrep_sst_method=rsync

wsrep_sst_auth="myroot:reppass"

binlog_format=ROW

default_storage_engine=innodb

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0

innodb_flush_log_at_trx_commit=0

#character_set_server=utf8

log-bin=mysql-bin

15、重启服务。

service   mysql   restart

#查看本机mysql服务端口


netstat    -ntpl | grep  sql


tcp   0   0 0.0.0.0:3306    0.0.0.0:*      LISTEN      15065/mysqld

tcp   0   0 0.0.0.0:4567    0.0.0.0:*      LISTEN      15065/mysqld

16、其他galera节点上面做相同的配置

需求:依次启动其他galera节点,其他节点会根据配置自动加入到集群中并同步数据,一定要关闭防火墙和SELinux安全功能。

service  iptables   stop  ; chkconfig   iptables  stop

setenforce  0  ;  getenforce

service firewalld   stop  ; chkconfig   firewalld  off

node26主机的配置文件(192.168.10.26)

vim  /etc/my.cnf.d/galera.cnf


[galera]

#Mandatory  settings

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

##wsrep_cluster_address="gcomm://"

wsrep_cluster_address="gcomm://192.168.10.25,192.168.10.26,192.168.10.27"

wsrep_cluster_name="galera"

wsrep_node_address=192.168.10.26

wsrep_node_name=node26

wsrep_sst_method=rsync

wsrep_sst_auth="myroot:reppass"

binlog_format=ROW

default_storage_engine=innodb

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0

innodb_flush_log_at_trx_commit=0

#character_set_server=utf8

log-bin=mysql-bin

说明:galer集群中的其他主机的galera.cnf配置文件请参考集群成员主机192.168.10.26(node26)的配置文件。

17、观察日志

cat   /var/lib/mysql/node1.example.com.err

cat   /var/lib/mysql/grastate.dat

18、在galera主机上查看集群状态


mysql  -uroot   -p

show   global  status   like   ‘wsrep%‘;


登录

查看集群wsrep接口状态

19、galera集群关机问题

第1步:逐一关闭galera成员主机。

第2步:最后关闭galera集群的群主主机。

异常处理:当机房突然停电,所有galera主机都非正常关机,来电后开机,会导致galera集群服务无法正常启动。如何处理?

20、galera集群开机问题。

第1步:开启galera集群的群主主机的mysql服务。

第2步:开启galera集群的成员主机的mysql服务。

异常处理:galera集群的群主主机和成员主机的mysql服务无法启动,,如何处理?

解决方法一:第1步、删除garlera群主主机的/var/lib/mysql/grastate.dat状态文件,service   mysql  restart重启服务。启动正常。登录并查看wsrep状态。

第2步:删除galera成员主机中的/var/lib/mysql/grastate.dat状态文件,service   mysql  restart重启服务。启动正常。登录并查看wsrep状态。

解决方法二:第1步、修改garlera群主主机的/var/lib/mysql/grastate.dat状态文件中的0为1,service   mysql  restart重启服务。启动正常。登录并查看wsrep状态。

第2步:修改galera成员主机中的/var/lib/mysql/grastate.dat状态文件中的0为1,service   mysql  restart重启服务。启动正常。登录并查看wsrep状态。

21、模拟故障实验

1、  安装了3个节点

2、  关闭第一个节点后重启服务,需要修改配置文件

3、  关闭第3个节点,去查看错误日志文件,在集群中创建库,重启服务,看是否能够同步到数据。

22、mysql-proxy数据库代理前端(中间件)

可用软件:atlas、mysql-proxy、MyCat等

本例软件:Atlas代理

##安装配置atlas读写分离(192.168.10.11)

service iptables  stop

chkconfig iptables  off

setenforce  0

getenforce

sed  -i ‘s/^SELINUX=enforcing/SELINUX=permissive/‘  /etc/selinux/config

grep ‘^SELINUX=‘  /etc/selinux/config

安装和配置atlas软件

rpm  -ivh  Atlas-2.2.1.el6.x86_64.rpm

echo"PATH=$PATH:/usr/local/mysql-proxy/bin/"  > /etc/profile.d/mysql-proxy.sh

source   /etc/profile.d/mysql-proxy.sh

ll  /usr/local/mysql-proxy/

##mysql-proxy文件功能说明:

bin目录下放的都是可执行文件

  1. “encrypt”是用来生成MySQL密码加密的,在配置的时候会用到
  2. “mysql-proxy”是MySQL自己的读写分离代理
  3. “mysql-proxyd”是360弄出来的,后面有个“d”,服务的启动、重启、停止。都是用他来执行的

conf目录下放的是配置文件

  1. “test.cnf”只有一个文件,用来配置代理的,可以使用vim来编辑

lib目录下放的是一些包,以及Atlas的依赖

log目录下放的是日志,如报错等错误信息的记录

进入bin目录,使用encrypt来对数据库的密码进行加密,我的MySQL数据的用户名是admin,密码是admin,我需要对密码进行加密

cd  /usr/local/mysql-proxy/bin/

./encrypt   admin     生成加密密码,并复制此密码la1Ux+Bu4zo=

cd  /usr/local/mysql-proxy/conf/

cp  -v  test.cnf test.cnf.bak    //备份test.cnf配置文件

vi   test.conf   修改后的读写分享的完整配置文件内容

[mysql-proxy]

admin-username = user

admin-password = pwd

proxy-backend-addresses =192.168.100.25:3306

proxy-read-only-backend-addresses =192.168.100.26:[email protected],192.168.100.27:[email protected]

pwds = admin:la1Ux+Bu4zo=, myroot:esSF+VYp1RM=

daemon = true

keepalive = true

event-threads = 8

log-level = message

log-path = /usr/local/mysql-proxy/log

proxy-address = 0.0.0.0:3306

admin-address = 0.0.0.0:2345

设置mysql-proxyd开机启动:

echo  "/usr/local/mysql-proxy/bin/mysql-proxyd  test start"  >> /etc/rc.local

/usr/local/mysql-proxy/bin/mysql-proxyd  test  stop

source  /etc/rc.local

lsof  -i:3306    查端口

netstat  -atunlp |grep  sql     查mysql网络进程

tcpdump抓包: tcpdump  -i  eth0  port  3306

说明:抓取经过192.168.10.11代理主机的eth0网卡的3306端口的数据包,验证读写分离效果。

登录测试:mysql  -uadmin  -padmin -h 192.168.10.11 -P3306

登录到atlas管理端:mysql  -uuser  -ppwd -h 192.168.10.11 -P2345

-------------------------------------------------

启动atlas服务:/usr/local/mysql-proxy/bin/mysql-proxyd  test start

重启atlas服务:/usr/local/mysql-proxy/bin/mysql-proxyd  test restart

查状态:/usr/local/mysql-proxy/bin/mysql-proxy  test status

23、phpadmin部署(centos7系统)

第1步:安装软件。

yum  install  -y  httpd   php  php-mysql

yum  install  -y php-mbstring-5.4.16-36.el7_1.x86_64.rpm (要先下载此包)

wget phpMyAdmin-4.4.15-all-languages.tar.bz2

未完,待续.....

时间: 2024-08-10 19:57:21

实战mariadb-galera集群架构的相关文章

mariadb galera集群配置

最近在看一些关于数据库的资料,从最开始的mysql的主从复制到mysql的双主+heartbeat实现mysql的高可用再到mysql+drbd+heartbeat实现底层数据同步的双主高可用再到mysql_mmm+amoeba实现双主多从的高可用和负载均衡以及读写分离,再到后来发现mysql自从被Oracle收购后已经越来越走向了封闭,更新也不如以前频繁,并且新版的mysql已经不支持GPL协议了...感觉mysql已经在Oracle手中渐渐没落了...后来发现了一个更好的替代方案那就是mar

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

Galera集群介绍 MariaDB集群是MariaDB同步多主机集群.它仅支持XtraDB/ InnoDB存储引擎. 主要功能 同步复制 真正的multi-master,即所有节点可以同时读写数据库 自动的节点成员控制,失效节点自动被清除 新节点加入数据自动复制 真正的并行复制,行级 用户可以直接连接集群,使用感受上与MySQL完全一致 优势 因为是多主,所以不存在Slavelag(延迟) 不存在丢失事务的情况 同时具有读和写的扩展能力 更小的客户端延迟 节点间数据是同步的,而Master/S

MariaDB GALERA 集群双节点部署

节点1:10.2.2.41 节点2:10.2.2.42 软件: mariadb-galera-10.0.22-linux-x86_64.tar.gz #galera相关参数:(两个节点配置文件类似) wsrep_on=onbinlog_format=ROWdefault-storage-engine=innodbinnodb_autoinc_lock_mode=2bind-address=10.2.2.41wsrep_provider=/usr/local/mariadb-galera-10.0

实战Mariadb galera Cluster集群架构

Mariadb galera Cluster安装:操作系统:Centos7.4版本集群数量:3个节点主机信息: 192.168.153.142 node1 selinux=disabled firewalld关闭192.168.153.143 node2 selinux=disabled firewalld关闭192.168.153.144 node3 selinux=disabled firewalld关闭搭建步骤1.主机之间互相解析:三台节点都要执行vim /etc/hosts192.168

Mysql/MariaDB的集群实现:Galera Cluster

Galera Cluster是Codership公司开发的一套免费开源的高可用方案,属于multi-master的集群架构,如图所示: 三个实例,组成了一个集群,而这三个节点与普通的主从架构不同,它们都可以作为主节点,三个节点是对等的,这种一般称为multi-master架构,当有客户端要写入或者读取数据时,随便连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构. 官方给出的特性如下: 真正的多主集群,A

Galera Cluster——一种新型的高一致性MySQL集群架构

原文链接:https://www.sohu.com/a/147032902_505779,最近被分配定位mysql的问题,学习下. 1. 何谓Galera Cluster 何谓Galera Cluster?就是集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,分别是Percona Xtradb Cluster及MariaDB Cluster,都是基于Galera的,所以这里都统称为Galera Cluster了,

大中型网站集群架构企业级高标准全自动实战项目征集

大中型网站集群架构企业级高标准全自动实战 发布本博文目标: 老男孩教育全新期中集群架构项目实战(老男孩老师亲自带队) 1)征集网友或老男孩教育学生资源3-5人. 2)树立老男孩教育运维班期中集群架构项目标杆(期末的的架构会更精彩) 3)共同完成老男孩老师第一本书的结尾项目实战项目. 4)将结合23期运维班毕业前的期末架构项目出书(全自动化大型网站集群搭建优化) 5)让支持老男孩教育网友或老男孩教育学生得到锻炼和成长.享受出书作者待遇. 具体项目将以10台左右VM资源进行部署和演示,规模可以扩展到

网站集群架构实战(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken

前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken>下面是项目的一些简单介绍. WEB集群项目简介 随着网站访问量的激增,势必会导致网站的负载增加,现需求搭载一套高性能,高负载,高可用的网站集群架构以保障网站的持续.高效.安全.稳定的运行. 针对以上需求,我们采用了如下的技术: 使用负载均衡技术来实现网站请求的调度分发,减小后端服务器

mariadb-galera集群架构

day6 复习昨天的内容: 数据库代理--数据库中间件 功能: 负载均衡LB:将客户端请求以相对均衡的方式分发给后端的服务器: 读写分离:能够区分读和写,将相应的操作分汉给对应的服务: 分库分表分片:提高读性能,让后端服务器缓冲不同的数据: sql路由并发查询:将一条 复杂的sql语句分成多条 sql语句,分发给后端对应的服务器. 软件: mysql-proxy和atlas:mysql官方的,使用的公司有魔兽世界 mycat:在阿里马马cobar上的二次开发,是一个神话 数据库高可用――HA 1