mysql主主、mysql-proxy读写分离、keepalived高可用完美组合
配置mysql主主复制
服务器A:172.16.100.9
服务器B:172.16.100.10
首先在服务器A和服务器B上各安装好单机版mysql5.7,安装好后,再继续下面的操作。
在服务器A和服务器B上都执行
wget ftp://ftp.pbone.net/mirror/ftp.centos.org/7.6.1810/cloud/x86_64/openstack-ocata/common/crudini-0.9-2.el7.noarch.rpm
wget ftp://ftp.pbone.net/mirror/ftp.centos.org/7.6.1810/cloud/x86_64/openstack-stein/openstack-utils-2017.1-1.el7.noarch.rpm
rpm -ivh crudini-0.9-2.el7.noarch.rpm
rpm -ivh openstack-utils-2017.1-1.el7.noarch.rpm
mkdir -p /usr/local/mysqldata/binlogs
mkdir -p /usr/local/mysqldata/relaylogs
chown -R mysql:mysql /usr/local/mysqldata
chmod -R 770 /usr/local/mysqldata
1.控制自增列的初始值为2和增量步长为1
openstack-config --set /etc/my.cnf mysqld auto_increment_offset 1
openstack-config --set /etc/my.cnf mysqld auto_increment_increment 2
2.启用binlog日志,只保留7天内的日志
openstack-config --set /etc/my.cnf mysqld log-bin /usr/local/mysqldata/binlogs/mysql-bin
openstack-config --set /etc/my.cnf mysqld max_binlog_size 1G
openstack-config --set /etc/my.cnf mysqld binlog_format ROW
openstack-config --set /etc/my.cnf mysqld expire_logs_days 7
3.配置中继日志的位置
openstack-config --set /etc/my.cnf mysqld relay-log /usr/local/mysqldata/relaylogs/slave-relay-bin
4.开启从库上的更新操作要写入binlog日志,以便从库的从库能够进行日志同步
openstack-config --set /etc/my.cnf mysqld log-slave-updates
5.设置每缓存20个事务就采用同步写磁盘的方式写入binlog日志
openstack-config --set /etc/my.cnf mysqld innodb_support_xa 1
openstack-config --set /etc/my.cnf mysqld sync_binlog 20
6.不记录系统数据库的二进制日志
sed -i "/^\[mysqld/a\binlog_ignore_db = mysql" /etc/my.cnf
sed -i "/^\[mysqld/a\binlog_ignore_db = information_schema" /etc/my.cnf
sed -i "/^\[mysqld/a\binlog_ignore_db = information_schema" /etc/my.cnf
sed -i "/^\[mysqld/a\binlog_ignore_db = sys" /etc/my.cnf
7.设置服务器的server-id
openstack-config --set /etc/my.cnf mysqld server-id $RANDOM
8.重启数据库
ps -ef | grep mysql | grep -v grep | awk '{print $2}' |xargs kill -9
/usr/local/mysqlrun/bin/mysqld_safe --defaults-file=/etc/my.cnf &
9.创建同步账号
grant replication slave on *.* to 'repl'@'172.16.100.9' identified by 'repl1234!';
grant replication slave on *.* to 'repl'@'172.16.100.10' identified by 'repl1234!';
flush privileges;
10.查看并记录master状态中的File和Position
reset master;
show master status;
得到的结果为:
mysql-bin.000001 和 154
在服务器A上执行
stop slave;
reset slave all;
change master to master_host='172.16.100.10',master_user='repl',master_password='repl1234!',master_log_file='mysql-bin.000001',master_log_pos=154;
start slave;
show slave status\G;
在服务器B上执行
stop slave;
reset slave all;
change master to master_host='172.16.100.9',master_user='repl',master_password='repl1234!',master_log_file='mysql-bin.000001',master_log_pos=154;
start slave;
show slave status\G;
配置keepalived高可用(不抢占)
服务器A:172.16.100.9
服务器B:172.16.100.10
VIP:172.16.100.12
VIP:172.16.100.13
首先在服务器A和服务器B上各安装好keepalived,安装好后,再继续下面的操作。
在服务器A上执行
1.编写脚本监控mysql状态
echo '#!/bin/bash
count = `ps aux | grep -v grep | grep mysql | wc -l`
if [ $count > 0 ];then
exit 0
else
exit 1
fi' > /etc/keepalived/checkmysql.sh
2.配置全局定义块
global_defs {
router_id mysqlserver01
}
3.keepalived只能做到对网络故障和keepalived本身的监控,配置脚本监控mysql服务状态
weight对priority的影响详情请参考https://www.cnblogs.com/arjenlee/p/9258188.html
vrrp_script checkmysql
{
script "/etc/keepalived/checkmysql.sh"
interval 3
weight -20
}
4.配置VRRP实例定义块
vrrp_instance instance1 {
state MASTER
virtual_router_id 1
interface eth0
mcast_src_ip 172.16.100.9
priority 100
advert_int 3
nopreempt
authentication {
auth_type PASS
auth_pass kee1234
}
virtual_ipaddress {
172.16.100.12
}
track_script {
checkmysql
}
}
vrrp_instance instance2 {
state BACKUP
virtual_router_id 2
interface eth0
mcast_src_ip 172.16.100.9
priority 90
advert_int 3
nopreempt
authentication {
auth_type PASS
auth_pass kee1234
}
virtual_ipaddress {
172.16.100.13
}
track_script {
checkmysql
}
}
在服务器B上执行
1.编写脚本监控mysql状态
echo '#!/bin/bash
count = `ps aux | grep -v grep | grep mysql | wc -l`
if [ $count > 0 ];then
exit 0
else
exit 1
fi' > /etc/keepalived/checkmysql.sh
2.配置全局定义块
global_defs {
router_id mysqlserver02
}
3.keepalived只能做到对网络故障和keepalived本身的监控,配置脚本监控mysql服务状态
weight对priority的影响详情请参考https://www.cnblogs.com/arjenlee/p/9258188.html
vrrp_script checkmysql
{
script "/etc/keepalived/checkmysql.sh"
interval 3
weight -20
}
4.配置VRRP实例定义块
vrrp_instance instance1 {
state BACKUP
virtual_router_id 1
interface eth0
mcast_src_ip 172.16.100.10
priority 90
advert_int 3
nopreempt
authentication {
auth_type PASS
auth_pass kee1234
}
virtual_ipaddress {
172.16.100.12
}
track_script {
checkmysql
}
}
vrrp_instance instance2 {
state MASTER
virtual_router_id 2
interface eth0
mcast_src_ip 172.16.100.10
priority 100
advert_int 3
nopreempt
authentication {
auth_type PASS
auth_pass kee1234
}
virtual_ipaddress {
172.16.100.13
}
track_script {
checkmysql
}
}
mysql-proxy实现读写分离
服务器:172.16.100.7
首先在服务器上安装好mysql-proxy,安装好后,再继续下面的操作。
1.修改配置文件
cat << EOF > /etc/mysql-proxy.cnf
[mysql-proxy]
user = root
admin-username=root
admin-password=123456
proxy-address=172.16.100.7
proxy-lua-script = /usr/local/myapps/mysql-proxy/lua/rw-splitting.lua
admin-lua-script = /usr/local/myapps/mysql-proxy/lua/admin-sql.lua
proxy-backend-addresses = 172.16.100.12
proxy-read-only-backend-addresses = 172.16.100.13
log-file=/usr/local/myapps/mysql-proxy/logs/mysql-proxy.log
log-level=debug
EOF
2.重启mysql-proxy服务
ps -ef | grep mysql-proxy | grep -v grep | awk '{print $2}' |xargs kill -9
/usr/local/myapps/mysql-proxy/bin/mysql-proxy --daemon --keepalive --defaults-file=/etc/mysql-proxy.cnf
mysql主主、mysql-proxy读写分离、keepalived高可用完美组合的更多相关文章
- Mycat - 实现数据库的读写分离与高可用
前言 开心一刻 上语文课,不小心睡着了,坐在边上的同桌突然叫醒了我,并小声说道:“读课文第三段”.我立马起身大声读了起来.正在黑板写字的老师吓了一跳,老师郁闷的看着我,问道:“同学有什么问题吗?”,我 ...
- MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(二)
ProxySQL安装 yum/rpm安装 在github或官网上可以下载rpm包,wiki的Getting start章节有详细介绍. cat <<EOF | tee /etc/yum.r ...
- 基于mysql主从同步的proxy读写分离
mysql-proxy 简介 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载 ...
- MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(一)
准备服务器: docker network create --subnet=192.168.0.0/16 staticnetdocker run -d --privileged -v `pwd`/my ...
- MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(三)
设置Keepalived VIP切换邮件告警 修改keepalived.conf配置: [root@server01 keepalived]# cat keepalived.conf ! Config ...
- haproxy mycat mysql 读写分离MHA高可用
主机IP信息 hostname IP 172.16.3.140 haproxy01 172.16.3.141 haproxy02 172.16.3.142 mycat01 172.16.3.143 m ...
- Mysql读写分离 及高可用高性能负载均衡实现
什么是读写分离,说白了就是mysql服务器读的操作和写的操作是分开的,当然这个需要两台服务器,master负责写,slave负责读,当然我们可以使用多个slave,这样我们也实现了简单意义上的高可用和 ...
- 基于Keepalived高可用集群的MariaDB读写分离机制实现
一 MariaDB读写分离机制 在实现读写分离机制之前先理解一下三种主从复制方式:1.异步复制:MariaDB默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库 ...
- MySQL的keepalived高可用监控脚本
MySQL的keepalived高可用监控脚本 MySQL(或者其它服务)的keepalived高可用监控脚本 开发脚本需求 :我们知道,keepalive是基于虚拟ip的存活来判断是否抢占maste ...
随机推荐
- 使用WebSocket实现简单的在线聊天室
前言:我自已在网上找好了好多 WebSocket 制作 在线聊天室的案列,发现大佬们写得太高深了 我这种新手看不懂,所以就自已尝试写了一个在线简易聊天室 (我只用了js 可以用jq ) 话不多说,直接 ...
- 【Wince-截图】对Wince进行截图
对Wince进行截图 方法一 使用Wince桌面助手对Wince进行截图 PC通过USB成功连接到手持机 打开Wince桌面助手CERHOST.exe程序 File->Capture进行截图 C ...
- HDU 3081 Marriage Match II 最大流OR二分匹配
Marriage Match IIHDU - 3081 题目大意:每个女孩子可以和没有与她或者是她的朋友有过争吵的男孩子交男朋友,现在玩一个游戏,每一轮每个女孩子都要交一个新的男朋友,问最多可以玩多少 ...
- ubuntu 16.04安装gitlab,然后汉化
1 前期准备 电脑配置:windows7 ,内存8GB以上(因为有4GB左右要分配给虚拟机中的ubuntu) 虚拟机:VBOX Linux系统:ubuntu16.04 64bit 2 Gitlab的搭 ...
- Financial Management(SDUT 1007)
Problem Description Larry graduated this year and finally has a job. He's making a lot of money, but ...
- bat 通过命令以管理员方式运行程序
@echo off mode con lines= cols= % mshta vbscript:CreateObject()(window.close)&&exit cd /d &q ...
- ACM之路(13)—— 树型dp
最近刷了一套(5题)的树型dp题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=116767#overview,算是入了个门,做下总结. ...
- shell脚本中根据端口号kill对应的应用进程
一.使用情景 在Jenkins的自动部署中,每次重新部署我们都需要先关闭原先的应用进程,然后重新部署启动.在使用tomcat时,我们可以通过startup.sh和shutdown.sh进行对应操作.但 ...
- 【Elasticsearch】Docker 安装 Elasticsearch 2.4.4 版本(高版本方式不同)
1. 下载 elasticsearch docker pull docker.elastic.co/elasticsearch/elasticsearch:6.4.3 2.启动 elasticsea ...
- 单调队列优化dp,k次移动求最长路
洛谷2254 给你k次移动 每次移动给你一个时间段 a,b和方向dir 地图上有障碍物 为了不撞上障碍物你可以施法让箱子停下来 问箱子可以走的最长路 ((以下是洛谷的题解)) /*首先考虑对于时间t来 ...