Mariadb-galera集群配置

更新时间:2024-04-11 17:40:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力,集群部署是必不可少的。

MariaDB Galera Cluster 介绍

MariaDB集群是MariaDB同步多主机集群。它仅支持XtraDB/ InnoDB存储引擎(虽然有对MyISAM实验支持 - 看wsrep_replicate_myisam系统变量)。 主要功能: ? 同步复制

? 真正的multi-master,即所有节点可以同时读写数据库 ? 自动的节点成员控制,失效节点自动被清除 ? 新节点加入数据自动复制 ? 真正的并行复制,行级

? 用户可以直接连接集群,使用感受上与MySQL完全一致 优势:

? 因为是多主,所以不存在Slavelag(延迟) ? 不存在丢失事务的情况 ? 同时具有读和写的扩展能力 ? 更小的客户端延迟

? 节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不

同的 技术:

Galera集群的复制功能基于Galeralibrary实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API。

Galera插件保证集群同步数据,保持数据的一致性,靠的就是可认证的复制,工作原理如下图:

当客户端发出一个commit的指令,在事务被提交之前,所有对数据库的更改都会被write-set收集起来,并且将 write-set 纪录的内容发送给其他节点。

write-set 将在每个节点进行认证测试,测试结果决定着节点是否应用write-set更改数据。 如果认证测试失败,节点将丢弃 write-set ;如果认证测试成功,则事务提交。

一.mariadb集群配置 1.安装环境准备

安装MariaDB集群至少需要3台服务器(如果只有两台的话需要特殊配置,请参照官方文档)

在这里,我列出试验机器的配置:

操作系统版本:CentOS7.3、mariadb10.1.21 hmcloud-Flow01:10.199.10.101 Flow03:10.199.10.103

为了保证节点间相互通信,需要禁用防火墙设置: 在三个节点分别执行命令:

systemctl stop firewalld systemctl enable firewalld

如需要开启防火墙,需要开放mariadb端口和4567端口,并开启组播(keepalived),实测firewall开启后即使开放端口和协议也会导致haproxy不能转发,如需使用防火墙功能建议更换成iptables.

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT firewall-cmd --add-port=4567/tcp --permanent firewall-cmd --reload

关闭selinux:

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config, setenforce 0

host解析,分别修改三台机器/etc/hosts,添加对应IP和主机名

创建mysql目录,挂载磁盘 mkdir /data/

mount /dev/sdb /data/ vim /etc/fstab添加挂载项 mkdir /data/mysql

升级内核,设置新内核为默认kernel ,启用BBR协议

hmcloud-Flow02:10.199.10.102

hmcloud-

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y [root@Ms_NxEra ~]# cat /boot/grub2/grub.cfg |grep 4.

[root@Ms_NxEra ~]# grub2-set-default \7 (Core)\

echo \>> /etc/sysctl.conf echo \>> /etc/sysctl.conf

配置安装源

[root@hmcloud-Flow01 mariadb]# cat /etc/yum.repos.d/mariadb.repo [mariadb] name = MariaDB

baseurl = http://yum.mariadb.org/10.1.21/centos7-amd64/ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1

2.安装 MariaDB Galera Cluster

[root@hmcloud-Flow01 ~]#yum install MariaDB-server MariaDB-client galera -y

3.配置 MariaDB Galera Cluster

初始化数据库服务,只在一个节点进行

[root@hmcloud-Flow01 mariadb]# systemctl start mariadb [root@hmcloud-Flow01 mariadb]# mysql_secure_installation

关闭数据库,修改 /etc/my.cnf.d/galera.cnf

[root@hmcloud-Flow01 ~]# systemctl stop mariadb

[root@hmcloud-Flow01 ~]# vim /etc/my.cnf.d/server.cnf [galera]

wsrep_provider = /usr/lib64/galera/libgalera_smm.so #wsrep_cluster_address = \

wsrep_cluster_address = \wsrep_node_name = hmcloud-Flow01 #各节点名称,另外的节点需要修改 wsrep_cluster_name=hmcloud

wsrep_node_address=10.199.10.101 #节点IP,另外的节点需要修改 wsrep_on=ON binlog_format=ROW

default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 #bind-address=0.0.0.0 wsrep_slave_threads=1

innodb_flush_log_at_trx_commit=0 innodb_buffer_pool_size=122M wsrep_sst_method=rsync

[embedded]

[mariadb]

datadir=/data/mysql

socket=/var/lib/mysql/mysql.sock port=3333

innodb_rollback_on_timeout=1 innodb_lock_wait_timeout=600 max_connections=350 skip-name-resolve log-bin=mysql-bin auto-increment-offset=1 auto-increment-increment=2 expire_logs_days =10 #skip-grant-tables

提示:将此文件复制到其余节点,注意要把 wsrep_node_name和 wsrep_node_address改成相应节点的 hostname和ip。

