MYSQL高可用方案主要分为两大类,一类是前置管理,一类是后置管理。

前置管理的思想是利用各种前置管理工具,动态切换或者分发请求到不同的实例并切换master,如keepalived、MHA、packmaker+Corosync、MySQLProxy等,一般通过暴露VIP将整个MYQL集群隐藏起来,其中Proxy主要用以读写分离。后置管理则是利用共享存储的思想,如NDB方案。由于我们的用户尚不足百万,所以一开始的计划是选择最简单的前置管理模式-双主+keepalived方案,后来因为阿里云停用了VIP服务,于是购买了其提供的负载均衡SLB服务(替代keepalived使用),最终完成了双主+VIP的搭建。不管怎样,keepalived的思想还是比较经典的,所以也做了简单记录。

Part1 mysql bin 方式安装和配置

#查询已经存在的mysql并删除

rpm -qa |grep mysql

rpm -qa |grep mariadb

#删除已经存在的mysql

rpm -e --nodeps mariadbxxxx

rpm -e --nodeps mysqlxxxx

#下载解压并copy到/usr/local/mysql

#创建mysql数据日志目录

mkdir -p /data/mysql/data

mkdir -p /data/mysql/log

mkdir -p /data/mysql/bak

#初始化my.cnf

[mysql]

default-character-set=utf8

[mysqld]

character_set_server=utf8

default-storage-engine=INNODB

datadir=/data/mysql/data

#socket=/data/mysql/data/mysql.sock

port=3306

symbolic-links=0

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

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

###将support-files的mysql.server copy 到etc/init.d/以开机启动

cd /usr/local/mysql/support-files/

cp mysql.server /etc/init.d/mysql

#修改mysql默认配置

vim /etc/init.d/mysql

basedir=/usr/local/mysql

datadir=/data/mysql/data

#创建mysql系统用户并授权到mysql启动

groupadd mysql

useradd -r -g mysql mysql

passwd mysql

mysqlpwd

chown -R mysql:mysql /usr/local/mysql/

chown -R mysql:mysql /data/mysql/

#将mysqlbin目录添加到环境变量

echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile

source /etc/profile

#初始化mysql数据库

yum install libaio-devel.x86_64

mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data

#获取初始密码

tail -f /data/mysql/log/mysql.log

[Note] A temporary password is generated for root@localhost: im>wqfae&7tY

#给数据库加密

mysql_ssl_rsa_setup --datadir=/data/mysql/data

chown -R mysql:mysql /data/mysql/

##设置开机自动重启

chkconfig --add mysql

chkconfig mysql on

##查看、停止、重启mysql

systemclt status mysql.service

systemctl start mysql.service

systemctl stop mysql.service

systemctl restart mysql.service

#启动mysql服务

systemctl start mysql.service

#使用初始密码登录

mysql -uroot -p --socket=/data/mysql/data/mysql.sock

#设置新密码,授权root用户访问

set password=password('*******');

grant all privileges on *.* to root@'%' identified by '('*******');';

flush privileges;

Part2 mysql高可用配置 - keepalived

1. 配置master1和master2 binlog

#master1配置

[mysqld]

log-bin=mysql-bin

server-id=70

gtid_mode = on

enforce_gtid_consistency = 1

log_slave_updates=1

#binlog-ignore=mysql

#binlog-ignore=information_schema

#replicate-do-db=platform88

#master2配置

[mysqld]

log-bin=mysql-bin

server-id=71

gtid_mode = on

enforce_gtid_consistency = 1

log_slave_updates=1

#binlog-ignore=mysql

#binlog-ignore=information_schema

#replicate-do-db=platform88

#read_only=1

###备注:手动切换主库

mysql> stop slave;

#千万不要执行 reset master,否则会从最先的GTID上开始执行。

mysql> change master to master_host='127.0.0.1',master_user='rep',master_password='rep',master_port=3307,master_auto_position=1; #指定到另一个比较接近主的从上。

mysql> start slave;

2. 创建可互相访问的用户

#master1配置

CREATE USER 'ms_repl_usr'@'172.26.27.71' IDENTIFIED BY 'ms_repl_pwd';

GRANT REPLICATION SLAVE ON *.* TO 'ms_repl_usr'@'172.26.27.71';

FLUSH PRIVILEGES;

#master2配置

CREATE USER 'ms_repl_usr'@'172.26.27.70' IDENTIFIED BY 'ms_repl_pwd';

