超详细的Galera Cluster For Mysql部署,千万别点进来(+Haproxy+Keepalived)

目录

前言

安装部署

环境说明

安装操作

Haproxy代理部分

环境

安装配置

Keepalived高可靠部分

环境

安装配置

测试

总结

前言

          先来了解下它的身世,Galera ClusterCodership公司开发的一套免费开源的高可用方案,官网为http://galeracluster.comGalera Cluster即为安装了GaleraMariadb集群(本文只介绍Mariadb Garela集群)。其本身具有multi-master特性,支持多点写入。Galera Cluster的三个(或多个)节点是对等关系,每个节点均支持写入,集群内部会保证写入数据的一致性与完整性。下面是这个架构的一些特性:

•   真正的多主集群,Active-Active架构;

•   同步复制,没有复制延迟;

•   多线程复制;

•   没有主从切换操作,无需使用虚IP;

•   热备份,单个节点故障期间不会影响数据库业务;

•   支持节点自动加入,无需手动拷贝数据;

•   支持InnoDB存储引擎;

•   对应用程序透明,原生MySQL接口;

•   无需做读写分离;

•   部署使用简单。

安装部署

环境说明

系统:centos7.7       galera1:192.168.191.128    galera2:192.168.191.129    galera3:192.168.191.130

安装操作

1)上传带有galera补丁的数据库包,这里给大家搞好了  ~~ 点我点我

###三台节点同时进行以下操作
[root@galera1 ~]# yum -y install lrzsz vim   #工具包
[root@galera1 ~]# mkdir galera
[root@galera1 ~]# cd galera

2)对了要把系统默认关于数据库的一切全部卸载

#三台节点同时进行以下操作
[root@galera1 galera]# rpm -qa | grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@galera1 galera]# rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps  #强制卸载

3)关闭防火墙

##三台节点同时进行以下操作
[root@galera1 galera]# setenforce 0;systemctl stop firewalld

4)安装

##三台节点同时进行以下操作
[root@galera1 galera]# yum -y install mysql-wsrep-client-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-common-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-devel-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-libs-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-libs-compat-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-server-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-test-5.7-5.7.31-25.23.el7.x86_64.rpm   #先安依赖

[root@galera1 galera]# yum -y install galera-3-25.3.31-1.el7.x86_64.rpm mysql-wsrep-5.7-5.7.31-25.23.el7.x86_64.rpm   ##这是有galera补丁的数据库

5)先启动数据库,给节点三兄弟配个集群通信账号(重点哦~)

##三台节点同时进行以下操作
[root@galera1 galera]# systemctl start mysqld
[root@galera1 galera]# systemctl status mysqld    #状态running启动成功
[root@galera1 galera]# new=`grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'`;mysqladmin -p"$new" password "Hxb@6666"    #设置数据库root的密码
[root@galera1 galera]# mysql -uroot -pHxb@6666     #登录数据库
mysql> grant all on *.* to hya@"%" identified by 'Hya@6666';    #授权创建数据库账户
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;                   ##刷新权限
Query OK, 0 rows affected (0.00 sec)

6)修改数据库配置文件,创建galera集群(这个是重点很容易出错)

###第一台节点先配置
[root@galera1 galera]# vim /etc/my.cnf    #最下面添加
server-id=1                    #三个节点id不能一样
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2

wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'             #集群名称
wsrep_cluster_address='gcomm://'        #第一个节点配置时暂时不加入ip,表示新创建集群的意思,一但加ip会报配置文件错误。需要在后续集群创建完成加入各个节点后在回来填写ip
wsrep_node_name='galera1'               #集群中这个节点的名称不不能与其他节点重复
wsrep_node_address='192.168.191.128'
wsrep_sst_auth=hya:"Hya@6666"
wsrep_sst_method=rsync    #注意没有rsync需要yum下载
[root@galera1 galera]# systemctl restart mysqld   ##重启数据库
[root@galera1 galera]# mysql -uroot -pHxb@6666
mysql>  show status like 'wsrep_incoming%';      #galera集群创建成功目前只有一个节点
+--------------------------+----------------------+
| Variable_name            | Value                |
+--------------------------+----------------------+
| wsrep_incoming_addresses | 192.168.191.128:3306 |
+--------------------------+----------------------+
1 row in set (0.01 sec)

