概要:Mysql互为主从顾名思义就是两台数据库都是主数据库同时也是对方的从数据库,只需在配置主从的基础下在将主数据库设置从数据库的从数据库。Mysql的高可用方案是申请虚拟ip去访问mysql服务,通过keepalived监控mysql服务是否持续在线来决定虚拟ip飘移到哪台机器。
一、Mysql安装
1.下载rpm包
sudo wget http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm
sudo rpm -ivh mysql57-community-release-el7-10.noarch.rpm
2.安装启动mysql
sudo yum -y install mysql-community-server
sudo systemctl start mysqld
sudo systemctl enable mysqld(开机自启)
3.初始化mysql
在/var/log/mysqld.log文件中找到初始密码(查找@localhost关键字后)
登录后修改密码 mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Sytest@123456';
4.授权远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Sytest@123456' WITH GRANT OPTION;
%表示任意机器(可设置为C域网络等)
开启防火墙 sudo systemctl start firewalld.service
开放3306 sudo firewall-cmd --add-port=3306/tcp --permanent
重新加载 sudo firewall-cmd --reload
关闭防火墙 sudo systemctl stop firewalld.service
5.设置数据库编码格式
vim /etc/my.cnf
添加
character_set_server=utf8
init_connect='SET NAMES utf8'
重启后进入数据库执行下面语句查看编码格式
show variables like '%chara%';
tips:
数据文件位置:/var/lib/mysql
配置文件位置:/etc/my.cnf
日志文件位置:/var/log/mysqld.log
二、Mysql互为主从配置
1. 前提条件
两台安装相同版本的MySQL数据库.配置免密:
mysql_config_editor set --login-path=local --user=root --port=3306 --password
mysql_config_editor print --all
主备机NTP时钟同步
双机互信配置ssh免密认证(过程如下):
双机执行ssh-keygen -t rsa 回车默认存储到/root/.ssh/id_rsa.pub
将双机得到的id_rsa.pub传输到对方的/root/.ssh/authorized_keys
命令格式:scp ~/.ssh/id_rsa.pub 对方地址:/root/.ssh/authorized_keys
2. 修改my.cof数据库配置文件
设置master主机mysql配置文件
vi /ect/my.cnf
主机:
[mysqld]
log-bin=mysql-bin
server-id=100
expire_logs_days = 10
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
从机:
[mysqld]
log-bin=mysql-bin
server-id=101
expire_logs_days = 10
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
3. 创建复制账号并同步
Master和Slave分别启动mysql:systemctl start mysqld
Master和Slave分别查询mysql状态:show master status
Master和Slave分别执行,创建数据同步复制账号
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'root'@'%' IDENTIFIED BY 'replication';
flush privileges;
在Master主机上,执行同步操作
change master to
master_host='从机的ip地址',
master_port=3306,
master_user='用户名',
master_password='用户登录数据库的密码',
master_log_file='mysql-bin.000001(从机的日志文件名)',
master_log_pos=154(从机的日志文件位置);
start slave;
在Slave从机上,执行同步操作
change master to
master_host='主机的ip地址',
master_port=3306,
master_user='用户名',
master_password='用户登录数据库的密码',
master_log_file='mysql-bin.000001',
master_log_pos=154;
start slave;
Master和Slave分别执行: show slave status\G
查看Slave_IO_Running: Yes和Slave_SQL_Running: Yes,若非Yes则未成功
4. 测试是否同步成功
主机新建数据库看从机是否同步,从机删除刚同步的数据库看主机是否同步
三、keepalive安装
1. 安装依赖插件
yum install -y gcc openssl-devel popt-devel
2. 安装keepalive
wget -q http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
tar -zxvf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure && make && make install
3. 初始化设置
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/s bin/keepalived /usr/s bin/
chkconfig --add keepalived
chkconfig --level 345 keepalived on
四、keepalive配置mysql高可用
1. Master主机/Slave从机环境配置
在 /home/mysql 目录下编辑环境文件
vi .mysqlenv
MYSQL=/usr/bin/mysql
MYSQL_CMD="--login-path=local"
#远端主机的IP地址
REMOTE_IP=从机/主机地址 #(master填从机,slave填主机)
export mysql="$MYSQL $MYSQL_CMD "
2. 服务检查、切换脚本
前提:
数据库免密,ssh互通,mysql互为主从设置成功,配置好mysql环境配置
切换过程
- 在Master主机上keepalived运行时执行mycheck.sh脚本不停的检查mysql的运行状态,当发现mysql停止后将keepalived进程杀掉。
- 此时Slave主机上会接管虚拟IP地址,并调用notify_master定义的脚本
- 当原Master主机上的mysql和keepalived进程恢复正常后,会调用notify_backup定义的脚本,此时数据库的主端还在Savle主机上。
- 回切,关闭Slave端的keepavlied进程,会调用notify_stop脚本,同时Master主机上会调用notify_master定义的脚本。此时数据库的主端在Master主机上
- 启动Slave端的keepavlied进程,会调用notify_backup脚本,此时完成数据同步。
脚本可放置在/home/mysql下,进入目录创建如下文件:
Logs // 存储日志文件的目录
mybackup.sh // 清空slave配置,重新获取远程日志文件及Pos,并开启同步
mycheck.sh // 检查mysql运行状态,正常则退出。不正常则keepalive自杀
mymaster.sh // 先判断同步复制是否执行完成,若未完成等待1分钟后,停止同步,并记录切换后的日志和Pos
.mysqlenv // 脚本运行环境文件
mystop.sh // 设置参数保证数据库不丢失,最后检查是否还有写操作,最后一分钟退出
syncposfile // 目录,每次切换后,Master最后一次File值和Position值
3. keepalived.conf配置
- 在Master端和Savle端均安装好keepalived后,进行配置,修改/etc/keepalived/keepalived.conf文件.
默认脚本位置/etc/keepalived/keepalived.conf
4. 验证切换过程
- 查看服务是否正常启动
- ps -ef|grep mysqld
- ps -ef|grep keepalived
- 检查脚本切换状态,查看记录脚本的日志 /home/mysql/logs/mysql_switch.log
- tail -f /home/mysql/logs/mysql_switch.log
- 可以看到 mycheck.sh is running 即正常
- 停止Mysql服务,观察日志变化,观察虚拟ip变化
- systemctl stop mysqld
- ip addr
作者:詹琉
链接:移动云开发者社区
来源:移动云官网开发者社区