参考文章:

https://blog.csdn.net/f18770366447/article/details/80703347

https://www.cnblogs.com/benjamin77/p/8682360.html

https://www.xiaocoder.com/2017/03/17/mysql-installation-guide/

https://blog.csdn.net/hongguo_cheng/article/details/80293588

1,配置环境

两个节点,vcpu8个,内存8G,磁盘16G

操作系统:Centos7.5最小化安装

A节点IP地址:172.16.103.14 node1

B节点IP地址:172.16.103.15 node2

VIP:172.16.103.16

关闭selinux和防火墙

2,查看是否已经存在数据库,如果已经存在则卸载

rpm -qa |grep mysql //查看是否mysql数据库

rpm -qa |grep mari //查看是否又mariadb数据库

rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64 //卸载mariadb数据库,包的名字一定要是grep出来的全名

3,安装依赖包

yum install -y net-tools perl

4,下载mysql包,上传解压,安装。

下载5.7的mysql 社区版包

https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar

上传到/software目录下,解压

tar -xvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar

安装

rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm

5,创建目录,添加用户,设置所属

mkdir -p /data/mysql/{data,tmp,log}

groupadd mysql

useradd -g mysql mysql

chown -R mysql:mysql /data/mysql/{data,tmp,log}

6,修改配置文件

vi /etc/my.cnf

#配置文件内容开始

[client]

port = 3306

socket = /data/mysql/tmp/mysql.sock

default-character-set = utf8mb4

[mysqld]

port = 3306

datadir = /data/mysql/data

pid-file = /data/mysql/tmp/mysqld.pid

socket = /data/mysql/tmp/mysql.sock

log-error = /data/mysql/log/error.log

character_set_server = utf8mb4

user = mysql

bind-address = *

server-id = 1 #节点2修改为2

symbolic-links=1

connect_timeout = 3600

wait_timeout = 3600

interactive_timeout = 3600

explicit_defaults_for_timestamp = true

log-bin = mysql-bin

sync_binlog = 1

binlog_checksum = none

binlog_format = mixed

auto-increment-increment = 2

auto-increment-offset = 1 #节点2修改为2

slave-skip-errors = all

#配置文件内容结束

启动服务

systemctl start mysqld

8,登陆数据库并做相关配置获取mysql安装时的默认密码

MySQL_PASS=$(cat /data/mysql/log/error.log | grep "A temporary password" | awk '{print $NF}')

使用改密码登陆数据库

mysql -u root -p"${MySQL_PASS}"

设置新密码为:Admin123,.

mysql> SET PASSWORD='Admin123,.';

开启任意主机可使用root用户访问所有库,密码为ADmin123,.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'ADmin123,.' WITH GRANT OPTION;

9,节点2执行上面1-8步骤,然后添加同步账户

10,添加同步账户,账户名为repl,密码为ADMin123,.

节点1mysql> grant replication slave on *.* to 'repl'@'172.16.103.15' identified by 'ADMin123,.';

节点2mysql> grant replication slave on *.* to 'repl'@'172.16.103.14' identified by 'ADMin123,.';

使配置立即生效

mysql> flush privileges;

11,查看的主库状态

节点1

show master status;

节点2

show master status;

12,开始同步

节点1操作,change master 语句中填写节点2的信息

mysql> unlock tables;

mysql> stop slave;

mysql> change master to master_host='172.16.103.15',master_user='repl',master_password='ADMin123,.',master_log_file='mysql-bin.000003',master_log_pos=150;

mysql> start slave;

mysql> show slave status \G

具体过程

执行show slave status \G之后看到以下内容为正常!

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

节点2操作

节点2操作,change master 语句中填写节点1的信息

mysql> unlock tables;

mysql> stop slave;

mysql> change master to master_host='172.16.103.14',master_user='repl',master_password='ADMin123,.',master_log_file='mysql-bin.000002',master_log_pos=2848;

mysql> start slave;

mysql> show slave status \G

执行show slave status \G之后看到以下内容为正常!

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

13,主主同步测试

在节点1登陆数据库,创建数据库,创建表,插入数据,然后在节点2上查看。

解锁表

unlock tables;

创建ceshiku数据库

create database ceshiku;

使用ceshik数据库

use ceshiku;

创建表,名字为哈哈,后面是列是数据类型

create table if not exists haha ( id int(10) PRIMARY KEY AUTO_INCREMENT, name varchar(50) NOT NULL);

插入数据

insert into haha values(2,'guojing');

插入数据

insert into haha values(1,"huangrong");

查询表haha的所有数据

select * from haha;

以下是图形操作的过程

在节点2上查看同步过来的信息

select * from ceshiku.haha;

14,安装keepalived软件包,并集成成系统服务(两个节点都执行)

keepalived包的下载地址

http://www.keepalived.org/software/keepalived-1.3.5.tar.gz

所有版本

https://www.keepalived.org/download.html

