添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
cd /etc/yum.repos.d sudo mv CentOS-Base.repo CentOS-Base.repo.bak sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all yum makecache yum repolist yum -y update

分别在三台服务器执行以下操作:

2,关闭防火墙

systemctl disable firewalld 
systemctl stop firewalld
sed -ri '/SELINUX=/cSELINUX=disabled' /etc/selinux/config
setenforce 0

3,配置yum源

cat >>/etc/yum.repos.d/galera.repo<<EOF
[galera1]
name=galera1
baseurl=http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
gpgcheck=0
[galera2]
name=galera2
baseurl=http://releases.galeracluster.com/galera-3/centos/7/x86_64/
gpgcheck=0

二,安装mysql和galera插件

分别在三台服务器执行以下:1,2,3

1,安装mysql

yum repolist
yum list | egrep "wsrep|galera"
yum -y install mysql-wsrep-server-5.7.x86_64  rsync galera-3.x86_64 -y

2,启动mysqld

启动mysql,设置开机自启,设置root密码为Df@1211!

systemctl start mysqld
systemctl enable mysqld
oldpass=$(grep "temporary password" /var/log/mysqld.log | awk '{print $NF}')
mysqladmin -uroot -p"$oldpass" password 'Df@1211!'

3,创建用于数据同步的用户

mysql -u root -p  -e "grant all on *.* to 'copy'@'192.168.59.%' identified by 'Df@1211#'"
mysql -u root -p  -e "flush privileges;"

4,非必须操作,更换mysql数据存储路经

①移动数据存储路经并授权

mv /var/lib/mysql /home
chown -R mysql:mysql /home/mysql

②修改mysql配置文件

vim /etc/my.cnf

修改如下两行配置

datadir=/home/mysql
socket=/home/data/mysql/mysql.sock

末尾添加,

[mysql]
socket=/home/mysql/mysql.sock

以下操作三台服务器分开执行

5,安装galera插件,修改配置文件

① node1 192.168.59.132 主机执行

注意:node定义刚开始定义集群是wsrep_cluster_address=“gcomm://”,等三台服务器全部配置好之后,
这个地址需要修改wsrep_cluster_address=“gcomm://192.168.59.132,192.168.59.133,192.168.59.134”,然后重启Mysql服务,

注意:以下内容追加到/etc/my.cnf文件中 [mysqld]下面,千万别加到[mysql]下面,否则会报错

#vim /etc/my.cnf
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_address="gcomm://"
wsrep_cluster_name="test"
wsrep_node_address="192.168.59.132"
wsrep_node_name="node1"
wsrep_sst_auth=copy:Df@1211#
wsrep_sst_method=rsync

重启mysqld服务器:

systemctl restart mysqld

验证端口状态:

ss -anltup | egrep "3306|4567"
② node2 192.168.59.133 主机执行
#vim /etc/my.cnf
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.59.132,192.168.59.133"
wsrep_cluster_name="test"
wsrep_node_address="192.168.59.133"
wsrep_node_name="node2"
wsrep_sst_auth=copy:Df@1211#
wsrep_sst_method=rsync

重启mysqld服务器:

systemctl restart mysqld

验证端口状态:

ss -anltup | egrep "3306|4567"
③ node3 192.168.59.134 主机执行
#vim /etc/my.cnf
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.59.132,192.168.59.133,192.168.59.134"
wsrep_cluster_name="test"
wsrep_node_address="192.168.59.134"
wsrep_node_name="node3"
wsrep_sst_auth=copy:Df@1211#
wsrep_sst_method=rsync

重启mysqld服务器:

systemctl restart mysqld

验证端口状态:

ss -anltup | egrep "3306|4567"

三台主机配置完成后,查看集群状态
登录mysql

mysql -u root -p

查看集群状态

show status like 'wsrep%';

在这里插入图片描述
测试链接
先授权用户允许远程登录权限,登录mysql ,执行

grant all privileges on *.* to root@'%' identified by 'Dd@1211#'

用数据库连接工具本地连接测试
地址:192.168.59.132 端口:3306 账号:root 密码:Dd@1211#
地址:192.168.59.133 端口:3306 账号:root 密码:Dd@1211#
地址:192.168.59.134 端口:3306 账号:root 密码:Dd@1211#

5,万一集群全部挂掉,需要重启集群(一般生产环境很少遇到,贴在此处以备不时之需):

1,停止所有节点的mysql服务

systemctl stop mysqld

2,找一台节点作为master重新启动mysql

启动之前修改文件

vim /var/lib/mysql/grastate.dat 

中间的seqno: -1 改成 seqno: 1

safe_to_bootstrap: 0 改成 safe_to_bootstrap: 1

随之启动mysql服务:

mysqld --user=root --wsrep-new-cluster --wsrep-cluster-address='gcomm://' &

注意:这里为了让其他节点复活,临时启动了mysql服务,待会记得其他节点启动好之后重启mysql服务!重启之前记得把临时启动的进程杀掉哦。

3,其他节点执行

systemctl start mysqld

三,安装Haproxy代理

三台节点同时进行以下操作

1,安装haproxy并设置开机自启

yum -y install haproxy
systemctl enable haproxy

2,修改haproxy的配置文件

vim /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
    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.59.100:3380
    mode tcp
    log global
    default_backend mysqls
backend mysqls
    mode tcp
    balance     roundrobin
    option      tcp-check
    server      galera1   192.168.59.132:3306 check
    server      galera2   192.168.59.133:3306 check
    server      galera3   192.168.59.134: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  #认证用户名和密码

检查配置文件的正确性

haproxy -f /etc/haproxy/haproxy.cfg -c 

