Mariadb Cluster+Haproxy+keepalived 集群的详细安装与配置

要点概括

1、关闭iptables 或者设置常用端口为accept(关闭省事)

2、修改/etc/hosts ,设置RSA互信,避免在传文件需要密码

3、使用mariadb或者其他版本的DB带有WSREP功能

4、修改配置文件,在原来初始化的基础上加上WSREP的参数

5、启动第一个节点

6、在第一节点设置其他2节点的连接用户名和密码和配置文件设置一致

7、初始化启动其他节点

8、集群负载均衡和单点故障使用haproxy+keepalived

9、Haproxy+cluster状态检测

10、http://down.51cto.com/data/2257417(配置文件路径)

http://down.51cto.com/data/2257427(全部需要的包和软件)

######

Galera Cluster 是一套基于同步复制的多主MySQL集群解决方案,使用简单,没有单点故障,可用性搞,能很好的保证业务不断增长时,对数据的安全性和随时的扩展。

任何架构的高可用,没有绝对的最优,都有它的局限性,此斯也不例外。

使用前十项注意

1、使用Galera必须要给MySQL-Serverwsrep补丁。可以直接使用官方提供的已经打好补丁的MySQL安装包,如果服务器上已经安装了标准版MYSQL,需要先卸载再重新安装。卸载前注意备份数据。

2MySQL/Galera集群只支持InnoDB存储引擎。如果你的数据表使用的MyISAM,需要转换为InnoDB,否则记录不会在多台复制。可以在备份老数据时,为mysqldump命令添加–skip-create-options参数,这样会去掉表结构的声明信息,再导入集群时自动使用InnoDB引擎。不过这样会将AUTO_INCREMENT一并去掉,已有AUTO_INCREMENT列的表,必须在导入后重新定义。

3MySQL 5.5及以下的InnoDB引擎不支持全文索引(FULLTEXT indexes),如果之前使用MyISAM并建了全文索引字段的话,只能安装MySQL 5.6 with wsrep patch