上传keepalive包到/usr/local/src/下,安装依赖包,解压缩软件包,编译,安装

安装依赖包

yum install -y openssl-devel gcc

进入目录解压缩

cd /usr/local/src/

tar -zxvf keepalived-1.3.5.tar.gz

进入目录,编译,安装

cd keepalived-1.3.5

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

make && make install

拷贝相关目录和文件的到系统目录

cp /usr/local/src/keepalived-1.3.5/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/

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

mkdir -p /etc/keepalived/

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

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

echo "/etc/init.d/keepalived start" >> /etc/rc.local

15,配置keepaived服务

节点1配置

备份原有的conf文件

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

vi /etc/keepalived/keepalived.conf #删除配置文件中的所有内容,加入以下内容

#配置文件内容开始

! Configuration File for keepalived

global_defs {

notification_email {

ops@wangshibo.cn

tech@wangshibo.cn

}

notification_email_from ops@wangshibo.cn

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MASTER-HA

}

vrrp_script chk_mysql_port { #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等

script "/opt/chk_mysql.sh" #这里通过脚本监测

interval 2 #脚本执行间隔,每2s检测一次

weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5

fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)

rise 1 #检测1次成功就算成功。但不修改优先级

}

vrrp_instance VI_1 {

state MASTER

interface ens192 #指定自己的网卡接口和IP

mcast_src_ip 172.16.103.14

virtual_router_id 51 #路由器标识,MASTER和BACKUP必须是一致的

priority 101 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

172.16.103.16

}

track_script {

chk_mysql_port

}

}

#配置文件内容结束

编写检测脚本,KeepAlived做心跳检测,如果Master的MySQL服务挂了(3306端口挂了),那么它就会选择自杀。Slave的KeepAlived通过心跳检测发现这个情况,就会将VIP的请求接管

vi /opt/chk_mysql.sh

#脚本内容开始

#!/bin/bash

counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)

if [ "${counter}" -eq 0 ]; then

/etc/init.d/keepalived stop

fi

#脚本内容结束

给脚本添加执行权限

chmod 755 /opt/chk_mysql.sh

启动keepalived服务

systemctl start keepalived

如果启动延迟最终导致启动失败,最后keepalived的状态是下图所示。

然后查看日志:

tail -f /var/log/messages

Apr 16 18:35:18 node1 systemd: PID file /usr/local/keepalived/var/run/keepalived.pid not readable (yet?) after start.

Apr 16 18:36:48 node1 systemd[1]: keepalived.service start operation timed out. Terminating.

Apr 16 18:36:48 node1 systemd[1]: Failed to start LVS and VRRP High Availability Monitor.

Apr 16 18:36:48 node1 systemd[1]: Unit keepalived.service entered failed state.

Apr 16 18:36:48 node1 systemd[1]: keepalived.service failed.

这种情况下vip确实已经生效了,但是keepalived服务也没有正常开启,解决办法是编辑keepalived服务的pid文件指向的位置

vi /usr/lib/systemd/system/keepalived.service

PIDFile=/var/run/keepalived.pid

然后重载服务,重启服务

systemctl daemon-reload

systemctl start keepalived

systemctl status keepalived

节点2配置参照节点1配置,只是keepalived.conf配置文件的内容不通,具体内容如下

#配置文件内容开始

! Configuration File for keepalived

global_defs {

notification_email {

ops@wangshibo.cn

tech@wangshibo.cn

}

notification_email_from ops@wangshibo.cn

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MASTER-HA

}

vrrp_script chk_mysql_port { #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等

script "/opt/chk_mysql.sh" #这里通过脚本监测

interval 2 #脚本执行间隔,每2s检测一次

weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5

fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)

rise 1 #检测1次成功就算成功。但不修改优先级

}

vrrp_instance VI_1 {

state BACKUP

interface ens192 #指定自己的网卡接口和IP

mcast_src_ip 172.16.103.15

virtual_router_id 51 #路由器标识,MASTER和BACKUP必须是一致的

priority 100 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

172.16.103.16

}

track_script {

chk_mysql_port

}

}

#配置文件内容结束

同样参照节点1的配置,节点2同样需要配置检测脚本

vi /opt/chk_mysql.sh

#脚本内容开始

#!/bin/bash

counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)

if [ "${counter}" -eq 0 ]; then

/etc/init.d/keepalived stop

fi

#脚本内容结束

设置权限

chmod 755 /opt/chk_mysql.sh

同样要修改keepalived服务的pid文件指向的位置

vi /usr/lib/systemd/system/keepalived.service

PIDFile=/var/run/keepalived.pid

启动服务

systemctl start keepalived

检查keepalived的状态

systemctl status keepalived

可以看到该节点被定义为从节点了。

至此,使用navicat客户端连接vip即可,vip可以对外提供服务了。

