MySQL keepalived 双主.md
MySQL keepalived 双主搭建
环境说明
系统 | IP | 主机名 | mysql | keepalived | VIP |
---|---|---|---|---|---|
CentOS 6.8 | 192.168.197.61 | C6-node1 | 5.6.36 | 1.2.13 | 192.168.197.88 |
CentOS 6.8 | 192.168.197.62 | C6-node2 | 5.6.36 | 1.2.13 | 192.168.197.88 |
安装MySQL双主
C6-node1
MySQL的安装及初始化这里不做详细介绍,下面贴出node1的my.cnf的配置文件:
[mysqld]
datadir=/data/mysql
port=3306
socket=/tmp/mysql.sock
pid-file=/data/mysql/mysqld.pid
log_error=error.log
user=mysql
skip-name-resolve
log-bin=mysql-bin
log-bin-index=mysql-bin.index
server-id=61
character_set_server=utf8
log-slave-updates=1
relay-log=mysql-relay-bin
relay-log-index=mysql-relay-bin.index
binlog_format=mixed
auto-increment-increment=2
auto-increment-offset=1
gtid_mode=on
enforce_gtid_consistency=1
skip_slave_start=1
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
[client]
user=root
password=
创建复制帐号:
(rootc6-node1) [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'192.168.197.62' IDENTIFIED BY 'redhat';
Query OK, 0 rows affected (0.05 sec)
C6-node2
[mysqld]
datadir=/data/mysql
port=3306
socket=/tmp/mysql.sock
pid-file=/data/mysql/mysqld.pid
log_error=error.log
user=mysql
skip-name-resolve
log-bin=mysql-bin
log-bin-index=mysql-bin.index
server-id=62
character_set_server=utf8
log-slave-updates=1
relay-log=mysql-relay-bin
relay-log-index=mysql-relay-bin.index
binlog_format=mixed
auto-increment-increment=2
auto-increment-offset=2
gtid_mode=on
enforce_gtid_consistency=1
skip_slave_start=1
[mysql]
prompt=(\u@\h) [\d]>\_
[client]
user=root
password=
创建复制帐号:
(root@c6-node2) [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'192.168.197.61' IDENTIFIED BY 'redhat';
Query OK, 0 rows affected (0.00 sec)
双主配置
注意:由于这里配置的是双主模型所以两个数据库的数据一定要保持一致!如果要是不一致请以一个最新说句为主,注意连接的先后顺序!
node1配置:
(root@C6-node1) [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.197.62',MASTER_USER='mysync',MASTER_PASSWORD='redhat',MASTER_PORT=3306,MASTER_AUTO_POSITION=1;
(root@C6-node1) [(none)]> START SLAVE;
Query OK, 0 rows affected (0.01 sec)
node2配置:
(root@C6-node2) [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.197.61',MASTER_USER='mysync',MASTER_PASSWORD='redhat',MASTER_PORT=3306,MASTER_AUTO_POSITION=1;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
(root@C6-node2) [(none)]> START SLAVE;
Query OK, 0 rows affected (0.03 sec)
keepalived 配置
node1安装配置
安装keepalived这里是用的是yum install -y keepalived进行安装。keepalived的配置文件如下:
global_defs {
router_id KEEPALIVED_MYSQL
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 61
priority 140
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.197.88
}
}
virtual_server 192.168.197.61 3306 {
delay_loop 2
protocol TCP
real_server 192.168.197.61 3306 {
notify_down "/etc/keepalived/check_mysql.sh"
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
- virtual_router_id 取值在0-255之间,用来区分多个instance的VRRP组播。注意: 同一网段中virtual_router_id的值不能重复,否则会出错。
- priority 用来选举master的,要成为master,那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100)。
- nopreempt:不主动抢占资源,只在master这台优先级高的设置,backup不设置。
- advert_int:发VRRP包的时间间隔,即多久进行一次master选举(可以认为是健康查检时间间隔)。
- delay_loop:延迟轮询时间(单位秒)。
- connect_timeout,nb_get_retry,delay_before_retry分别表示超时时长、重试次数,下次重试的时间延迟。
check_mysql 检测脚本如下:
#!/bin/bash
MYSQL=/usr/local/mysql/bin/mysql
MYSQL_HOST=localhost
MYSQL_USER=root
CHECK_COUNT=5
counter=1
while true
do
mysql -h $MYSQL_HOST -u $MYSQL_USER -e "show status;" >/dev/null 2>&1
i=$?
ps aux | grep mysqld | grep -v grep > /dev/null 2>&1
j=$?
if [ $i -eq 0 ] && [ $j -eq 0 ]
then
exit 0
else
if [ $i -eq 1 ] && [ $j -eq 0 ]
then
exit 0
else
if [ $counter -gt $CHECK_COUNT ]
then
break
fi
let counter++
continue
fi
fi
done
/etc/init.d/keepalived stop
exit 1
说明:
1.check_mysql.sh 脚本的需要赋予执行权限。
2.check_mysql脚本没有使用密码登录获取mysql的状态,这里建议创建一个普通用户来检测mysql 的状态。
3.我这边没有使用keepalived中轮询算法的配置,在网上文章说明需要安装ipvsadm。
node2配置
global_defs {
router_id KEEPALIVED_MYSQL
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 61
priority 130
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.197.88
}
}
virtual_server 192.168.197.62 3306 {
delay_loop 2
protocol TCP
real_server 192.168.197.62 3306 {
notify_down "/etc/keepalived/check_mysql.sh"
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
check_mysql.sh脚本和node1的相同。
启动并测试
1.启动时先保证MySQL双主模式配置是好的,即Slave_IO_Running: Yes
和Slave_SQL_Running: Yes
,这两个要是Yes状态。
2.keepalived启动时先启动priority 低的节点,然后在启动priority高的节点,避免出现抢占VIP。
3.注意,我在mysql双主模式中设置了skip_slave_start,即启动mysql不会自动执行start slave;
而是需要手动执行!
测试
# hostname -I
192.168.197.61 192.168.197.88
# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:9c:7a:30 brd ff:ff:ff:ff:ff:ff
inet 192.168.197.61/24 brd 192.168.197.255 scope global eth0
inet 192.168.197.88/32 scope global eth0
inet6 fe80::20c:29ff:fe9c:7a30/64 scope link
valid_lft forever preferred_lft forever
# mysql -u root -h 192.168.197.88 -p
Enter password:
(root@192.168.197.88) [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 61 |
+---------------+-------+
1 row in set (0.00 sec)
(root@192.168.197.88) [(none)]> select * from test.DOTA;
+----+--------------+------------+
| Id | Name | Short_name |
+----+--------------+------------+
| 2 | 敌法师 | DF |
| 4 | 隐形刺客 | SA |
| 5 | 沙王 | SK |
| 7 | 骷髅王 | SNK |
| 8 | 混沌骑士 | CK |
| 9 | 冰魂 | AA |
| 10 | 斧王 | FV |
| 11 | 司夜刺客 | NA |
| 12 | 全能骑士 | OK |
+----+--------------+------------+
9 rows in set (0.00 sec)
停止node1上的mysql并测试:
# hostname -I
192.168.197.62 192.168.197.88
# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:41:57:51 brd ff:ff:ff:ff:ff:ff
inet 192.168.197.62/24 brd 192.168.197.255 scope global eth0
inet 192.168.197.88/32 scope global eth0
inet6 fe80::20c:29ff:fe41:5751/64 scope link
valid_lft forever preferred_lft forever
# mysql -uroot -h192.168.197.88 -p
Enter password:
(root@192.168.197.88) [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 62 |
+---------------+-------+
1 row in set (0.00 sec)
(root@192.168.197.88) [(none)]> select * from test.DOTA;
+----+--------------+------------+
| Id | Name | Short_name |
+----+--------------+------------+
| 2 | 敌法师 | DF |
| 4 | 隐形刺客 | SA |
| 5 | 沙王 | SK |
| 7 | 骷髅王 | SNK |
| 8 | 混沌骑士 | CK |
| 9 | 冰魂 | AA |
| 10 | 斧王 | FV |
| 11 | 司夜刺客 | NA |
| 12 | 全能骑士 | OK |
+----+--------------+------------+
9 rows in set (0.00 sec)
说明:
1.以上配置的不足之处是node1在重新启动mysql和 keepalived时会抢占VIP,这个原因个人认为是我的检测脚本把keepalived 给关闭了而在重新启动时由于priority的关系还是会抢占。
2.网上参考的是主上配置nopreempt参数,但是测试的效果还是不行。如有懂得的还请指教。
MySQL keepalived 双主.md的更多相关文章
- Mysql+Keepalived双主热备高可用操作记录
我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Mast ...
- mysql+keepalived 双主热备高可用
理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互 ...
- Mysql+keepalived双主
搭建环境说明: master1:192.168.175.210 主 master2:192.168.175.211 备 keepalived的vip: 192.168.175.11(注意这是虚拟IP, ...
- MariaDB+Keepalived双主高可用配置MySQL-HA
利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟VIP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. ...
- keepalived+双主实践HA
工作不怎么忙,搞点儿开发吧差点儿事,就想着弄点儿架构的事儿.正好前段时间看过关于keepalived+双主实现高可用的文章,也恰好身边的朋友所在的公司也部分用这个架构.没什么事儿就搞搞吧,正好对比下M ...
- 企业Nginx+Keepalived双主架构案例实战
通过上一次课程的学习,我们知道Nginx+keepalived主从配置,始终有一台服务器处于空余状态,那如何更好的利用起来呢,我们需要借助Nginx+keepalived双主架构来实现,如下图通过改装 ...
- [转] Haproxy、Keepalived双主高可用负载均衡
http://blog.chinaunix.net/uid-25266990-id-3989321.html 在测试了Nginx+Keepalived的负载均衡后,也对Haproxy+Keepaliv ...
- Keepalived 双主虚拟路由配置实例
Keepalived 双主虚拟路由配置实例 演示前说明: 2台centos7.2 主机:node-00,node-01 VIP1:10.1.38.19预定node-00占有 VIP2:10.1.38. ...
- keepalived+mysql实现双主高可用
环境: DB1:centos6.8.mysql5.5.192.168.2.204 hostname:bogon DB2:centos6.8.mysql5.5.192.168.2.205 hostn ...
随机推荐
- (转发)一个通用的C++ 消息总线框架
注:转自https://www.cnblogs.com/qicosmos/archive/2013/04/28/3048919.html 应用开发过程中经常会处理对象间通信的问题,一般都是对象或接口的 ...
- 语音识别(ASR) 阿里云
做语音识别这块的呢,国内领先的有科大讯飞,BAT这几家公司,鉴于使用科大讯飞的接口需要付费,腾讯云的语音识别申请了几天也没给通过,比较了一下阿里和百度的,个人觉得阿里云的好用一些,这篇博客来讲讲怎么讲 ...
- __repr__与__str__
首先我们来举个例子,定义一个长方行类Cuboid,长为x,宽为y,高为z class Cuboid: def __init__(self, x = 3, y = 1, z = 2): self.x = ...
- ubuntu16.4+nginx+uwsgi+Django 部署上线
Nginx概述 Nginx是一款轻量级的HTTP服务器,采用事件驱动和异步非阻塞处理方式框架,这让其具有极好的IO性能,市场用于服务端的反向代理和负载均衡 Nginx优点 高并发连接:官方测试Ngin ...
- 全局eslint不生效的处理
react项目里能用上 eslint 的 airbnb 规范真是的,对自己的编码有很好的帮助,不经可以养成良好的代码风格,而且还能检测出 state或者变量 是否 使用过, 然而,所在团队的小伙伴们, ...
- 纯小白入手 vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 我的 github 地址 - vue3.0St ...
- React-Native-Android-Studio整合开发+环境配置+官方实例
linux下React Native开发环境搭建,使用Android-studio工具进行React Native整合开发. 参考React Native的官方文档,通过图文详细记录开发过程.可以查看 ...
- [可能不知道]什么是PeopleSoft的JOLT以及相关进程
PeopleSoft applecation server依赖于Jolt,Jolt是与Tuxedo配套的产品,可以处理所有web请求.换句话说,Jolt是application server与web ...
- Nginx的常用功能
1.规范nginx的配置文件 在企业中我们的虚拟主机可能会很多,配置文件的内容也会有很多,这时候我们就可以规范一下我们的配置文件,把每个虚拟主机按照网站的域名或者是功能取名,放到统一的文件夹中,当然我 ...
- chromium os系统编译与环境搭建
官方网址:http://www.chromium.org/chromium-os chromium os是google自2009年开启的项目,是一款开源的电脑操作系统,用于开发chromium/chr ...