GRANT REPLICATION SLAVE ON *.* TO 'ms_repl_usr'@'172.26.27.70';

FLUSH PRIVILEGES;

查看binlog及位移

show master status \G

#master1配置

CHANGE MASTER TO

MASTER_HOST='172.26.27.71',

MASTER_PORT=30468,

MASTER_USER='ms_repl_usr',

MASTER_PASSWORD='ms_repl_pwd',

MASTER_LOG_FILE='mysql-bin.000002',

MASTER_LOG_POS=1459;

或者:

change master to master_host='172.26.27.71',master_user='ms_repl_usr',master_password='ms_repl_pwd', master_auto_position=1;

#master2配置

CHANGE MASTER TO

MASTER_HOST='172.26.27.70',

MASTER_PORT=30468,

MASTER_USER='ms_repl_usr',

MASTER_PASSWORD='ms_repl_pwd',

MASTER_LOG_FILE='mysql-bin.000002',

MASTER_LOG_POS=2086;

或者:

change master to master_host='172.26.27.70'',master_user='ms_repl_usr',master_password='ms_repl_pwd', master_auto_position=1;

#分别重启master1和master2

查看 salve status

show slave status \G

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

3. keepalived 配置

keepalived主要用检测对方服务的状态,并通过关闭或者重启自身服务达到切换VIP优先级的效果。keepalived可以监控4层或者7层网络,4层通过配置虚拟服务实现,本例子中使用7层监控。

#master1 配置

vrrp_script chk_mysql {

script "/etc/keepalived/check_mysql.sh"

interval 30 #设置检查间隔时长,可根据自己的需求自行设定

}

vrrp_instance VI_1 {

state BACKUP #通过下面的priority来区分MASTER和BACKUP,也只有如此,底下的nopreempt才有效

interface eth0

virtual_router_id 51

priority 100

advert_int 1

nopreempt #防止切换到从库后,主keepalived恢复后自动切换回主库

authentication {

auth_type PASS

auth_pass PWD

}

track_script {

chk_mysql

}

virtual_ipaddress {

192.168.72.109

}

}

#master2配置

! Configuration File for keepalived

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass PWD

}

notify_master /etc/keepalived/notify_master_mysql.sh #此条指令告诉keepalived发现自己转为MASTER后执行的脚本

virtual_ipaddress {

192.168.72.109

}

}

#check_mysql.sh主要用来监听或者链接mysql实例,如果发现mysql无法连接,则直接重启keepalived,或者停止keepalived,让虚拟IP漂移到另一台服务器上。这里以监听端口为例:

#!/bin/bash

#This scripts is check for Mysql Slave status

echo 'testing...'

counter=`netstat -luntp|grep 3306|wc -l`

echo 'after counting...'

if [ "$counter" -eq 0 ];

then

echo "3306 is down..."

systemctl stop keepalived

else

echo '3306 is working..'

fi

check脚本中经常遇到的一个问题是,命令需要用全路径,如mysql登录,

/usr/local/mysql/bin/mysql -uroot -pxxxx --port 3306

修改keepalived的日志输出,默认输出在/var/log/message。从keepalived的日志中可以看到,master切换的过程。

vim /etc/rsyslog.conf

keepalived -S 0

local0.* /var/log/keepalived.log

阿里云SLB配置实现keepalived效果

#通过负载均衡管理界面创建主备服务器组

#添加双主实例

这样就完成了阿里云双主的搭建,从这个结构延伸开来,可以分别为两个主节点添加slave节点,行程4或者6节点结构。如果需要读写分离,提高资源的利用率,可以通过前置mysqlproxy来将读写分开。