###第二台节点配置如下
[root@galera2 galera]# vim /etc/my.cnf
server-id=2
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2

wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://192.168.191.128,192.168.191.130'  ##这里的ip要写第一台节点的ip,作用用于引导此节点加入galera集群。如果空着不写表示新创建集群
wsrep_node_name='galera2'
wsrep_node_address='192.168.191.129'
wsrep_sst_auth=hya:"Hya@6666"
wsrep_sst_method=rsync
[root@galera2 galera]# systemctl restart mysqld  
[root@galera2 galera]# mysql -uroot -pHxb@6666
mysql>  show status like 'wsrep_incoming%';   ##此时galera集群中已加入此节点
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| wsrep_incoming_addresses | 192.168.191.129:3306,192.168.191.128:3306 |
+--------------------------+-------------------------------------------+
1 row in set (0.01 sec)

###第三台节点配置如下
[root@galera3 galera]# vim /etc/my.cnf
server-id=3
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2

wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://192.168.191.128,192.168.191.129'  ##引导地址写前两个节点的ip
wsrep_node_name='galera3'
wsrep_node_address='192.168.191.130'
wsrep_sst_auth=hya:"Hya@6666"
wsrep_sst_method=rsync
[root@galera3 galera]# systemctl restart mysqld
[root@galera3 galera]# mysql -uroot -pHxb@6666
mysql>  show status like 'wsrep_incoming%';   ##此时三台节点已加入
+--------------------------+----------------------------------------------------------------+
| Variable_name            | Value                                                          |
+--------------------------+----------------------------------------------------------------+
| wsrep_incoming_addresses | 192.168.191.129:3306,192.168.191.128:3306,192.168.191.130:3306 |
+--------------------------+----------------------------------------------------------------+
1 row in set (0.00 sec)


########最后我们在把三个节点的引导地址配置完全
只改一行,三台节点依次修改,改一台节点需重启一次数据库服务,不能等全部改完一起重启,切记!
[root@galera1 galera]# vim /etc/my.cnf
wsrep_cluster_address='gcomm://192.168.191.129,192.168.191.130,192.168.191.128'
[root@galera1 galera]# systemctl restart mysqld

mysql>  show status like 'wsrep_incoming%';  #仍然为三节点
+--------------------------+----------------------------------------------------------------+
| Variable_name            | Value                                                          |
+--------------------------+----------------------------------------------------------------+
| wsrep_incoming_addresses | 192.168.191.129:3306,192.168.191.128:3306,192.168.191.130:3306 |
+--------------------------+----------------------------------------------------------------+
1 row in set (0.35 sec)

7)测试集群

###这里我简单的测试下,实际情况我已测试过多边。此处只做演示
[root@galera1 galera]# mysql -uroot -pHxb@6666   #节点1
mysql> create database hya;
Query OK, 1 row affected (0.01 sec)
[root@galera2 galera]# mysql -uroot -pHxb@6666   #节点2
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hya                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

[root@galera3 galera]# mysql -uroot -pHxb@6666
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hya                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

Haproxy代理部分

环境

centos:7.7         三个数据库节点上全部安装haproxy

安装配置

1)安装haproxy修改配置文件

###三台节点同时进行以下操作
[root@galera1 galera]# yum -y install haproxy
[root@galera1 galera]# haproxy -v   #查看haproxy版本
HA-Proxy version 1.5.18 2016/05/10
[root@galera1 galera]# systemctl enable haproxy  #开机自启
[root@galera1 galera]# vim /etc/haproxy/haproxy.cfg   #改haproxy的配置文件
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
    log                     global
    retries                 3
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout check           10s
    maxconn                 3000

frontend  mysql-cluster
    bind 192.168.191.100:3380
    mode tcp
    log global
    default_backend mysqls

backend mysqls
    mode tcp
    balance     roundrobin
    option      tcp-check
    server      galera1   192.168.191.128:3306 check
    server      galera2   192.168.191.129:3306 check
    server      galera3   192.168.191.130:3306 check

listen admin_stats
        stats   enable
        bind    *:81    #监听的ip端口号
        mode    http    #开关
        stats   refresh 10s   #统计页面自动刷新时间
        stats   uri /admin    #访问的uri   ip:81/admin
        stats   auth admin:admin  #认证用户名和密码