4、所有数据表必须要有主键(PRIMARY,如果没有主键可以建一条AUTO_INCREMENT列。

5MySQL/Galera集群不支持下面的查询:LOCK/UNLOCK TABLES,不支持下面的系统变量:character_set_serverutf16utf32ucs2

6、数据库日志不支持保存到表,只能输出到文件(log_output = FILE),不能设置binlog-do-dbbinlog-ignore-db

7、跟其他集群一样,为了避免节点出现脑裂而破坏数据,建议Galera集群最低添加3个节点。

8、在高并发的情况下,多主同时写入时可能会发生事务冲突,此时只有一个事务请求会成功,其他的全部失败。可以在写入/更新失败时,自动重试一次,再返回结果。

9、节点中每个节点的地位是平等的,没有主次,向任何一个节点读写效果都是一样的。实际可以配合VIP/LVSHA使用,实现高可用性。

10、如果集群中的机器全部重启,如机房断电,第一台启动的服务器必须以空地址启动:mysqld_safe wsrep_cluster_address=gcomm:// >/dev/null&

安装前的建议:

1、需要至少3台的服务器,如果只有两台做CLUSTER的话,一旦出现数据不一致的情况下,就可能发生闹裂,需要一台仲裁服务器,如果是3台服务器的话,就不需要仲裁

2、CLUSTER需要用到3306444445674568端口,在IPTABLES 中开通对这些ACCEPT

3、如果是对现有环境做GALERA集群,需要对DB现有的表做检查,包括表、表引擎,是否无主键,需要安装scons

######开始..............

一、设置防火墙:

或者iptables –F  service iptables stop

二、设置HOST,RSA,使用vim /etc/hosts 添加信息

192.168.15.2 mysql_1

192.168.15.13 mysql_2

192.168.15.23 mysql_3

2、添加RSA,添加前建议删除旧的记录

#cd

#cd .ssh

Ssk-keygen –t rsa直接按回车即可

ssh-copy-id -i ".ssh/id_rsa.pub [email protected]各个节点ip地址"

###[email protected]使用每个服务器的IP地址,PXC 使用3台服务器,每台服务器执行3次

三、安装MARIADB及其他需要的包:

1、安装scons,安装此包说是为了检查有无主见,

# tar zxvf scons-2.2.0.tar.gz && cdscons-2.2.0

# python setup.py install

 

2、解压初始化MARIADB,解压到/usr/local/

# tar –zxvf mariadb---- -C /usr/local

# cd /usr/local

#ln –s ###做个软连接mysql (安装MARIADB略)

##mairadb的配置文件存放在/etc/my.cnf,改成其他名字 启动节点会有问题,节点启动默认去读/etc/my.cnf

3、安装galera复制插件

(mariadb自带有复制插件,这个针对pxc 或者mysql版本的wsrep)

# tar zxfv galera-25.3.5-src.tar.gz  && cd galera-25.3.5-src

#scons ##使用scons编译galera????????

编译的时候可能会有各种问题,主要是因为系统依赖的包:

问题1

boost/shared_ptr.hppnot found or not usable

问题2

Checking for C headerfile check.h... no

Error: check headerfile not found or not usable

问题3

ssl support requiredbut asio/ssl.hpp not found or not usable

compile with ssl=0 orcheck that openssl devel headers are usable

    问题4

        gcc

yum install boost* openssl* check* -y

yum –y install gcc

#mkdir /usr/lib64/galera/

#cp libgalera_smm.so/usr/local/mysql/lib/plugin/

##cp libgalera_smm.so  /usr/lib64/galera/

# cp garb/garbd  /usr/local/mysql/bin/

# cp libgalera_smm.so /usr/local/mysql/lib/plugin/  #数据解压后的basedir

若插件没设置会导致TIMEOUT:

四、添加WSREP的配置参数,具体看模板(my.cnf)

五、启动第一个节点:

/usr/local/mysql/bin/mysqld_safe--wsrep_cluster_address=gcomm:// >/dev/null &

##gcomm://是特殊地址,仅仅是galera cluster初始化启动时候使用,再次启动时需要使用具体的IP地址

Wsrep默认使用4567端口,mysql启动后,除了检查3306端口外,还需要检查此端口

若启动的时候报这个错,说明离成功很接近了,主要是因为启动的方式错误,导致无法启动


六、第一节点启动后,添加配置文件里集群连接的认证的用户名和密码:(和配置文件用户名密码一直)

#grant all privileges on *.* to [email protected]‘localhost‘ identified by "password";

#flush privileges;

七、添加其他节点,节点启动和第一节点相同,只要修改几个参数

###这里和PXC启动的方式有点区别:mariadb:

/usr/local/mysql/bin/mysqld_safe --wsrep_cluster_address=gcomm://192.168.15.13:4567>/dev/null &

若是第一节点挂了,不影响其他节点正常工作,若第一节点恢复,启动时候要:

/usr/local/mysql/bin/mysqld_safe --wsrep_cluster_address=gcomm://192.168.15.23:4567 >/dev/null &  IP 指定正常节点即可

#######有些参数还需要具体调整

若集群其他节点连接第一节点出现:

说明配置问题,其他节点可以根据第一节点的启动,重新初始化实例,然后连接第一节点

次坑花了2天时间,原来是配置文件问题………………………..

到此集群搭建完毕,可以测试在任意一个节点写入数据,都可以同步,

###集群使用的默认端口:3306数据实例

4444

4567

4568  貌似ISTSST 使用的

普及知识点:GALERA监控

1、常用指令

查看版本:SHOW GLOBAL STATUS LIKE‘wsrep_provider_version‘;

查看wsrep有关的所有变量:SHOW VARIABLES LIKE ‘wsrep%‘ \G

查看GALERA集群状态:show status like ‘wsrep%‘;

1、集群完整性检查

wsrep_local_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群

wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时”分区”了.当节点之间网络连接恢复的时候应该会恢复一样的值.

wsrep_cluster_status:集群组成的状态.如果不为”Primary,说明出现”分区”或是”split-brain”状况.

2、节点状态检查

wsrep_ready:该值为ON,则说明可以接受SQL负载.如果为Off,则需要检查wsrep_connected

wsrep_connected:如果该值为Off,wsrep_ready的值也为Off,则说明该节点没有连接到集群.(可能是wsrep_cluster_addresswsrep_cluster_name等配置错造成的.具体错误需要查看错误日志)

wsrep_local_state_comment:如果wsrep_connectedOn,wsrep_readyOFF,则可以从该项查看原因

3、复制健康检查:

wsrep_flow_control_paused:表示复制停止了多长时间.即表明集群因为Slave延迟而慢的程度.值为0~1,越靠近0越好,值为1表示复制完全停止.可优化wsrep_slave_threads的值来改善

wsrep_cert_deps_distance:有多少事务可以并行应用处理.wsrep_slave_threads设置的值不应该高出该值太多.

wsrep_flow_control_sent:表示该节点已经停止复制了多少次

wsrep_local_recv_queue_avg:表示slave事务队列的平均长度.slave瓶颈的预兆.

最慢的节点的wsrep_flow_control_sentwsrep_local_recv_queue_avg这两个值最高.这两个值较低的话,相对更好.

5、检测慢网络问题:

  wsrep_local_send_queue_avg:网络瓶颈的预兆.如果这个值比较高的话,可能存在网络瓶

5)冲突或死锁的数目:

  wsrep_last_committed:最后提交的事务数目

  wsrep_local_cert_failureswsrep_local_bf_aborts:回滚,检测到的冲突数目

  • Galera的状态快照转移(SST

  SST允许新接入的节点使用定制的方法来获取最初的数据,当前mysql支持三种SST方法:

  1mysqldump

    这需要接收服务器在转移前完全初始化和准备接收连接。此方法是通过定义阻塞,阻止修改自身状态转移的持续时间。这也是最慢的方式,可能会带来高负载的问题。

  2rsync

   最快的方式,也是galera默认使用的方式。rsync脚本运行在发送和接收端上。在接收端,开启rsync服务模式,等待发送端连接。在发送端,开启rsync客户端模式,发送mysql数据目录内容到连接节点。这种方法也会阻塞,但是比mysqldump快。

  3xtrabackup

   也很快,但需要额外安装。

 

####搭建集群注意几个参数:

Binlog_format=row###日志格式必须为ROW

Default_storage_engine=INNODB

Innodb_autoinc_lock_mod2=2 ###指定innodb自增长列锁模式,2为交叉锁模式,多个语句能同时执行

INNODB_LOCKS_UNSAFE_FOR_BINLOG=1

 WSREP_CLUSTER_NAME=CLUSTER_NAME###CLUSTER的名字

WSREP_CLUSTER_ADDRESS=GCOMM://IP1,IP2###集群中所有的node-ip,貌似只写本地也没问题,就是启动的时候写第一节点的IP 即可

Wsrep_node_address=ip ---每个节点配置为自己的IP

WSREP_PROVIDER=/USR/LOCAL/LIB/LIBGALERA_SMM.SO##指定GALERA库文件,PXC自带该库文件,MARIADB GALERA 需要安装GALERA

WSREP_SST_METHOD=RSYNC/XTRABACKUP  #指定SST方式,支持RSYNC(最快,需要表锁),MYSQLDUMPXTRABACKUP

WSREP_SST_AUTH=SST:123456     ----传输的用户

第一节点启动:不能用mysqld启动

应该为##./mysqld_safe –defaults-file=/etc/my.cnf –wsrep-cluster-address=”gcomm://”&

八、安装haproxy及修改配置文件:

###配置HAPROXY 若同时启动haproxy,一边没有IP资源的会提示

 Starting proxy admin_stats: cannot bind socket导致服务无法启动,修改:

修改内核参数: /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind=1

保存结果,使结果生效

sysctl  –p


#useradd haproxy

#tar -zxvf haproxy-1.4.20.tar.gz

#cd haproxy-1.4.20 && makeTARGET=linux26 PREFIX=/usr/local/haproxy ARCH=X86_64 && make installPREFIX=/usr/local/haproxy

若出现此问题,则需要安装gcc

Yum –y install gcc

#chown -R haproxy.haproxy /usr/local/haproxy

2、添加修改配置文件,部分解释参数配置意义(具体看haproxy.cfg)

   #cd /usr/local/haproxy && make conf&&cdconf && touch haproxy.cfg


###注意前段页使面用的端口48800和前端提供服务的端口,开通IPTABLES访问权限,

端口不能有冲突

3、启动haproxy,启动的时候若还没有VIP地址 这里会有提示无法绑定SOCKET。不打紧。

#/usr/local/haproxy/sbin/haproxy–f /usr/local/haproxy/conf/haproxy.cfg

4、增加集群状态检查进程用mysql用户权限

MariaDB [(none)]> grantprocess on *.* to [email protected]‘localhost‘ identified by ‘root123‘

    -> ;

Query OK, 0 rows affected(0.07 sec)

 

MariaDB [(none)]> flushprivileges;

    2、修改检测脚本,由于默认的用户名和密码为其他,可以自己定义,并且添加执行的权限:判断是否为read_only=on 同步状态是否为synced 节点状态是否为primary

#chmod +x/usr/bin/clustercheck

####此脚本结合xinetd使用。在WORD末尾介绍

5、安装keepalived服务:

#cd keepalived-1.2.12

#./configure--prefix=/usr/local/keepalived

若报错:

configure:error:

!!! OpenSSL is not properly installed on yoursystem. !!!

!!! Can not include OpenSSL headers files.           !!!

yuminstall  openssl* check* -y

#make &&  make install

#cp/usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

#cp /usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/

#mkdir /etc/keepalived

#cp/usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

#cp /usr/local/keepalived/sbin/keepalived/usr/sbin/



补充点:

默认情况下haproxy是不记录日志的,可以使用rsync本例LINUX服务记录日志。

1、在linux下是rsyslogd服务,

#yum –y installrsyslog先安装rsyslog

一般安装好rsyslog会自动生成rsyslog.d这个目录,若无自己创建

#cd /etc/rsyslog.d/ && touch haproxy.conf

#vim /etc/rsyslog.d/haproxy.conf

$ModLoad imudp

$UDPServerRun 514

local0.* /var/log/haproxy.log ###这个必须和haproxy.cfg的配置文件一致。

#vim /etc/rsyslog.conf

1、重启服务

#service rsyslogrestart

现在你就可以看到日志(/var/log/haproxy.log)了

配置集群每个一个节点的存活状态,在DB每个

    节点安装XINETD服务

1、若无xinetd服务,则安装

#yum -y install xinetd

检查/etc/xined.conf是否有:

  1. a)      检查/etc/xined.conf是否有:


  添加/etc/xinetd.d/mysql_status,此目录安装后默认存在。把mysql_status添加到/etc/services服务中去##脚本要有X权限,不然启动会有问题Error parsing attributeserver - DISABLING SERVICE [file=/etc/xinetd.d/mysql_status] [line=9]