阿里高可用mysql搭建方案_阿里云环境迁移记录 - MYSQL高可用搭建相关推荐

  1. linux下mysql 有双机_在Linux环境下配置mysql cluster双机集群

    一.介绍 如何安装配置基于2台服务器的MySQL集群.并且实现任意一台服务器出现问题或宕机时MySql集群依然能够继续运行.加下后续的(keepalived+lvs+mysql cluster文档), ...

  2. 华为私有云的搭建方案_华为云搭建word press

    今天一时兴起买了华为云的一年的云服务器,闲来无事,先搭一个简单的小网站玩玩.下面开始吧! 华为云服务器连接: 买完华为云服务器后当时也没看见默认密码在哪,所以说直接重置走起: 然后首先开放一下安全组, ...

  3. mysql bi方案_《奥威Power-BI基于MySQL数据源制作报表》精彩回顾

    就在昨天,粉丝界终于有一碗粉丝修成正果,追了周杰伦16年,他的偶像终于请他吃了一碗面,简直就是十六年的粉丝熬成了一碗面,丝儿们既羡慕又感叹:追的是一种精神!只要你请我吃面,喜欢你20年都不是问题! 算 ...

  4. 阿里云rds for mysql平台介绍_阿里云RDS for MySQL 快速入门——笔记

    1初始化配置 1.1设置白名单 创建RDS实例后,需要设置RDS实例的白名单,以允许外部设备访问该RDS实例.默认的白名单只包含默认IP地址127.0.0.1,表示任何设备均无法访问该RDS实例. 设 ...

  5. 阿里云的mysql主机名_阿里云的数据库主机名是什么

    全网最新活动请看下方内容或右侧内容! --------------- 阿里云的数据库主机名是什么,阿里云怎么建数据库. 在阿里云ecs云服务器上部署数据库后,在平常的操作中可能会遇到些问题,可以先做个 ...

  6. 获取阿里云mysql实例名称_阿里云如何获取数据库名字

    全网最新活动请看下方内容或右侧内容! --------------- 阿里云如何获取数据库名字,阿里云服务器回滚数据库. 对于大多数小型或初期项目来说,我们可能常用的做法是先将web.数据库全部安装在 ...

  7. 阿里对mysql的优化_阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结...

    更多内容:https://www.toutiao.com/i6599796228886626829/?tt_from=weixin&utm_campaign=client_share& ...

  8. mycat mysql ha 方案_7、基于 HA 机制的 Mycat 高可用--mycat

    在实际项目中,Mycat 服务也需要考虑高可用性,如果 Mycat 所在服务器出现宕机,或 Mycat 服 务故障,需要有备机提供服务,需要考虑 Mycat 集群. 1. 高可用方案 使用 HAPro ...

  9. 阿里云mysql密码多少_阿里云默认数据库密码是多少

    阿里云默认数据库密码是多少,阿里云ecs建数据库. 对于大多数小型或初期项目来说,我们可能常用的做法是先将web.数据库全部安装在一起,后期根据需要来看是否将数据库单独迁移分离.传统物理服务器可以这么 ...

最新文章

  1. 暗时间:开发效率为何如此低下
  2. Java面试题汇总及答案2021最新(序列化含答案)
  3. MT7688 坑爹的 SPI Master 半双工全双工问题
  4. 《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.13 创建视图...
  5. [webpack3.8.1]Guides-4-Output Management(输出管理)
  6. 大数据计算引擎:impala对比hive
  7. 小米回应“米家”商标争议;人人 App 回归社交市场;TiDB 2.1.19 发布| 极客头条...
  8. Mysql 远程自动化备份
  9. android DisplayMetrics
  10. AS打包出现app:transformClassesAndResourcesWithProguardForRelease错误
  11. office 2019 word公式键盘输入空格无响应
  12. 有关液压的相关知识(1)-螺纹与齿轮泵
  13. 女程序员写代码被骂,把领导萌死,成功治愈“选择困难症”
  14. 清除HTML的超链接样式,Markdown导出HTML,删除超链接下划线和字体样式
  15. 京东安卓客户端values文件夹
  16. 关于网易云验证码的服务介绍
  17. 华为各类工程师通信基础面试题目及答案
  18. HTML5 canvas 行星环绕
  19. 多租户数据隔离的三种方案
  20. 干货!常见waf识别

热门文章

  1. HR SaaS如何黏住用户?企飞要从财税优化等刚需服务切入
  2. 2020云智中国:百度智能云杨晓梅-百度OCR助力企业开启智能化升级快速通道
  3. 又上热搜!多所高校取消硕士新生奖学金
  4. 千亿二手手机市场 电子垃圾也有新一春
  5. 【题解】UVA10271:佳佳的筷子 Chopsticks
  6. python 怎么算l2范数,回归模型中成本函数的L1范数而不是L2范数
  7. 树莓派zero,连接手机USB共享网络
  8. kotlin 对话框_Kotlin教程中的android警报对话框
  9. 玩转通讯录备份(JNI实战)
  10. 斥资100亿美金!美高梅将在日本大阪开发世界级综合度假目的地