Linux下搭建高可用MySQL
说明:首先准备两台centos 7系统的虚拟机,MySQL使用5.6版本。
安装MySQL
分别在两台虚拟机中安装MySQL
在Linux中解压mysql-libs.zip包,包内包含三个文件
-rw-r--r--. 1 root root 18509960 3月 26 2015 MySQL-client-5.6.24-1.el6.x86_64.rpm
-rw-r--r--. 1 root root 3575135 12月 1 2013 mysql-connector-java-5.1.27.tar.gz
-rw-r--r--. 1 root root 55782196 3月 26 2015 MySQL-server-5.6.24-1.el6.x86_64.rpm
1.检查有没有MySQL的服务
[root@hadoop101 mysql-libs]# rpm -qa | grep -i mysql
2.1卸载MySQL
rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64
2.2拆卸mariadb(centos7默认安装)
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
3.安装MySQL
0)安装autoconf
yum -y install autoconf
1)安装MySQL服务端
[root@hadoop101 mysql-libs]# rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm
2)安装MySQL客户端
[root@hadoop101 mysql-libs]# rpm -vih MySQL-client-5.6.24-1.el6.x86_64.rpm
3)查看产生的随机密码
[root@hadoop101 mysql-libs]# cat /root/.mysql_secret
5DWcGJQj_fbBWGby
4)启动MySQL服务
[root@hadoop101 mysql-libs]# service mysql start
5)使用随机密码登录MySQL
[root@hadoop101 mysql-libs]# mysql -uroot -p5DWcGJQj_fbBWGby
6)修改密码
mysql> set password=password("****");
7)进入MySQL,配置无主机登录
进入mysql库
mysql> update user set Host='%' where Host='localhost';
8)刷新用户
flush privileges;
配置两台MySQL互为主从
两台虚拟机都要进行如下配置,注意server_id不能相同
[root@hadoop101 mysql-libs]# rm -rf /etc/my.cnf
[root@hadoop101 mysql-libs]# cp /usr/share/mysql/my-default.cnf /etc/my.cnf
[root@hadoop101 mysql-libs]# vi /etc/my.cnf
添加配置:
server_id = 101
log-bin = mysql-bin
binlog_format = mixed
relay_log = mysql-relay
log_bin_trust_function_creators=1
将my.conf配置文件分发至hadoop102机器,并修改server_id = 102
两台机器配置好后重启服务 service mysql restart
在主机上使用root用户登录MySQL,授权从机可以使用哪个用户登录,注意授权是双向的。
mysql> GRANT replication slave ON *.* To 'slave'@'%' IDENTIFIED BY 'liuhao';
以hadoop101为主机,hadoop102为从机
查看主机binlog文件的最新位置并记下
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 311 | | | |
+------------------+----------+--------------+------------------+-------------------+
在从机hadoop012上备份主机的binlog文件
mysql> change master to master_user='slave',master_password='****',master_host='192.168.1.101',master_log_file='mysql-bin.000001',master_log_pos=311;
在从机上开启同步线程
mysql> start slave;
查看同步线程的状态
show slave status \G;
下面以hadoop102为主机,hadoop101为从机重复上面步骤
安装keepalived
高可用的MySQL需要借助keepalived实现
1.安装 openssl、openssl-devel、gcc glibc
yum install -y openssl
yum install -y openssl-devel
yum install -y gcc glibc
2.http://www.keepalived.org/software/keepalived-1.2.22.tar.gz通过网址
下载keepalive压缩包并放入两台机器
3.解压至目标目录/opt/module
4.进入解压目录
[root@hadoop101 keepalived-1.2.13]# ./configure --prefix=/root/keepalived-1.2.13
5.编译并安装
[root@hadoop101 keepalived-1.2.13]# make && make install
安装完成后系统会在/root/keepalived-1.2.13目录下生成 bin etc sbin share 这 4 个目录
6.在系统的etc下创建keepalived文件夹
[root@hadoop101 keepalived-1.2.13]# mkdir -p /etc/keepalived/
启动时默认去这个路径加载配置文件
7.复制配置文件到刚才新创建的文件夹下
[root@hadoop101 keepalived-1.2.13]# cp /root/keepalived-1.2.13/etc/keepalived/keepalived.conf /etc/keepalived/
8.keepalived启动脚本变量引用文件,默认文件路径是/etc/sysconfig/,也可以不做软链接,直接修改启动脚本中文件路径即可(安装目录下)
[root@hadoop101 keepalived-1.2.13]# cp /root/keepalived-1.2.13/etc/sysconfig/keepalived /etc/sysconfig/keepalived
9.将keepalived主程序加入到环境变量(安装目录下)
[root@hadoop101 keepalived-1.2.13]# cp /root/keepalived-1.2.13/sbin/keepalived /usr/sbin/keepalived
10.# keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可以使用service命令便捷调用
[root@hadoop101 keepalived-1.2.13]# cp keepalived/etc/init.d/keepalived.init /etc/init.d/keepalived
修改配置文件
[root@hadoop101 keepalived-1.2.13]# vi /etc/keepalived/keepalived.conf
全部替换为以下配置:
! Configuration File for keepalived
global_defs {
router_id MySQL-ha
}
vrrp_instance VI_1 {
state master #初始状态
interface ens33 #网卡
virtual_router_id 51 #虚拟路由id
priority 100 #优先级
advert_int 1 #Keepalived心跳间隔
nopreempt #只在高优先级配置,原master恢复之后不重新上位
authentication {
auth_type PASS #认证相关
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100 #虚拟ip
}
}
#声明虚拟服务器
virtual_server 192.168.1.100 3306 {
delay_loop 6
persistence_timeout 30
protocol TCP
#声明真实服务器
real_server 192.168.1.101 3306 {
notify_down /var/lib/mysql/killkeepalived.sh #真实服务故障后调用脚本
TCP_CHECK {
connect_timeout 3 #超时时间
nb_get_retry 1 #重试次数
delay_before_retry 1 #重试时间间隔
}
}
}
编辑 /var/lib/mysql/killkeepalived.sh 脚本
[root@hadoop101 keepalived-1.2.13]# vi /var/lib/mysql/killkeepalived.sh
编写脚本:
#!/bin/bash
#结束当前机器的keepalive
service keepalived stop
给脚本赋予权限
chmod 777 /var/lib/mysql/killkeepalived.sh
配置keepalive开机自启动
加为系统服务:chkconfig --add keepalived
开机启动:chkconfig keepalived on
查看开机启动的服务:chkconfig --list
启动、关闭、重启service keepalived start|stop|restart
修改mysql和keepalive开机自启动脚本,保证mysql在keepalive之前启动
开机自启动脚本目录/etc/init.d
主要修改开机顺序,保证mysql在keepalive之前启动
chkconfig: 2345(启动级别 -代表全级别) 64(开机启动顺序,号小先启动) 36(关机顺序)
在另一台机器进行同样配置
全部配置完成后需要使用上面设置的虚拟IP连接MySQL