###

故障haproxy切换需要在keepalived里定义好,才可以生效,或者keepalived停止服务后,停止haproxy服务,脚本已经提供 check_haproxy_master.sh

###############

启动报错:

19:26:49 [Note] WSREP:Running: ‘wsrep_sst_rsync --role ‘joiner‘ --address ‘127.0.0.1‘ --auth‘sst:sstpass123‘ --datadir ‘/data/my3308/‘ --defaults-file‘/data/cnf/my3308.cnf‘ --parent ‘3073‘ --binlog ‘mysqld3308-bin‘ ‘

which: no rsync in(/usr/sbin:/sbin:/usr/local/mysql//bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.7.0_51/bin:/usr/java/jdk1.7.0_51/jre/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin)

 19:26:49 [ERROR]WSREP: Failed to read ‘ready ‘ from: wsrep_sst_rsync --role ‘joiner‘ --address‘127.0.0.1‘ --auth ‘sst:sstpass123‘ --datadir ‘/data/my3308/‘ --defaults-file‘/data/cnf/my3308.cnf‘ --parent ‘3073‘ --binlog ‘mysqld3308-bin‘

 Read: ‘‘rsync‘ not found in PATH‘

从错误知道是找不到rsync命令路径,怀疑没有安装rsync

yum search rsync

============================================================N/S Matched: rsync=============================================================

rsync.x86_64 : A program forsynchronizing files over a network

yum install rsync.x86_64

再次启动NODE2:

报错,

which: no lsof in(/usr/sbin:/sbin:/usr/local/mysql//bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.7.0_51/bin:/usr/java/jdk1.7.0_51/jre/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin)

140723 22:07:05 [ERROR]WSREP: Failed to read ‘ready ‘ from: wsrep_sst_rsync --role ‘joiner‘ --address‘127.0.0.1‘ --auth ‘sst:sstpass123‘ --datadir ‘/data/my3307/‘ --defaults-file‘/data/cnf/my3307.cnf‘ --parent ‘6898‘ --binlog ‘mysqld3307-bin‘

Read: ‘‘lsof‘ not found inPATH‘

没有报rsync路径找不到,看来rsync问题已经解决,再解决lsof

yum search lsof

=============================================================N/S Matched: lsof =============================================================

lsof.x86_64 : A utility whichlists open files on a Linux/UNIX system

yum install lsof.x86_64

再启动,启动成功。问题解决

时间: 2024-12-04 14:19:09

Mariadb Cluster+Haproxy+keepalived 集群的详细安装与配置的相关文章

MariaDB Galera Cluster集群企业版编译安装与配置

安装环境 系统:CentOS 6.8 x86_64 软件:MariaDB 10.1.16 节点一:192.168.11.132 4C 8GB 节点二:192.168.11.133 4C 8GB 软件获取 访问MariaDB企业版下载地址 https://mariadb.com/my_portal/download/mariadb-enterprise 登录帐号后选择 10.1.16GA版本 源代码包下载. 从MariaDB Enterprise 10.1版本开始,企业版软件包与集群功能集成到一起

Galera Cluster mysql+keepalived集群部署

1.卸载mysql 查找本机安装的mysqlrpm -qa | grep -i mysql --nodeps --force rpm -ev MySQL-server-5.6.15-1.el6.x86_64rpm -ev --nodeps mysql-libs-5.1.71-1.el6.x86_64 (强制卸载) 查找之前老版本mysql的目录.并且删除老版本mysql的文件和库 find / -name mysql rm -rf /usr/lib64/mysql 卸载后/etc/my.cnf不

percona xtradb cluster 5.5集群生产环境安装之二

一.安装PXC要求 1.强烈推荐3个节点以上且硬件配置一样,一个节点性能受影响,整体受影响,遵循木桶效应 2.如果DDL语句有问题将破坏集群 3.创建数据库表引擎必须是INNODB,否则复合sql语句无法同步 4.创建数据库表必须要有主键索引,否则集群中有一台数据库会down掉 二.在线安装 yum remove -y mysql-libs rpm -qa |grep  Percona-Server |grep -v compat |xargs rpm -e --nodeps yum insta

redis3.0 集群实战1 -- 安装和配置

本文主要是在centos7上安装和配置redis集群实战 参考: http://hot66hot.iteye.com/blog/2050676 集群教程: http://redisdoc.com/topic/cluster-tutorial.html#id2 1 安装准备 1.1 下载redis3.0版本 到redis官网redis.io或者redis中文官网www.redis.cn上(http://www.redis.cn/download.html)去下载最新的版本,我下载的是redis3.

solrcloud(solr集群版)安装与配置

1 Solr集群 1.1 什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求. SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心. 它有几个特色功能: 1)集中式的配置

分布式架构高可用架构篇_02_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试

从 ActiveMQ 5.9 开始,ActiveMQ 的集群实现方式取消了传统的Master-Slave 方式,增加了基于ZooKeeper + LevelDB的 Master-Slave实现方式,其他两种方式目录共享和数据库共享依然存在. 三种集群方式的对比: (1)基于共享文件系统(KahaDB,默认): <persistenceAdapter> <kahaDB directory="${activemq.data}/kahadb"/> </persi

percona xtradb cluster 5.5集群生产环境安装之一

服务器准备: 服务器 内存 CPU SSD ip OS DB1 32GB 4核 300GB 10.0.10.10/32 centos6.5 x64 DB2 32GB 4核 300GB 10.0.10.11/32 centos6.5 x64 DB3 32GB 4核 300GB 10.0.10.12/32 centos6.5 x64 一.CPU参数调整 在服务器的BIOS设置cpu发挥最大的性能 1.选择Performance Per Watt Optimized(DAPC)模式,发挥CPU最大性能

mariadb galera Cluster 多主集群安装实录

1: 创建MariaDB.repo#vim /etc/yum.repos.d/MariaDB.repo # MariaDB 10.0 CentOS repository list - created 2013-08-23 13:08 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/centos6-amd64 gpgkey=ht

Mysql上的RAC:Percona XtraDB Cluster负载均衡集群安装部署手册

 Percona XtraDB Cluster安装部署手册 引言 编写目的 编写此文档,供PerconaXtraDB Cluster部署时使用. 预期读者 系统维护人员及实施人员. 编制依据及参考资料 目标 通过阅读该手册,让读者明确PerconaXtraDB Cluster的安装.配置和维护情况,为后续数据库运维工作提供指导. 应用部署方案 环境准备 服务器列表 序号 IP 用途 HOSTNAME 操作系统 1 192.168.0.7 Percona XtraDB Cluster RedHat