keepalive半同步双主一从
ip地址如下:
192.168.20.201 redis01 主
192.168.20.202 redis02 主
192.168.20.203 redis03 从
192.168.20.205 vip
修改my.cnf配置文件如下
[root@redis01 keepalived]# cat /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
gtid_mode = ON
enforce_gtid_consistency = ON
master_info_repository =TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
binlog_format=ROW
log_timestamps= SYSTEM
#Group Replication Settings
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1
slave_parallel_type=database
slave_parallel_workers=3
#GENERAL
datadir=/data/mysql
socket=/data/mysql/mysql.sock
pid-file=/data/mysqld.pid
user=mysql
port=3306
default_storage_engine=InnoDB
#INNODB
innodb_buffer_pool_size = 512M
innodb_log_file_size=10M
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
#MYISAM
key_buffer_size=10M
#LOGGING
log-error=/data/log/mysql-error.log
slow_query_log=1 #是否启用慢查询日志,1为启用,0为禁用
slow_query_log_file=/data/log/mysql-slow.log #指定慢查询日志文件的路径和名字,可使用绝对路径指定;默认值是'主机名_slow.log',位于datad
#OTHER
tmp_table_size=32M
max_heap_table_size=32M
#query_cache_type=0
#query_cache_size=0
max_connections=1000
thread_cache_size=100
#table_cache=100
open_files_limit=65535
[client]
#socket=/var/lib/mysql/mysql.sock
socket=/data/mysql/mysql.sock
port=3306
user=root
password=ocm123 其他节点修改server-id的值
创建复制用户及授权,3个节点都需要创建
create user 'repl'@'192.%' identified by 'ocm123';
GRANT replication slave ON *.* to repl@'192.%' IDENTIFIED BY 'ocm123';
安装及配置keepalived
yum install keepalived-1*
先备份配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak
修改配置文件如下,修改前保证防火墙已关掉,或者在/etc/sysconfig/iptables加入以下条目
-A INPUT -d 192.168.20.205 -j ACCEPT
配置keepalived为backup模式,master挂掉以后,vip切换到backup(redis02)主机,当master(redis01)主机启动以后不会抢回vip,从机redis03不会在切换一次
主机redis01
[root@redis01 keepalived]# cat keepalived.conf
! Configuration File for keepalived global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id MYSQL-HA
} vrrp_script chk_mysql_port {
script "/etc/keepalived/check.sh"
interval 2
fall 2
rise 1
} vrrp_instance VI_1 {
state BACKUP
priority 150
nopreempt
interface eth1
virtual_router_id 51
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.20.205
}
track_script {
chk_mysql_port
}
} 主机redis02
[root@redis02 keepalived]# cat keepalived.conf
! Configuration File for keepalived global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id MYSQL-HA
} vrrp_script chk_mysql_port {
script "/etc/keepalived/check.sh"
interval 2
fall 2
rise 1
} vrrp_instance VI_1 {
state BACKUP
priority 50
nopreempt
interface eth5
virtual_router_id 51
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.20.205
}
track_script {
chk_mysql_port
} } mysql监控脚本如下
[root@redis02 keepalived]# cat check.sh
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
/etc/init.d/keepalived stop
fi
配置复制
change master to master_host='redis01', master_user='repl', master_password='ocm123', master_auto_position=150;
change master to master_host='redis02', master_user='repl', master_password='ocm123', master_auto_position=150;
change master to master_host='192.168.20.205', master_user='repl', master_password='ocm123', master_auto_position=150;
验证vip切换
查看ip
[root@redis01 sysconfig]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:2b:cf:c4 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe2b:cfc4/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:ad:69:96 brd ff:ff:ff:ff:ff:ff
inet 192.168.20.201/24 brd 192.168.20.255 scope global eth1
valid_lft forever preferred_lft forever
inet 192.168.20.205/32 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fead:6996/64 scope link
valid_lft forever preferred_lft forever
在redis03上查看vip在那个主机上
[root@redis03 ~]# ssh 192.168.20.205 hostname
redis01 关掉redis01上mysql
[root@redis01 sysconfig]# /etc/init.d/mysqld stop
Stopping mysqld: [ OK ]
[root@redis01 sysconfig]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:2b:cf:c4 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe2b:cfc4/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:ad:69:96 brd ff:ff:ff:ff:ff:ff
inet 192.168.20.201/24 brd 192.168.20.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fead:6996/64 scope link
valid_lft forever preferred_lft forever
[root@redis03 ~]# ssh 192.168.20.205 hostname
redis02 结论 redis01上mysql会自动关闭keepalived,vip切换到redis02上
启动redis01上mysql及keepalived看vip是否会切回redis01
[root@redis01 sysconfig]# /etc/init.d/mysqld start
Starting mysqld: [ OK ]
[root@redis01 sysconfig]# /etc/init.d/keepalived start
Starting keepalived: [ OK ] [root@redis01 sysconfig]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:2b:cf:c4 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe2b:cfc4/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:ad:69:96 brd ff:ff:ff:ff:ff:ff
inet 192.168.20.201/24 brd 192.168.20.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fead:6996/64 scope link
valid_lft forever preferred_lft forever [root@redis03 ~]# ssh 192.168.20.205 hostname
redis02 从上面得出结论,redis01启动mysql以后不会抢回vip
查看从机redis03上复制状态
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.20.205
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 230
Relay_Log_File: redis03-relay-bin.000074
Relay_Log_Pos: 435
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 230
Relay_Log_Space: 921
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 2
Master_UUID: e1ce6245-b4a3-11e8-9ecc-08002771e31b
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: be2030ff-b4a3-11e8-8764-0800272bcfc4:1-54,
e1ce6245-b4a3-11e8-9ecc-08002771e31b:1
Executed_Gtid_Set: be2030ff-b4a3-11e8-8764-0800272bcfc4:1-54,
e1ce6245-b4a3-11e8-9ecc-08002771e31b:1
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec) mysql> select * from mysql.slave_master_info \G
*************************** 1. row ***************************
Number_of_lines: 25
Master_log_name: mysql-bin.000005
Master_log_pos: 230
Host: 192.168.20.205
User_name: repl
User_password: ocm123
Port: 3306
Connect_retry: 60
Enabled_ssl: 0
Ssl_ca:
Ssl_capath:
Ssl_cert:
Ssl_cipher:
Ssl_key:
Ssl_verify_server_cert: 0
Heartbeat: 30
Bind:
Ignored_server_ids: 0
Uuid: e1ce6245-b4a3-11e8-9ecc-08002771e31b
Retry_count: 86400
Ssl_crl:
Ssl_crlpath:
Enabled_auto_position: 1
Channel_name:
Tls_version:
1 row in set (0.00 sec) mysql> select * from mysql.slave_relay_log_info\G
*************************** 1. row ***************************
Number_of_lines: 7
Relay_log_name: ./redis03-relay-bin.000073
Relay_log_pos: 435
Master_log_name: mysql-bin.000016
Master_log_pos: 230
Sql_delay: 0
Number_of_workers: 3
Id: 1
Channel_name:
1 row in set (0.00 sec) mysql> select * from mysql.slave_worker_info \G
*************************** 1. row ***************************
Id: 1
Relay_log_name: ./redis03-relay-bin.000005
Relay_log_pos: 730
Master_log_name: mysql-bin.000001
Master_log_pos: 1349594
Checkpoint_relay_log_name: ./redis03-relay-bin.000005
Checkpoint_relay_log_pos: 438
Checkpoint_master_log_name: mysql-bin.000001
Checkpoint_master_log_pos: 1349302
Checkpoint_seqno: 0
Checkpoint_group_size: 64
Checkpoint_group_bitmap:
Channel_name:
*************************** 2. row ***************************
Id: 2
Relay_log_name:
Relay_log_pos: 0
Master_log_name:
Master_log_pos: 0
Checkpoint_relay_log_name:
Checkpoint_relay_log_pos: 0
Checkpoint_master_log_name:
Checkpoint_master_log_pos: 0
Checkpoint_seqno: 0
Checkpoint_group_size: 64
Checkpoint_group_bitmap:
Channel_name:
*************************** 3. row ***************************
Id: 3
Relay_log_name: ./redis03-relay-bin.000002
Relay_log_pos: 910010
Master_log_name: mysql-bin.000001
Master_log_pos: 909805
Checkpoint_relay_log_name: ./redis03-relay-bin.000002
Checkpoint_relay_log_pos: 555275
Checkpoint_master_log_name: mysql-bin.000001
Checkpoint_master_log_pos: 555070
Checkpoint_seqno: 0
Checkpoint_group_size: 64
Checkpoint_group_bitmap:
Channel_name:
3 rows in set (0.00 sec)
keepalive半同步双主一从的更多相关文章
- mysql 架构篇系列 4 复制架构一主一从搭建(半同步复制)
一.概述 在mysql 5.5之前,mysql 的复制是异步操作,主库和从库的数据之间存在一定的延时,这样存在一个隐患:当主库上写入一个事务并提交成功,而从库尚未得到主库推送的Binlog日志时,主库 ...
- 【3.1】【mysql基本实验】mysql复制(主从复制/异步复制/半同步复制,一主一从)
关键词:mysql复制(异步复制),mysql异步复制 核心原理: mysql 复制流程原理 一个事务在 mysql异步复制中的流程与生命周期 一个事务,在传统半同步的复制流程 #mysql主从基本实 ...
- MySQL 半同步复制+MMM架构
200 ? "200px" : this.width)!important;} --> 介绍 上篇文章介绍了MMM架构的实现方法,但是上篇文章的MMM方案的复制是异步复制,异 ...
- MySQL 5.7 新特性之增强半同步复制
1. 背景介绍 半同步复制 普通的replication,即mysql的异步复制,依靠mysql二进制日志也即binary log进行数据复制.比如两台机器,一台主机(master),另外一台是从机( ...
- MySQL主从、主主、半同步节点架构的的原理及实验总结
一.原理及概念: MySQL 主从复制概念 MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点.MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来 ...
- MySQL数据的主从复制、半同步复制和主主复制详解
一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...
- MySQL数据的主从复制、半同步复制和主主复制详解-转
一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...
- mysql之 mysql 5.6不停机双主一从搭建(活跃双主一从基于日志点复制)
环境说明:版本 version 5.6.25-log 主1库ip: 10.219.24.25主2库ip: 10.219.24.22从1库ip:10.219.24.26os 版本: centos 6.7 ...
- Mysql半同步复制模式说明及配置示例 - 运维小结
MySQL主从复制包括异步模式.半同步模式.GTID模式以及多源复制模式,默认是异步模式 (如之前详细介绍的mysql主从复制).所谓异步模式指的是MySQL 主服务器上I/O thread 线程将二 ...
随机推荐
- Docker镜像拉不下来?试试这些
DaoCloud 加速器1.0(永久免费) DaoCloud是国内第一家Dock Hub加速器提供商 注意,加速器 2.0 需要使用 DaoCloud 自己的云服务器才可以使用.官方宣称会继续支持加速 ...
- gorose使用示例
package main import ( "fmt" "github.com/gohouse/gorose" //import Gorose _ " ...
- Day4 Numerical simulation of optical wave propagation之数字傅里叶变换
标量衍射理论是波动光学模拟的物理基础.这一理论基础的结果是将电磁波在真空中的传播作为线性系统进行处理. 对于单色波,系统观察平面的电场矢量是源平面电场矢量和自由空间脉冲响应的卷积. 因此,线性系统理论 ...
- docker(七) 使用dockerfile-maven-plugin插件构建docker镜像
在dockerfile-maven-plugin插件出现之前,还有一个maven插件是docker-maven-plugin,是由同一个作者创造,作者明确表示推荐使用dockerfile-maven- ...
- Flask 快速使用 —— (1)
Flask.Django.Tornado框架 区别 1 Django:重武器,内部包含了非常多组件:ORM.Form.ModelForm.缓存.Session.中间件.信号等... 2 Flas ...
- SqlServer如何判断字段中是否含有汉字?
--/* --unicode编码范围: --汉字:[0x4e00,0x9fa5](或十进制[19968,40869]) --数字:[0x30,0x39](或十进制[48, 57]) --小写字母:[0 ...
- 6-4 The present perfect
1 Summary The present perfect is an important verb tense in English. It is used to talk about things ...
- mysql client--笔记-修改密码-登录-查看数据库-创建数据库
1 登录 mysql client 打开 mysql client -输入密码 123 回车 2 show database; ---显示数据库 3 切换数据库:use mysql 4 describ ...
- Python——collections模块(扩展数据类型)
1.namedtuple:利用坐标.空间坐标,扑克牌等指定空间位置 # namedtuple('名字',[list列表属性])from collections import namedtuple Po ...
- min-max容斥/最值反演及其推广
设\(S\)是一个集合,\(\max(S)\)和\(\min(S)\)分别表示集合中的最大值与最小值. 那么有如下式子成立: \[\max(S)=\sum_{T \subseteq S}(-1)^{| ...