阿里云环境迁移记录 - MYSQL高可用搭建

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 88gongxiang
    }
    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 88gongxiang
    }
    notify_master /etc/keepalived/notify_master_mysql.sh    #此条指令告诉keepalived发现自己转为MASTER后执行的脚本
    virtual_ipaddress {
        192.168.72.109
    }
}

修改keepalived的日志输出,默认输出在/var/log/message

vim /etc/rsyslog.conf

keepalived -S 0
local0.*                                                /var/log/keepalived.log

未完待续。。。

原文地址:http://blog.51cto.com/10705830/2351455

时间: 2024-11-08 00:52:56

阿里云环境迁移记录 - MYSQL高可用搭建的相关文章

阿里云环境迁移记录

最近公司计划将目前托管在数据中心服务器环境迁移到阿里云,过程中涉及到服务器规划.申请.服务搭建.数据同步以及运维监控,特撰文记录. 下面是服务端环境规划: 我的工作从数据服务组的准备开始,包括如下内容:1. mysql高可用搭建MYSQL高可用 mongo集群搭建 redis集群搭建 rabbitmq搭建 数据迁移方案 分别会用五篇文章记录下,以此迎接2019新年. 原文地址:http://blog.51cto.com/10705830/2351452

阿里云环境迁移记录 - 服务监控及报警

服务监控的方案有很多,譬如naigos,zabbix这种,不但可以监控服务,还可以监控cpu.内存.磁盘.网络流量.服务端口等,关于naigos和zabbix的搭建配置,需要另外篇幅介绍,这里使用服务器自身的定时任务+脚本+邮件功能完成一个简单的监控. Part1 邮件服务搭建 安装mailx yum -y install mailx ##############################qq个人邮箱配置############################ vim /etc/mail.

阿里云环境迁移记录 - Mongo ReplicationSet搭建

mongo集群的搭建,至少需要3个节点,2两个数据节点和1个仲裁节点,所以这里使用三台机器搭建一个包含3节点的replicationSet. 1. 下载解压安装:mkdir -P /opt/installcd /opt/install/wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.3.tgz #从远程服务器copy到本地安装目录rsync -avzh root@47.92.212.35:/data/in

MySQL高可用架构-MHA环境部署记录

一.MHA介绍 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是日本的一位 MySQL专家采用Perl语言编写的一个脚本管理工具,该工具仅适用于MySQLReplication(二层)环境,目的在于维持Master主库的高可用性.是一套优秀的作为MySQL高可用性 环境下故障切

生产环境下ftp的迁移并构建高可用

说明:这是1个小项目就两台DELL的服务器,和一台IP SAN存储(DELL MD3200i).原来是4台小服务器,而且服务器太老了,经常有问题,这回相当于一次ftp的迁移,以前用的是proftp,这次换成了vsftp.数据量有2.5T. 拓扑很简单: 系统:CENTOS 6.4(64bit) 高可用软件:corosync+pacemaker host:ftp1 192.168.1.190 ftp2  192.168.1.191 stonith(ipmi):ftp1 192.168.1.180

基于PXC的MySQL高可用环境简单部署

PXC简介 Percona XtraDB Cluster(简称PXC集群)提供了MySQL高可用的一种实现方法. 1.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. 2.每个节点都是普通的mysql/percona服务器,可以将现有的数据库服务器组成集群,反之,也可以将集群拆分成单独的服务器. 3.每个节点都包含完整的数据副本. PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(使

优酷土豆资深工程师:MySQL高可用之MaxScale与MHA

本文根据DBAplus社群第67期线上分享整理而成 本次分享主要包括以下内容: 1.MySQL高可用方案 2.为什么选择MHA 3.读写分离方案的寻找以及为什么选择Maxscale 一.MySQL  Failover的方案 常见的Failover方案 MMM MMM缺点: Monitor节点是单点,可以结合Keepalived实现高可用目前MySQL Failover 的方案 Keepalived会有脑裂的风险 在读写繁忙的业务中可能丢数据 MHA + ssh -o 测试心跳 + masterM

搭建MySQL高可用负载均衡集群

1.简介 使用MySQL时随着时间的增长,用户量以及数据量的逐渐增加,访问量更是剧增,最终将会使MySQL达到某个瓶颈,那么MySQL的性能将会大大降低.这一结果也不利于软件的推广. 那么如何跨过这个瓶颈,提高MySQL的并发量呢?方法有很多,分布式数据库.读写分离.高可用负载均衡.增加缓存服务器等等.之前的文章里已经介绍了读写分离的方案了,接下来我将讲解MySQL高可用负载均衡这一方法. 其中实现高可用负载均衡的方法有很多,例如LVS+keepalived组合实现.haproxy+keepal

MySQL高可用之MHA的搭建

MySQL MHA架构介绍: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正的高可用. 该软件由两部分组成:MHA Manag