Mysql 5.7 集群部署,keepalived
参考文章:
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的更多相关文章
- Nginx 集群部署(Keepalived)
# Nginx集群部署 # 当我们的用户同时访问量达到一定量的时候,一台服务器是不够用的 # 这个时候我们需要解决这个问题肯定是要添加新的服务器去处理用户访问 # 多台服务器处理用户访问就需要我们集群 ...
- 高可用Mysql架构_Mycat集群部署(HAProxy + 两台Mycat+Mysql双主双从)
既然大家都知道了Mysql分布式在大型网站架构中的作用,在这里就不再阐述.本片博客文章是基于我曾经搭建过的一个Mysql集群基础上实现的,实现过双主热备.读写分离.分库分表. 博客链接:http:// ...
- Centos 7 下 Mysql 5.7 Galera Cluster 集群部署
一.介绍 传统架构的使用,一直被人们所诟病,因为MySQL的主从模式,天生的不能完全保证数据一致,很多大公司会花很大人力物力去解决这个问题,而效果却一般,可以说,只能是通过牺牲性能,来获得数据一致性 ...
- 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和集群
作者:程润科 数据库研发工程师 编辑:张莉梅 高级文档工程师 视频:钱芬 高级测试工程师 本文将演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Oper ...
- Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived
文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...
- MySQL Cluster 集群部署
前言 此篇博客用以介绍 MySQL Cluster 集群部署方法 一.节点规划 序号 IP地址 节点名称 1 172.16.1.201 mysql-manage 2 172.16.1.202 mysq ...
- 部署MYSQL高可用集群
mysql-day08 部署MYSQL高可用集群 u 集群架构 ...
- MySQL MHA 高可用集群部署及故障切换
MySQL MHA 高可用集群部署及故障切换 1.概念 2.搭建MySQL + MHA 1.概念: a)MHA概念 : MHA(MasterHigh Availability)是一套优秀的MySQL高 ...
- Docker搭建MySQL的PXC集群
原文:Docker搭建MySQL的PXC集群 一.简介 PXC属于一套近乎完美的mysql高可用集群解决方案,相比那些比较传统的基于主从复制模式的集群架构MHA和MM+keepalived,galer ...
随机推荐
- 修改文件权限后,再git pull后提示文件已修改
问题: 从git上面pull下来脚本文件,在Linux上面执行.执行chmod +x 后,如果再次有修改文件,git pull 的提示会终止.每次都要使用 git checkout -- <fi ...
- javascript 字符串 数字反转 字母大小写互换
// 符串abcd123ABCD456 怎么转换为 ABCD321abcd654 // 数字要倒序 小写转大写, 大写转小写 Array.prototype.reverse = function() ...
- django ORM教程(转载)
Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ...
- 鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步 | 百篇博客分析OpenHarmony源码 | v29.01
百篇博客系列篇.本篇为: v29.xx 鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁当立 ...
- RabbitMQ 3.9.7 镜像模式集群的搭建
1. 概述 老话说的好:做人脚踏实地,一步一个脚印,便定能战胜一切困难,最终取得成功!!! 言归正传,之前我们聊了 RabbitMQ 单点服务的安装,今天我们来聊聊 RabbitMQ 3.9.7 镜像 ...
- 反调试——7——CRC检测
反调试--7--CRC检测 CRC32: CRC的全称是循环冗余校验,作用是为了检测数据的完整性. CRC32的检测原理: 程序被编译后,代码段是固定的,因为已经被写死了. 我们在调试程序的时候,打断 ...
- 树莓派3B搭建NODE-RED运行环境并构建数据流
树莓派3B搭建NODE-RED运行环境并构建数据流 树莓派搭建Node-RED环境 树莓派自2015年开始是默认就带NODE-RED的,但是如今已是2018年:)自带的版本已经很老了,可通过下面的命令 ...
- c++-string类--insert函数
string &insert(int p0, const char *s);--在p0位置插入字符串s string &insert(int p0, const char *s, in ...
- Lynis 漏洞扫描工具部署及效果展示
Lynis 漏洞扫描工具部署及效果展示 介绍 Lynis是一个安全审计工具,它可以在Linux,macOS和其他基于Unix的系统上运行.Lynis的主要重点是执行系统的运行状况检查,它还有助于检测漏 ...
- I/O系统
I/O系统的组成 外部设备 接口部件 总线 相应的管理软件 I/O软件 将用户编制的程序(或数据)输入主机内 将运算结果输出给用户 实现输入输出系统与主机工作的协调 I/O系统的基本功能 完成计算机内 ...