Mysql+keepalived双主

搭建环境说明

第一、数据库安装

第二、备份数据库

第三、双主热备的配置

第四、keepalived原理

第五、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-11.noarch.rpm

3、mysql安装

yum -y install mysql-community-server

在安装mysql时有较多的东西需要安装,稍等片刻即可。

4、启动mysql

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

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

setenforce 0

方式二、永久关闭,通过设置配置文件的方式,将 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=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,则检查防火墙,主要问题可能就是数据库连接问题。如有其它情况可以查看日志进行解决。

四、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.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 {
[email protected]
}

notification_email_from [email protected]
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 {
[email protected]
}

notification_email_from [email protected]
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

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

猜你喜欢

转载自www.cnblogs.com/wallacewang/p/10006705.html