Mysql 5.7 集群部署,keepalived的更多相关文章

  1. Nginx 集群部署(Keepalived)

    # Nginx集群部署 # 当我们的用户同时访问量达到一定量的时候,一台服务器是不够用的 # 这个时候我们需要解决这个问题肯定是要添加新的服务器去处理用户访问 # 多台服务器处理用户访问就需要我们集群 ...

  2. 高可用Mysql架构_Mycat集群部署(HAProxy + 两台Mycat+Mysql双主双从)

    既然大家都知道了Mysql分布式在大型网站架构中的作用,在这里就不再阐述.本片博客文章是基于我曾经搭建过的一个Mysql集群基础上实现的,实现过双主热备.读写分离.分库分表. 博客链接:http:// ...

  3. Centos 7 下 Mysql 5.7 Galera Cluster 集群部署

     一.介绍 传统架构的使用,一直被人们所诟病,因为MySQL的主从模式,天生的不能完全保证数据一致,很多大公司会花很大人力物力去解决这个问题,而效果却一般,可以说,只能是通过牺牲性能,来获得数据一致性 ...

  4. 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和集群

    作者:程润科 数据库研发工程师 编辑:张莉梅 高级文档工程师 视频:钱芬 高级测试工程师 本文将演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Oper ...

  5. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  6. MySQL Cluster 集群部署

    前言 此篇博客用以介绍 MySQL Cluster 集群部署方法 一.节点规划 序号 IP地址 节点名称 1 172.16.1.201 mysql-manage 2 172.16.1.202 mysq ...

  7. 部署MYSQL高可用集群

                                                  mysql-day08     部署MYSQL高可用集群 u 集群架构                   ...

  8. MySQL MHA 高可用集群部署及故障切换

    MySQL MHA 高可用集群部署及故障切换 1.概念 2.搭建MySQL + MHA 1.概念: a)MHA概念 : MHA(MasterHigh Availability)是一套优秀的MySQL高 ...

  9. Docker搭建MySQL的PXC集群

    原文:Docker搭建MySQL的PXC集群 一.简介 PXC属于一套近乎完美的mysql高可用集群解决方案,相比那些比较传统的基于主从复制模式的集群架构MHA和MM+keepalived,galer ...

随机推荐

  1. 性能再提升70%?大咖前瞻带你揭开.NET6的神秘面纱!

    本月初微软官宣.NET 6 的RC1即将在11月正式发布,这意味着.NET6正式版跟我们见面的时间又近了一步.在之前的.NET6预览版本中,微软加入了大量新功能特性,而在最终版本中将不再额外加入新的内 ...

  2. html jquey的选择器checkbox,select

    1 判断checkbox是否选中 用到 jquery的 is方法 jquery: <div id="divId" class="divTable"> ...

  3. canal源码之BooleanMutex(基于AQS中共享锁实现)

    在看canal源码时发现一个有趣的锁实现--BooleanMutex 这个锁在canal里面多处用到,相当于一个开关,比如系统初始化/授权控制,没权限时阻塞等待,有权限时所有线程都可以快速通过 先看它 ...

  4. 朴素贝叶斯原理、实例与Python实现

    初步理解一下:对于一组输入,根据这个输入,输出有多种可能性,需要计算每一种输出的可能性,以可能性最大的那个输出作为这个输入对应的输出. 那么,如何来解决这个问题呢? 贝叶斯给出了另一个思路.根据历史记 ...

  5. web带宽估算方法

    每个连接约占用10Kb的带宽,以3万总用户数和10%的在线率计算,并按照10%的冗余率,服务器总带宽=每秒总连接数*10Kbps /(1-冗余率)/1024. 带宽占用(Mbps)=30000*10% ...

  6. MySQL表空间回收的正确姿势

    不知道大家有没有遇到这样的一种情况,线上业务在MySQL表上做增删改查操作,随着时间的推移,表里面的数据越来越多,表数据文件越来越大,数据库占用的空间自然也逐渐增长 为了缩小磁盘上表数据文件占用的空间 ...

  7. dp凸优化/wqs二分学习笔记(洛谷4383 [八省联考2018]林克卡特树lct)

    qwq 安利一个凸优化讲的比较好的博客 https://www.cnblogs.com/Gloid/p/9433783.html 但是他的暴力部分略微有点问题 qwq 我还是详细的讲一下这个题+这个知 ...

  8. CF123E Maze(期望dp,树形dp,式子)

    题目大意: 给你一棵树,边权都是1,每一个点有一个是起点的概率和一个是终点的概率,你将以起点为根,开始在树上随机dfs,每到一个点,就会将他的所有儿子随机打乱成序列,然后按照那个随机顺序走完,直到走到 ...

  9. Java中的基本类型和包装类

    Java中基本数据类型与包装类型有   基本类型     包装器类型   boolean Boolean char Character int Integer byte Byte short Shor ...

  10. JS最简单的定时累加计数器

    js代码: 1 var timer , k = 0; 2 function star() { 3 k += 1; 4 document.getElementById("num"). ...