Mysql+keepalived双主

搭建环境说明:

master1:192.168.175.210   主

master2:192.168.175.211

keepalived的vip: 192.168.175.11(注意这是虚拟IP,无需存在这台主机,只要保证这个ip是没有人用的便可)

1、MySQL数据库安装(两台主机都要操做)

本次笔者是在Centos7上安装的是mysql的,若是有其余需求能够自行下载。mysql

一、下载安装包,若是下载不了请本身到官网下载相匹配的rpm,我下载的不须要安装其余依赖,若是去官网下载可能要安装一些依赖包,依次安装便可。这种形式安装后是经过生成yum源的形式,而后经过yum形式安装。linux

wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

二、安装mysql源算法

yum -y localinstall mysql57-community-release-el7-11.noarch.rpm

三、mysql安装sql

yum -y install mysql-community-server

在安装mysql时有较多的东西须要安装,稍等片刻便可。数据库

四、启动mysqlvim

启动前请关闭selinux,有两种方式关闭bash

方式一,临时关闭,下次开机启动后会重启负载均衡

setenforce 0

方式2、永久关闭,经过设置配置文件的方式,将 SELINUX改成disabled的形式,以下:ide

vim /etc/selinux/config

 

开始启动mysql服务:oop

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

输入密码便可登入。

2、关于备份数据库问题。

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

第五步:检查一下,看看在备份机上有没有数据,若是有数据同步完成。

3、数据库热备

数据库热备的定义在这里就不进行赘述,网上有不少这方面的原理解读。这里采用的是经过记录数据库操做,备份数据库读取这些操做,从而达到热备的效果。

第一步:分别在两个数据库中建立用于备份是时的用户并受权

在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=1 # 惟一id
innodb_flush_log_at_trx_commit=2  # 默认为1,防止数据丢失
log-bin=mysql-bin-1    #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 # 跳过1062错误 auto_increment_increment=2 auto_increment_offset=1
# 注意
# bind_address = 127.0.0.1 若在配置文件中有这一项,须要将其注释,否则在同步数据时,的链接数据库状况会出错

在192.168.175.211上配置:

vim /etc/my.cnf
[mysqld]
server-id=2 # 惟一id
innodb_flush_log_at_trx_commit=2  # 默认为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 # 跳过1062错误 auto_increment_increment=1 auto_increment_offset=1
# 注意
# bind_address = 127.0.0.1 若在配置文件中有这一项,须要将其注释,否则在同步数据时,的链接数据库状况会出错

第四步:重启数据库,主备都须要重启

systemctl restart mysqld 或 service mysqld restart

第五步:登入数据库查看状态

在192.168.175.210上登入数据库,执行操做

mysql> show master status\G;
*************************** 1. row ***************************
            File: mysql-bin-1.00001   # 记住这个值,后面有用
        Position: 154                 # 记住这个值,后面有用
    Binlog_Do_DB: test
Binlog_Ignore_DB:mysql,information_schema,performance_schema,sys
Executed_Gtid_Set: 
1 row in set (0.00 sec)
ERROR: 
No query specified

在192.168.175.211上登入数据库,执行操做

mysql> show master status\G;
*************************** 1. row ***************************
            File: mysql-bin-2.00001   # 记住这个值,后面有用
        Position: 154                 # 记住这个值,后面有用
    Binlog_Do_DB: test
Binlog_Ignore_DB:mysql,information_schema,performance_schema,sys
Executed_Gtid_Set: 
1 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,则检查防火墙,主要问题可能就是数据库链接问题。若有其它状况能够查看日志进行解决。

4、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进行了一个简单的介绍,方便你们理解,若须要深刻了解,能够参考官方文档。

5、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.5.tar.gz
cd keepalived-1.3.5
./configure --prefix=/usr/local/keepalived
make && make install
cp /usr/local/src/keepalived-1.3.5/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 30
router_id MASTER-HA
}
vrrp_instance HA_2 {
    state MASTER     # 设置主节点的标识
    interface em1    # 设置实例绑定的网卡
    virtual_router_id 51   # 惟一标识id主从必须一致
    priority 101     # 优先级 这个和下面的权重结合使用
    advert_int 1
    nopreempt        # 非抢占式,在主节点上不须要设置
    authentication { # 主从必须一致
        auth_type PASS    # 认证方式
        auth_pass 1111      # 认证密码
    }
    virtual_ipaddress {
    192.168.175.11     # 虚拟的ip
    }
}

virtual_server 192.168.175.11 3306 {
     delay_loop 2
     lb_algo wrr   # lvs调度算法 有rr|wrr|lc|wlc|lblc|sh|dh等
     lb_kind DR    # 负载均衡转发规则NAT|DR|RUN
     persistence_timeout 60  # 重新链接的时间
     protocol TCP              # 协议名称
     real_server 192.168.175.210 3306 { # 真实的ip地址
         weight 3   # 权重
         notify_down /opt/script/chk_mysql.sh  # 检测脚本
         TCP_CHECK {
             connect_timeout 10   # 链接时长
             nb_get_retry 3       # 重复次数
             delay_before_retry 3 # 
             connect_port 3306

在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 30
router_id MASTER-HA
}
vrrp_instance HA_2 {
    state BACKUP    # 设置从节点的标识
    interface em1    # 设置实例绑定的网卡
    virtual_router_id 51   # 惟一标识id主从必须一致
    priority 101     # 优先级 这个和下面的权重结合使用
    advert_int 1
    nopreempt        # 非抢占式,在主节点上不须要设置
    authentication { # 主从必须一致
        auth_type PASS    # 认证方式
        auth_pass 1111      # 认证密码
    }
    virtual_ipaddress {
    192.168.175.11     # 虚拟的ip
    }
}

virtual_server 192.168.175.11 3306 {
     delay_loop 2
     #lb_algo wrr   # 这里在从节点上不须要设置不然会出现从节点没法链接上vip的状况
     #lb_kind DR    # 这里也无需设置
     persistence_timeout 60  # 重新链接的时间
     protocol TCP              # 协议名称
     real_server 192.168.175.211 3306 { # 真实的ip地址
         weight 3   # 权重
         notify_down /opt/script/chk_mysql.sh  # 检测脚本
         TCP_CHECK {
             connect_timeout 10   # 链接时长
             nb_get_retry 3       # 重复次数
             delay_before_retry 3 # 
             connect_port 3306

第四步:编写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

 

最后但愿你们帮忙点个赞和添加关注,小编会继续写一下通俗易懂的文章来和你们一块儿分享,最后送你们一句话:当你的能力撑不起你的野心时,就安静下来学习吧!!!!!!!!!!

相关文章
相关标签/搜索