配置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高可用完美组合的更多相关文章

  1. Mycat - 实现数据库的读写分离与高可用

    前言 开心一刻 上语文课,不小心睡着了,坐在边上的同桌突然叫醒了我,并小声说道:“读课文第三段”.我立马起身大声读了起来.正在黑板写字的老师吓了一跳,老师郁闷的看着我,问道:“同学有什么问题吗?”,我 ...

  2. MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(二)

    ProxySQL安装 yum/rpm安装 在github或官网上可以下载rpm包,wiki的Getting start章节有详细介绍. cat <<EOF | tee /etc/yum.r ...

  3. 基于mysql主从同步的proxy读写分离

    mysql-proxy 简介 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载 ...

  4. MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(一)

    准备服务器: docker network create --subnet=192.168.0.0/16 staticnetdocker run -d --privileged -v `pwd`/my ...

  5. MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(三)

    设置Keepalived VIP切换邮件告警 修改keepalived.conf配置: [root@server01 keepalived]# cat keepalived.conf ! Config ...

  6. 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 ...

  7. Mysql读写分离 及高可用高性能负载均衡实现

    什么是读写分离,说白了就是mysql服务器读的操作和写的操作是分开的,当然这个需要两台服务器,master负责写,slave负责读,当然我们可以使用多个slave,这样我们也实现了简单意义上的高可用和 ...

  8. 基于Keepalived高可用集群的MariaDB读写分离机制实现

    一 MariaDB读写分离机制 在实现读写分离机制之前先理解一下三种主从复制方式:1.异步复制:MariaDB默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库 ...

  9. MySQL的keepalived高可用监控脚本

    MySQL的keepalived高可用监控脚本 MySQL(或者其它服务)的keepalived高可用监控脚本 开发脚本需求 :我们知道,keepalive是基于虚拟ip的存活来判断是否抢占maste ...

随机推荐

  1. FreeRTOS任务优先级说明

    https://www.cnblogs.com/yangguang-it/p/7156445.html#4217682 下面对 FreeRTOS 优先级相关的几个重要知识点进行下说明,这些知识点在以后 ...

  2. Bootstrap-轮播图-No.9

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  3. CodeForces 834C - The Meaningless Game | Codeforces Round #426 (Div. 2)

    /* CodeForces 834C - The Meaningless Game [ 分析,数学 ] | Codeforces Round #426 (Div. 2) 题意: 一对数字 a,b 能不 ...

  4. Verilog求余

    在实现三角函数时,考虑到函数的周期性,综量(自变量)需对周期做求余运算. 假设函数周期为T = 2^N,那么求余运算就是直接取该数的低N位,即: 以M位正数为例(符号位为0),reg [M-1:0] ...

  5. 洛谷 P5174 圆点

    题面 感觉被侮辱智商了,这水题NM省选NOI-.... 直接枚举一维,另一维单调不增,然后直接算答案就可以了.... gan #include<bits/stdc++.h> #define ...

  6. [mysql]忘记用户密码或者误删用户账号

    修改你的my.ini或my.cnf文件,在 [mysqld] 节下加入下面一行 skip-grant-tables 然后保存并重启 MySQL 服务. /etc/init.d/mysql restar ...

  7. MIME协议(三) -- MIME邮件的组织结构

    一封MIME邮件可以由多个不同类型的MIME消息组合而成,一个MIME消息表示邮件中的一个基本MIME资源或若干基本MIME消息的组合体.每个MIME消息的数据格式与RFC822数据格式相似,也包括头 ...

  8. Vue小实例

    最近刚学习Vue的官方文档,了解了指令.模板.组件.数据双向绑定等有关Vue的知识点.因此估摸着做点实例出来练练手. 下面介绍一个简单的例子,模拟购物车自动统计金额,效果图如下: 代码如下: < ...

  9. OC和Swift进行互相调用

    swift调用oc的方法: 1.桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) 2.将需要引用的oc文件 .h头文件 添加到桥接类中. 如下: 然后在sw ...

  10. mysql 从一个表中查数据并插入另一个表实现方法

    类别一. 如果两张张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO  目标表  SELECT  * FROM  来源表 ; 例如,要将 articles ...