[root@galera1 galera]# haproxy -f /etc/haproxy/haproxy.cfg -c   #检查配置文件的正确性
Configuration file is valid
[root@galera1 galera]# scp  /etc/haproxy/haproxy.cfg 192.168.191.129:/etc/haproxy/haproxy.cfg    #三台代理的配置文件一样这里我直接cp过去
[root@galera1 galera]# scp  /etc/haproxy/haproxy.cfg 192.168.191.130:/etc/haproxy/haproxy.cfg 

2)这个操作一定要有,不然无法启动haproxy

###三台节点都要进行以下操作
[root@galera1 galera]# vim /etc/sysctl.conf   # 允许haproxy 监听本地不存在IP,防止因配置文件绑定VIP而haproxy无法监听非本地IP而导致的错误,例如:'cannot bind socket'
net.ipv4.ip_nonlocal_bind=1
[root@galera1 galera]# sysctl -p   #立即生效
net.ipv4.ip_nonlocal_bind = 1

3)配置日志

###三个节点同时进行以下操作
[root@galera1 galera]# vim /etc/rsyslog.conf 
# 开启UDP监听模式,即去掉下面两行前面的注释
$ModLoad imudp
$UDPServerRun 514
local2.*  /var/log/haproxy.log   #此行在最下面操作

[root@galera1 galera]# vim /etc/sysconfig/rsyslog 
SYSLOGD_OPTIONS="-r -m 2 -c 2"

[root@galera1 galera]# touch /var/log/haproxy.log

4)启动服务

###三台节点同时进行以下操作
[root@galera1 galera]# systemctl restart haproxy;systemctl restart rsyslog
[root@galera1 galera]# systemctl status haproxy

Keepalived高可靠部分

环境

当然了环境还是原来的环境,在三台节点上安装keepalived就可以了!!这里keepaived的功能主要是检测haproxy是否正常在工作,如果未工作则自动关闭自己使得ip跳转到第二代理!

安装配置

1)下载keepalived

###三台节点同时进行以下操作
[root@galera1 galera]# yum -y install  keepalived
[root@galera1 galera]# systemctl enable keepalived

2)配置keepalived

###三台节点同时进行操作
[root@galera1 galera]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
vrrp_script check_haproxy {
    script "/root/chk_haproxy.sh"
    interval 2
    weight 2
}
vrrp_instance VI {
    state MASTER         ##另外两台应改为BACKUP
    interface ens33
    advert_int  1
    nopreempt
    virtual_router_id 100 
    priority 100                  ###另外两台节点的权重要改小
    
    virtual_ipaddress {
        192.168.191.100
    }   
    
    track_script {
        check_haproxy
    }   
}

2.1)chk_haproxy.sh脚本

[root@galera1 ~]# cat chk_haproxy.sh 
#!/bin/bash
A=`ps -C haproxy --no-header |wc -l`
if [ $A -eq 0 ];then
  systemctl stop keepalived
fi
[root@galera1 ~]# chmod +x chk_haproxy.sh  #给脚本一个执行权限

3)启动keepalived服务并测试

###所有节点配置完成后,启动keepalived服务
[root@galera1 ~]# systemctl start keepalived
[root@galera1 ~]# systemctl status keepalived
[root@galera1 ~]# ip a    ##虚拟ip已出现
    inet 192.168.191.100/32 scope global ens33

测试

1)连接测试,这里我使用工具通过虚拟ip来远程连接数据库来测试是否可行!

上图的报错,情况可能有以下几种:
1.ip,端口,账号,密码输入有误
2.此数据库账号没有允许远程登录
3.仅允许一个连接(我本地正在连接,其它渠道则无法连接)
##通过排查我发现出错的原因是第二条,以下操作可以解决问题
[root@galera1 ~]# mysql -pHxb@6666
mysql> grant all on *.* to root@'%' identified by 'Hxb@6666'; #允许root用户远程连接
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

2)可视化观察

观察上图,通过haproxy的web页面观察,此时的数据库集群已经运行近30分钟,且负载无异常

总结

               使用到现在暂时没有发现什么问题。后续如果有问题的话我会在更新。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖胖不胖、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值