Mysql+keepalived双主
搭建环境说明:
master1:192.168.175.210 主 master2:192.168.175.211 备 keepalived的vip: 192.168.175.11(注意这是虚拟IP,无需存在这台主机,只要保证这个ip是没有人用的即可)
一、MySQL数据库安装(两台主机都要操作)
本次笔者是在Centos7上安装的是mysql的,如果有其他需求可以自行下载。
1、下载安装包,如果下载不了请自己到官网下载相匹配的rpm,我下载的不需要安装其他依赖,如果去官网下载可能要安装一些依赖包,依次安装即可。这种形式安装后是通过生成yum源的形式,然后通过yum形式安装。
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
2、安装mysql源
yum -y localinstall mysql57-community-release-el7-.noarch.rpm
3、mysql安装
yum -y install mysql-community-server
在安装mysql时有较多的东西需要安装,稍等片刻即可。
4、启动mysql
启动前请关闭selinux,有两种方式关闭
方式一,临时关闭,下次开机启动后会重启
setenforce
方式二、永久关闭,通过设置配置文件的方式,将 SELINUX改为disabled的形式,如下:
vim /etc/selinux/config
开始启动mysql服务:
systemctl start mysqld
可以将其设置为开机启动:
[root@localhost ~]# systemctl enable mysqld
[root@localhost ~]# systemctl daemon-reload
登入mysql,注意第一次登入需要先找到mysql的root用户的密码,一般情况下root用户密码存放在/var/log/mysqld.log下,如果不在该目录下可以通过 find / -name mysqld.log查找该文件
我的是在该目录下,所以直接查看:
[root@localhost ~]# vi /var/log/mysqld.log
mysql -uroot -p
输入密码即可登入。
二、关于备份数据库问题。
mysql的双机高热,需要对那些需要备份的数据库的数据进行同步,所以需要我们先将主库的数据进行数据同步,如果是两个新建的数据库进行数据备份,无需做这一步 。不过笔者听别人说
可以不进行同步,可以指定到具体位置就可以实现自动同步,但是这种情况笔者认为,对应数据库的高可用这方面是行不通的。假设其中一台机器宕机,另一台机器进行服务的时候就会因为
数据的不同步而出现问题,所以笔者认为还是有必要进行数据同步的。
一般情况下数据库备份分为多种,有压缩文件的形式,有直接写sql文件的形式,若想了解这方面的情况,可以自行在网上搜索,笔者在这里就不进行整理。
第一步:锁定数据库,防止有新的数据进行写入,造成数据不完全同步。所以一般情况下,如果是在公司搭建,会在下班时间进行搭建。(192.168.175.210操作)
mysql>flush tables with read lock;
第二步:将需要同步的数据库进行sql文件输出。
mysqldump -uroot -p --databases test1 test2 test3>master.sql
这时会在当前目录下创建一个master.sql文件,当然也可以指定路径,不过如果仅仅是用一次,同步完毕删除即可。
第三步:生成的sql文件远程复制到备份机上,随意指定
scp master.sql master2_mysql:/tmp/
第四步:在备份机上进行数据同步(192.168.175.211)操作
mysql -uroot -p <back.sql
第五步:检查一下,看看在备份机上有没有数据,如果有数据同步完成。
三、数据库热备
数据库热备的定义在这里就不进行赘述,网上有很多这方面的原理解读。这里采用的是通过记录数据库操作,备份数据库读取这些操作,从而达到热备的效果。
第一步:分别在两个数据库中创建用于备份是时的用户并授权
在192.168.175.210上进行操作:
mysql>create user 'replicate'@'192.168.175.211' identified by 'qwe123'; # 192.168.175.211是备份机的ip
Query OK, 0 rows affected (0.09 sec)
mysql>grant replication slave on *.* to 'replicate'@'192.168.175.211';
Query OK, 0 rows affected (0.09 sec)
mysql>flush privileges;
Query OK, 0 rows affected (0.09 sec)
在192.168.175.211上进行操作:
mysql>create user 'replicate'@'192.168.175.210' identified by 'qwe123'; # 192.168.175.211是备份机的ip
Query OK, 0 rows affected (0.09 sec) mysql>grant replication slave on *.* to 'replicate'@'192.168.175.210';
Query OK, 0 rows affected (0.09 sec) mysql>flush privileges;
Query OK, 0 rows affected (0.09 sec)
分别在两台主机上用备份用户进行访问
# 在192.168.175.210 (操作)
mysql -h192.168.175.211 -ureplicate -pqwe123 # 在192.168.175.211 (操作)
mysql -h192.168.175.210 -ureplicate -pqwe123
如果都能够进入mysql 说明操作成功
第二步:配置数据库的配置文件
一般情况下,mysql的配置文件路径是在 /etc/my.cnf 如果你的没有可以用 find / -name my.cnf 的方式查找, 如果查不到,可以查看/usr/share/mysql目录下的.cnf文件,应该是mysql开头,对其负责一份到/etc/下,并改名为my.cnf即可。
注意:在修改my.cnf之前,先对其进行备份,不要直接修改
cp my.cnf my.cnf.bak
第三步:修改数据库配置(注意这了的配置是关于热备的主要配置,其他数据库配置需要自己添加)
在192.168.175.210上配置
vim /etc/my.cnf
[mysqld]
server-id= # 唯一id
innodb_flush_log_at_trx_commit= # 默认为1,防止数据丢失
log-bin=mysql-bin- #binlog日志文件名(可以任意命名)
binlog-do-db=test # 记录日志的数据库(如果没有此项,表示同步所有的库)
binlog-ignore-db=mysql # 不需要同步的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
log-slave-updates=ON
relay_log=mysql-relay-bin
slave_skip_errors= # 跳过1062错误
auto_increment_increment=
auto_increment_offset=1
# 注意
# bind_address = 127.0.0.1 若在配置文件中有这一项,需要将其注释,不然在同步数据时,的连接数据库情况会出错
在192.168.175.211上配置:
vim /etc/my.cnf
[mysqld]
server-id= # 唯一id
innodb_flush_log_at_trx_commit= # 默认为1,防止数据丢失
log-bin=mysql-bin-2 #binlog日志文件名(可以任意命名)
binlog-do-db=test # 记录日志的数据库(如果没有此项,表示同步所有的库)
binlog-ignore-db=mysql # 不需要同步的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
log-slave-updates=ON
relay_log=mysql-relay-bin
slave_skip_errors= # 跳过1062错误 auto_increment_increment= auto_increment_offset=
# 注意
# bind_address = 127.0.0.1 若在配置文件中有这一项,需要将其注释,不然在同步数据时,的连接数据库情况会出错
第四步:重启数据库,主备都需要重启
systemctl restart mysqld 或 service mysqld restart
第五步:登入数据库查看状态
在192.168.175.210上登入数据库,执行操作
mysql> show master status\G;
*************************** . row ***************************
File: mysql-bin-1.00001 # 记住这个值,后面有用
Position: 154 # 记住这个值,后面有用
Binlog_Do_DB: test
Binlog_Ignore_DB:mysql,information_schema,performance_schema,sys
Executed_Gtid_Set:
row in set (0.00 sec)
ERROR:
No query specified
在192.168.175.211上登入数据库,执行操作
mysql> show master status\G;
*************************** . row ***************************
File: mysql-bin-2.00001 # 记住这个值,后面有用
Position: # 记住这个值,后面有用
Binlog_Do_DB: test
Binlog_Ignore_DB:mysql,information_schema,performance_schema,sys
Executed_Gtid_Set:
row in set (0.00 sec)
ERROR:
No query specified
在192.168.175.210上登入数据库,执行操作
mysql>unlock tables; # 必须执行,否则就会报错
Query OK, 0 rows affected (0.09 sec)
mysql>stop slave; # 停止slave服务线程
mysql>change master to
mysql>master_host='192.168.175.211', # 备用ip
mysql>master_user='replicate', # 前面创建的user
mysql>master_password='qwe123', # 密码
mysql>master_log_file='mysql-bin-2.000001', # show master 上得出
mysql>master_log_pos=154;
mysql>start slave; # 重启线程
在192.168.175.211上登入数据库,执行操作
mysql>unlock tables; # 必须执行,否则就会报错
Query OK, 0 rows affected (0.09 sec)
mysql>stop slave; # 停止slave服务线程
mysql>change master to
mysql>master_host='192.168.175.210', # 备用ip
mysql>master_user='replicate', # 前面创建的user
mysql>master_password='qwe123', # 密码
mysql>master_log_file='mysql-bin-1.000001', # show master 上得出
mysql>master_log_pos=154;
mysql>start slave; # 重启线程
第七步:show slave status\G查看状态
两台机器上都执行:
show slave status\G;
若如下都为两个yes则标识热备成功,有时可能出现一个是connecting状态,可以稍等片刻。如长时间不为yes,则检查防火墙,主要问题可能就是数据库连接问题。如有其它情况可以查看日志进行解决。
四、keepalived原理及安装
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
这里仅仅是对keepalived进行了一个简单的介绍,方便大家理解,若需要深入了解,可以参考官方文档。
五、keepalived的安装和配置
第一步:依赖安装
yum install -y openssl-devel
yum install -y libnfnetlink-devel
yum install -y libnl libnl-devel
yum install -y ipvsadm
第二步:keepalived安装
cd /usr/local/src/
wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
tar -zvxf keepalived-1.3..tar.gz
cd keepalived-1.3.
./configure --prefix=/usr/local/keepalived
make && make install
cp /usr/local/src/keepalived-1.3./keepalived/etc/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
echo "/etc/init.d/keepalived start" >> /etc/rc.local
复制配置文件:
[root@master1 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@master1 ~]# vim /etc/keepalived/keepalived.conf
keepalived两台机器都得安装:
第三步:修改配置文件
在192.168.175.210上编辑
! Configuration: command not found
global_defs { # 全局配置,关于邮箱的问题
notification_email {
wallace.wang@tbs.cn
} notification_email_from wallace.wang@tbs.cn
smtp_server 127.0.0.1
smtp_connect_timeout
router_id MASTER-HA
}
vrrp_instance HA_2 {
state MASTER # 设置主节点的标识
interface em1 # 设置实例绑定的网卡
virtual_router_id # 唯一标识id主从必须一致
priority # 优先级 这个和下面的权重结合使用
advert_int
nopreempt # 非抢占式,在主节点上不需要设置
authentication { # 主从必须一致
auth_type PASS # 认证方式
auth_pass # 认证密码
}
virtual_ipaddress {
192.168.175.11 # 虚拟的ip
}
} virtual_server 192.168.175.11 {
delay_loop
lb_algo wrr # lvs调度算法 有rr|wrr|lc|wlc|lblc|sh|dh等
lb_kind DR # 负载均衡转发规则NAT|DR|RUN
persistence_timeout # 从新连接的时间
protocol TCP # 协议名称
real_server 192.168.175.210 { # 真实的ip地址
weight # 权重
notify_down /opt/script/chk_mysql.sh # 检测脚本
TCP_CHECK {
connect_timeout # 连接时长
nb_get_retry # 重复次数
delay_before_retry #
connect_port
在192.168.175.211上编辑
! Configuration: command not found
global_defs { # 全局配置,关于邮箱的问题
notification_email {
wallace.wang@tbs.cn
} notification_email_from wallace.wang@tbs.cn
smtp_server 127.0.0.1
smtp_connect_timeout
router_id MASTER-HA
}
vrrp_instance HA_2 {
state BACKUP # 设置从节点的标识
interface em1 # 设置实例绑定的网卡
virtual_router_id # 唯一标识id主从必须一致
priority # 优先级 这个和下面的权重结合使用
advert_int
nopreempt # 非抢占式,在主节点上不需要设置
authentication { # 主从必须一致
auth_type PASS # 认证方式
auth_pass # 认证密码
}
virtual_ipaddress {
192.168.175.11 # 虚拟的ip
}
} virtual_server 192.168.175.11 {
delay_loop
#lb_algo wrr # 这里在从节点上不需要设置否则会出现从节点无法连接上vip的情况
#lb_kind DR # 这里也无需设置
persistence_timeout # 从新连接的时间
protocol TCP # 协议名称
real_server 192.168.175.211 { # 真实的ip地址
weight # 权重
notify_down /opt/script/chk_mysql.sh # 检测脚本
TCP_CHECK {
connect_timeout # 连接时长
nb_get_retry # 重复次数
delay_before_retry #
connect_port
第四步:编写chk_mysql.sh脚本
vim /opt/script/chk_mysql.sh
#!/bin/bash
killall keepalived
第五步:启动keepalived
两台机器通过ip addr的形式查看一下:我的主节点在210上,所以这里会多一个虚拟ip
到这里为止所有的配置就已经完成,老铁们可以进行测试了。在测试之前先创建一个账号,这个账号对外有权限:
分别在两个数据库上进行创建:
grant all on *.* to test@'%' identified by "qwe123";
flush privileges;
然后通过这个进行测试:
mysql -h 192.168.175.11 -utest -pqwe123
注意在高可用这一点上,若通过虚拟IP 进行连接时,主节点宕机,在连接从节点时可能会需要几秒钟的时间,可以设置连接次数解决。其实keepalived和mysql热备无关,所以不用担心数据缺失的问题。
关于priority 和weight的权重选择问题可以看一下下面的连接文章。
https://blog.csdn.net/hzsunshine/article/details/62041036
最后希望大家帮忙点个赞和添加关注,小编会继续写一下通俗易懂的文章来和大家一起分享,最后送大家一句话:当你的能力撑不起你的野心时,就安静下来学习吧!!!!!!!!!!
Mysql+keepalived双主的更多相关文章
- Mysql+Keepalived双主热备高可用操作记录
我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Mast ...
- MySQL keepalived 双主.md
MySQL keepalived 双主搭建 环境说明 系统 IP 主机名 mysql keepalived VIP CentOS 6.8 192.168.197.61 C6-node1 5.6.36 ...
- mysql+keepalived 双主热备高可用
理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互 ...
- 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 ...
随机推荐
- ansible的logging模块用来写日志
[root@node-1 library]# cat dolog.py #!/bin/env python ANSIBLE_METADATA = { 'metadata_version': 'alph ...
- .net core2.x - 关于工作单元(UnitOfWork) 模式
概要:在搭建框架,顺手说下写下,关于unitofwork,可能你理解了,可能你还不理解,可能与不可能不是重点,重点是感兴趣就看看吧. 1.工作单元(unitofowork)是什么(后面简写uow)? ...
- F#周报2019年第11期
新闻 Bolero:WebAssembly中的F# 尝试WebAssembly里的F# JetBrains的fsharp-support 2019.1 ML.NET 0.11发布 Outreachy内 ...
- 在 Mac OS X 下,如何向 sudoers 文件添加新用户
注: 1.使用待添加的用户名替换"username". 2.以下涉及输入的标点符号均为半角字符,即英文输入法下的标点符号. 以管理员账号密码登录 Mac OS X,打开 Termi ...
- java自动化-junit框架简述
本人使用的是java的junit框架来组织的自动化测试,故我这边需要简单介绍一下junit框架 首先,建议自行百度一下junit框架,先有一个大概的了解 所谓的接口自动化测试,会对多个接口中每一个接口 ...
- 探索JavaScript中Null和Undefined的深渊
当讨论JavaScript中的原始数据类型时,大多数人都知道的基本知识,从String,Number到Boolean.这些原始类型相当简单,行为符合常识.但是,本文将更多聚焦独特的原始数据类型Null ...
- HTML4入门
这篇来介绍下超链接和网站架构,做好准备要开始了! 超链接:从一个文档链接到另一个文档,也可以式文档的指定部分及文档内跳转,也俗称设置锚点:点击超链接将使网络浏览器跳转到另一个网址.url可以指向HTM ...
- 图片编辑工具GIMP
今天修改图片: 给图片添加alpha通道,选中要删去的部分,就会变成透明,要保存为png格式 文库参考: http://wenku.baidu.com/link?url=HR1lKoBKS1xbhUJ ...
- 在Linux下开发多语言软件(gettext解决方案)
最近的项目出现了一个bug.项目是基于一个已有的成熟开源软件之上做修改的,新写了加解密库,用于为该成熟开源软件增添加解密功能.功能增加完成后效果都很好,可是就是中文出不来了,也就是说没办法自适应多语言 ...
- pytorch安装(使用pip3装到conda环境下)
之前在windows上使用pip3的方式安装过pytorch,虽然偶尔也会HTTP Error,安装失败,但是基本还是可以安装成功的.上 这一次在ubuntu上装了anaconda,想着之后的库都用c ...