mariad默认安装在/var/lib/mysql目录下,上面配置文件修改datadir,需要将/var/lib/mysql下的所有文件拷贝过去才能正常启动 cp -r /var/lib/mysql /data/mysql chown mysql:mysql -R /data/mysql

4.启动 MariaDB Galera Cluster 服务

[root@hmcloud-Flow01 ~]#/usr/sbin/mysqld --wsrep-new-cluster --user=root &

观察日志:

[root@hmcloud-Flow01 ~]# tail -f /var/log/mariadb/mariadb.log

150701 19:54:17 [Note] WSREP: wsrep_load(): loading provider library 'none' 150701 19:54:17 [Note] /usr/libexec/mysqld: ready for connections. Version: '5.5.40-MariaDB-wsrep' socket: '/var/lib/mysql/mysql.sock' 3306 MariaDB Server, wsrep_25.11.r4026

port:

出现 ready for connections ,证明我们启动成功,其他节点做好准备配置,修改好mysql配置文件/etc/my.cnf.d/server.cnf后启动即可:

[root@hmcloud-Flow02 ~]# systemctl start mariadb [root@hmcloud-Flow03 ~]# systemctl start mariadb

可以查看/var/log/mariadb/mariadb.log,在日志可以看到节点均加入了集群中。

警告?:--wsrep-new-cluster 这个参数只能在初始化集群使用,且只能在一个节点使用,在节点故障修复后只需要执行systemctl start mariadb即可重新加入集群 5.查看集群状态

我们可以关注几个关键的参数: wsrep_connected = on 链接已开启

wsrep_local_index = 1在集群中的索引值 wsrep_cluster_size =3集群中节点的数量

wsrep_incoming_addresses

10.199.10.101:3333,10.199.10.101:3333,10.199.10.101:3333集群中节点地址

=

6.验证数据同步

我们在node4上新建数据库 galera_test ,然后在node5 和node6 上查询,如果可以查询到 galera_test 这个库,说明数据同步成功,集群运行正常。

[root@hmcloud-Flow01 ~] mysql -uroot -proot -e \

[root@hmcloud-Flow01 ~]mysql -uroot -proot -e \ +--------------------+ | Database | +--------------------+ | information_schema | | galera_test | | mysql |

| performance_schema | +--------------------+

[root@hmcloud-Flow02 ~] mysql -uroot -proot -e \ +--------------------+ | Database | +--------------------+ | information_schema | | galera_test | | mysql |

| performance_schema | +--------------------+

至此,我们的 MariaDB Galera Cluster 已经成功部署。

二.haproxy+keepalive配置 yum install keepalived haproxy -y 修改keepalive配置文件

[root@hmcloud-Flow01 mariadb]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived

global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc }

notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL } }

vrrp_sync_group VG_1 { group { VI_1 } }

vrrp_instance VI_1 {

state BACKUP #此处每个节点都是BACKUP,不需要master interface eth0

mcast_src_ip 10.199.10.101 #本机IP

virtual_router_id 91 #各节点需要一致,默认的ID可能在局域网内被占用,需要修改

priority 100 #权重,各节点不一致但相差接近 advert_int 1 authentication { auth_type PASS auth_pass password }

virtual_ipaddress { 10.199.10.100 } } 启动服务

systemctl start keepalived

检查VIP是否起来,VIP只在一个节点上,另外的节点如果有VIP存在,请检查防火墙,selinx等

修改haproxy配置文件,各节点一致

[root@hmcloud-Flow02 ~]# cat /etc/haproxy/haproxy.cfg global

log 127.0.0.1 local2

chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon

stats socket /var/lib/haproxy/stats

defaults

mode tcp #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK

retries 3 #两次连接失败就认为是服务器不可用,也可以通过后面设置 option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器

option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接

maxconn 32000 #默认的最大连接数 timeout connect 5000ms #连接超时 timeout client 30000ms #客户端超时 timeout server 30000ms #服务器超时

#timeout check 2000 #心跳检测超时

log 127.0.0.1 local0 err #[err warning info debug]

listen stats mode http bind *:8000 stats enable

stats refresh 30s #统计页面自动刷新时间 stats uri /haproxy stats hide-version

stats realm hm\\ Statistics stats auth hmcloud:password

listen mariadb mode tcp bind *:3306

balance leastconn

option mysql-check user haproxy

server hmcloud-Flow01 10.199.10.101:3333 weight 1 maxconn check inter 2000 rise 2 fall 5

server hmcloud-Flow02 10.199.10.102:3333 weight 1 maxconn check inter 2000 rise 2 fall 5

server hmcloud-Flow03 10.199.10.103:3333 weight 1 maxconn check inter 2000 rise 2 fall 5

到此,mariadb高可用集群已经部署完成。

本文来源:https://www.bwwdw.com/article/w5cp.html

Top