允许haproxy 监听本地不存在IP,防止因配置文件绑定VIP而haproxy无法监听非本地IP而导致的错误,例如:‘cannot bind socket’

[root@galera1 galera]# vim /etc/sysctl.conf  
net.ipv4.ip_nonlocal_bind=1
[root@galera1 galera]# sysctl -p   #立即生效
net.ipv4.ip_nonlocal_bind = 1

配置日志
三个节点同时进行以下操作

[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

3,启动服务

#三台节点同时进行以下操作

[root@galera1 galera]# systemctl restart haproxy;systemctl restart rsyslog
[root@galera1 galera]# systemctl status haproxy

4,登录haproxy页面查看状态

地址:http://192.168.59.133:81/admin
账号:admin 密码:admin

四,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/check_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 ~]# vim check_haproxy.sh

#!/bin/bash
A=`ps -C haproxy --no-header |wc -l`
if [ $A -eq 0 ];then
  systemctl stop keepalived

给脚本一个执行权限

[root@galera1 ~]# chmod +x check_haproxy.sh  

3,启动keepalived服务并测试

###所有节点配置完成后,启动keepalived服务

[root@galera1 ~]# systemctl start keepalived
[root@galera1 ~]# systemctl status keepalived
[root@galera1 ~]# ip a   

虚拟ip已出现
在这里插入图片描述

如果没有出现虚拟ip,检查keepalived配置文件中的 interface 是否是当前网卡,查看网卡ip add
我机器网卡是ens192,所以需要将配置中的interface 值改为ens192
如果是其他原因,具体定位需要看日志,keepalived日志路径:/var/log/messages

192.168.191.100 这个虚拟ip就是我们最终要链接的地址,端口配置是3380

整个过程坑还是比较多的,有遇到其他问题的同学可以留言一起讨论

一,服务器基础配置准备3台主机,系统centos7node1 192.168.59.132node2 192.168.59.133node3 192.168.59.134分别在三台服务器执行以下操作:1,关闭防火墙systemctl disable firewalld systemctl stop firewalldsed -ri '/SELINUX=/cSELINUX=disabled' /etc/selinux/configsetenforce 02,配置yum源cat &gt
关于Oracle和MySQL高可用方案,其实一直想要总结了,就会分为几个系列来简单说说。通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识。Oracle有一套很成熟的解决方案。用我在OOW上的ppt来看,是MAA的方案,今年是这个方案的16周年了。 而MySQL因为开源的特点,社区里推出了更多的解决方案,个人的见解,InnoDB Cluster会是MySQL以后的高可用方案标配。 而目前来看,MGR固然不错,MySQL Cluster方案也有,PXC,Galera方案,个人还是更倾向于MHA. 所以本文会分为几个部分来解读,先拿RAC和MHA来做一个基本的对比。 Galera能够实现MySQL/MariaDB数据库的主主复制和多主复制等模式,这些复制模式都是同步进行的,同步时间非常短 每一个节点都可以同时写入和读取,当某一节点发生故障时,可自动从集群中自动剔除 HAProxy能提供负载均衡和故障判断等功能解决服务器系统存在的单点故障 Keepalived能提供客户端连接数据库时使用的虚拟IP地址(VIP) 关于HAProxy的负载均衡...
本次搭建目的是使用 haproxy + keepalived + mysql(双主复制) 搭建 mysql 高可用集群,使用 keepalived 监控 haproxymysql 状态,如果 haproxy 服务异常则将 VIP 漂移到另外的机器上。参考:MySQL 双主复制参考:HAProxy 安装HAProxy 学习下面是本次试验使用的配置文件信息 4. 安装 keepalived 这里直接使用 yum 安装 4.1 修改配置文件 主备基本差不多,主要注意 这三个参数 这里有一个问题, 能不能配
前文仅仅通过mysql双主 + keepalived实现高可用,这种方式在一台出现问题的时候可以切换,但是正常情况下只有一台服务使用,无法实现负载均衡,本文引入haproxy实现正常情况下也能有负载均衡的效果. 安装haproxy yum install haproxy 修改haproxy配置文件 默认目录:/etc/haproxy/haproxy.cfg #----------------------------------------------------------------
Keepalived-mysql高可用 Keepalived介绍 ​ Keepalived的作用是检测服务器的状态,如果有一台服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其它服务器代替该服务器的工作,当服务器工作 正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。 ​ keepalived 针对 集群A和集群B,当集群A的管理节点宕机后,让集群B的管理节点上位 1、查看docker的cpu占用率:docker stats 2、进入cpu占用高的docker容器:docker exec -it 容器编号 /bin/bash 3、查看容器中具体进程cpu占用率,执行top,(如top命令无法使用,执行:export TERM=dumb ,然后在执行:top) 4、查看进程中线程cpu占用率:top -H -p 进程号 5、将异常线程号转化为16进制: printf “%x\n” 线程号 6、查看线程异常的日志信息:jstack 进程号|grep 16进制异常线
有很多 MySQL 高可用软件可以选择,其中比较常用的有以下几种: 1. MySQL Replication:MySQL 自带的复制功能,通过将数据从主服务器复制到一个或多个从服务器来提高可用性。 2. Galera Cluster:一个基于多主复制的 MySQL 集群,具有高可用性和一致性的特点。 3. Percona XtraDB Cluster:基于 Galera Cluster 开发的 MySQL 高可用集群解决方案。 4. MySQL Cluster:一个基于共享存储的 MySQL 集群解决方案,具有高可用性和高性能的特点。 5. MaxScale:用于提高 MySQL 的可用性、可扩展性和性能,同时还提供了负载均衡和故障转移等功能。 需要根据实际情况选择适合自己的 MySQL 高可用软件。