linux使用mysql+keepalived双主实现

文章目录

    • 环境准备
    • 一.安装mysql
      • 1.下载
      • 2.解压
      • 3.创建mysql用户组和用户并修改权限
      • 4.修改配置文件
      • 5.初始化数据库
      • 6.修改密码
      • 7开启远程连接
    • 克隆镜像
    • 二.配置MySQL互为主从
      • 1.修改虚拟机uuid
      • 2.修改mysql配置文件
      • 3.将mysql_CentOS_2设置为mysql_CentOS_1的从服务器
        • 1.在mysql_CentOS_1上创建授权用户
        • 2.查看mysql_CentOS_1的当前binlog状态信息
        • 3.在mysql_CentOS_2上指定mysql_CentOS_1为master,并开启slave功能
      • 4.将mysql_CentOS_1设置为mysql_CentOS_2的从服务器
        • 1.在mysql_CentOS_2上创建授权用户
      • 5.测试同步
    • 三.配置keepalived高可用
      • 修改主机mysql_CentOS_1的keepalived配置文件
      • 指定脚本目录
      • 修改主机mysql_CentOS_2的keepalived配置文件
      • 指定脚本目录
    • 四.测试高可用

环境准备

准备两台centOS服务器
在这里插入图片描述

centOS镜像百度云地址
链接:https://pan.baidu.com/s/1ppwoEMHd3i9S1McegCaEqg
提取码:0b0y

主机名 ip 服务
mysql_centOS_1 192.168.137.137 mysql+keepalived
mysql_centOS_1 192.168.137.137 mysql+keepalived

一.安装mysql

1.下载

这里使用5.7

下载地址:https://downloads.mysql.com/archives/community/
linux使用mysql+keepalived双主实现_第1张图片
百度云链接

链接:https://pan.baidu.com/s/1uwdRV6B6qDtOCELadQGx1Q
提取码:1rve

在本地下载完成后使用shell工具上传到虚拟机
创建一个文件夹存放

mkdir /usr/local/server

进入文件夹

cd /usr/local/server/

使用shell工具上传
linux使用mysql+keepalived双主实现_第2张图片

2.解压

tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar 

在这里插入图片描述

在移动,并重命名

mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql

linux使用mysql+keepalived双主实现_第3张图片

3.创建mysql用户组和用户并修改权限

groupadd mysql
useradd -r -g mysql mysql

创建数据目录并赋予权限

mkdir -p  /data/mysql              #创建目录
chown mysql:mysql -R /data/mysql   #赋予权限

4.修改配置文件

vim /etc/my.cnf

或者 使用shell工具直接修改

cd /etc

然后找到my.cnf
linux使用mysql+keepalived双主实现_第4张图片

[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true

5.初始化数据库

进入mysql/bin目录

cd /usr/local/mysql/bin/

初始化

./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize

查看初始密码

cat /data/mysql/mysql.err

在这里插入图片描述
复制密码,保存,之后要用到

启动

service mysql start

ps -ef|grep mysql

在这里插入图片描述
在这里插入图片描述
启动成功

6.修改密码

进入mysql/bin 目录

cd /usr/local/mysql/bin

在这里插入图片描述

./mysql -u root -p   

密码是随机生成的,之前复制的

linux使用mysql+keepalived双主实现_第5张图片
再执行下面三步操作,然后重新登录。

SET PASSWORD = PASSWORD('123456');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;    

7开启远程连接

use mysql                                            #访问mysql库
update user set host = '%' where user = 'root';      #使root能再任何host访问
FLUSH PRIVILEGES;                                    #刷新

开启防火墙

1、开启防火墙
systemctl start firewalld

2、开放指定端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
命令含义:
–zone #作用域
–add-port=80/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效

3、重启防火墙
firewall-cmd --reload

4、查看端口号
netstat -ntlp //查看当前所有tcp端口
linux使用mysql+keepalived双主实现_第6张图片
连接成功
linux使用mysql+keepalived双主实现_第7张图片
执行一下操作,不用每次在/mysql/bin目录下登录了

ln -s  /usr/local/mysql/bin/mysql    /usr/bin

linux使用mysql+keepalived双主实现_第8张图片

克隆镜像

安装完mysql_centOS_1后可以克隆镜像或再到mysql_centOS_2上操作一次,克隆镜像在做同步的时时需要修改uuid,后面会提到

linux使用mysql+keepalived双主实现_第9张图片

linux使用mysql+keepalived双主实现_第10张图片

linux使用mysql+keepalived双主实现_第11张图片
linux使用mysql+keepalived双主实现_第12张图片
完成后会自动添加到列表中,如未自动添加,执行如下操作
linux使用mysql+keepalived双主实现_第13张图片
找到.vmx文件
linux使用mysql+keepalived双主实现_第14张图片

二.配置MySQL互为主从

1.修改虚拟机uuid

由于第二台虚拟机是直接克隆的,会导致mysql的uuid会一样,在后面配置同步链路是会失败,修改其中一台的uuid就行了

 cd /data/mysql/
 vim auto.cnf

按i或者o进入编辑模式
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210525100147653.png在这里插入图片描述
修改完成后,按esc,再 : 进入指令模式,输入 wq 按 enter 保存退出

2.修改mysql配置文件

修改主机 mysql_CentOS_1的配置文件

vim /etc/my.cnf
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
server_id=137					#保持唯一,一般和自己的ip尾号保持一致
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
log-bin=/data/mysql/log_bin
relay-log=/data/mysql/relay-bin        #指定中继日志
relay-log-index=relay-bin.index
auto_increment_increment=2  #表示自增长字段每次递增的量,值应设为整个结构中服务器的总数,我这里用到两台服务器,所以值设为2
auto_increment_offset=1   #是用来设定数据库中自动增长的起点(即初始值),因为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突。
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true

修改主机 mysql_CentOS_2的配置文件

vim /etc/my.cnf
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
server_id=138
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
log-bin=/data/mysql/log_bin
relay-log=/data/mysql/relay-bin        #指定中继日志
relay-log-index=relay-bin.index
auto_increment_increment=2	#表示自增长字段每次递增的量,值应设为整个结构中服务器的总数,我这里用到两台服务器,所以值设为2
auto_increment_offset=2     #是用来设定数据库中自动增长的起点(即初始值),因为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突。

注:可以在my.cnf文件中添加“binlog_do_db=数据库名”配置项(可以添加多个)来指定要同步的数据库 

pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true

3.将mysql_CentOS_2设置为mysql_CentOS_1的从服务器

1.在mysql_CentOS_1上创建授权用户

mysql -u root -p
123456

linux使用mysql+keepalived双主实现_第15张图片

mysql> grant replication slave on *.* to rep@'%' identified by '123456'; 
mysql> flush privileges;

2.查看mysql_CentOS_1的当前binlog状态信息

mysql> show master status\G
*************************** 1. row ***************************
             File: log_bin.000006
         Position: 696
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

mysql> 

会用到这两个值
linux使用mysql+keepalived双主实现_第16张图片

3.在mysql_CentOS_2上指定mysql_CentOS_1为master,并开启slave功能

#指定master地址
mysql> change master to master_host='192.168.137.137', # mysql_CentOS_1的ip
    -> master_user='rep',
    -> master_password='123456',
    -> master_log_file='log_bin.000006',    #必须和master上查看到的名字一样
    -> master_log_pos=696;      #同上,这个值也是在master上查看到的
#启动slave功能
mysql> start slave;
#确定配置成功
mysql> show slave status\G            #查看slave状态
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.137.138
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: log_bin.000007
          Read_Master_Log_Pos: 154
               Relay_Log_File: relay-bin.000009
                Relay_Log_Pos: 318
        Relay_Master_Log_File: log_bin.000007
             Slave_IO_Running: Yes               # 这个值必须为Yes
            Slave_SQL_Running: Yes             # 这个值也必须为Yes

#只要上面两个值为yes,则表示主从没有问题,
#其中,IO线程是去master上面读取二进制日志到本地的中继日志中;
SQL线程是将本地的中继日志中的内容转换为sql语句并执行。

4.将mysql_CentOS_1设置为mysql_CentOS_2的从服务器

1.在mysql_CentOS_2上创建授权用户

mysql -u root -p
123456
mysql> grant replication slave on *.* to rep@'%' identified by '123456'; 
mysql> flush privileges; 
mysql> show master status\G  
*************************** 1. row ***************************
             File: log_bin.000007
         Position: 154
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.02 sec)

linux使用mysql+keepalived双主实现_第17张图片
主机mysql_CentOS_1上操作如下:
指定mysql_CentOS_2为master

mysql> change master to master_host='192.168.137.138',
    -> master_user='rep',
    -> master_password='123456',
    -> master_log_file='log_bin.000007',
    -> master_log_pos=154;
mysql> start slave;       #启动slave
mysql> show slave status\G          #查看slave状态
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.137.137
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: log_bin.000006
          Read_Master_Log_Pos: 696
               Relay_Log_File: relay-bin.000006
                Relay_Log_Pos: 318
        Relay_Master_Log_File: log_bin.000006
                #确保下面两个值为yes
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

5.测试同步

mysql_CentOS_1创建test数据库,test1表

-- 建表sql
CREATE TABLE `test1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4;

linux使用mysql+keepalived双主实现_第18张图片
mysql_CentOS_2有同步
linux使用mysql+keepalived双主实现_第19张图片

mysql_CentOS_2新增一条数据,这里id是自增
linux使用mysql+keepalived双主实现_第20张图片

mysql_CentOS_1有同步linux使用mysql+keepalived双主实现_第21张图片

mysql_CentOS_1新增一条数据
linux使用mysql+keepalived双主实现_第22张图片

mysql_CentOS_2有同步
linux使用mysql+keepalived双主实现_第23张图片

三.配置keepalived高可用

两个节点都执行以下操作

yum -y install keepalived

查看本机网卡

ifconfig

linux使用mysql+keepalived双主实现_第24张图片

修改主机mysql_CentOS_1的keepalived配置文件

cd /etc/keepalived

linux使用mysql+keepalived双主实现_第25张图片
或者使用vi编辑

vi /etc/keepalived/keepalived.conf

linux使用mysql+keepalived双主实现_第26张图片
按o或i进入编辑模式
配置文件如下

[root@mysql1 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
 
global_defs {
   router_id mysql-1      #此处的值必须唯一
}
 
vrrp_instance VI_1 {
    state BACKUP       #指定角色为backup,两台MySQL服务器的角色均为backup,设置backup将根据优先级决定主从
 
    interface ens33      #指定承载虚拟IP的网卡
    virtual_router_id 51         #指定组,同一个集群内的值必须一致。并且不可和局域网中的其他组冲突
    priority 100          #优先级范围为:0~100
    advert_int 1     #发vrrp包的时间间隔,即多久进行一次master选举(可认为是健康检查时间间隔)
    nopreempt         #不抢占,即允许一个priority比较低的节点作为master,     
    authentication {          #认证区域
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {         #VIP区域,指定vip地址
        192.168.137.120
    }
}
 
virtual_server 192.168.137.100 3306 {    #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
    delay_loop 2         #设置运行情况检查时间,单位是秒
    lb_algo rr      #设置后端调度算法
    lb_kind DR    #设置lvs实现负载均衡的机制,有NAT、TUN、DR三个模式,DR模式效率最高
    persistence_timeout 60     #会话保持时间,单位是秒
    protocol TCP     #指定转发协议类型,有TCP和UDP两种
 
    real_server 192.168.137.137 3306 {          #配置服务节点,这里指定的也就是本机的真实IP
        weight -20     #设置权重
    notify_down /etc/keepalived/bin/mysql.sh    #检测到real_server的MySQL服务宕机后执行的脚本。
    TCP_CHECK {
        connect_port 3306    #健康检查端口
        connect_timeout 3       #连接超时时间
        retry 3    #重试次数
        delay_before_retry 3      #重连间隔时间
     }
   }
}

指定脚本目录

mkdir /etc/keepalived/bin
cd /etc/keepalived/bin
vim bin/mysql.sh

#!/bin/bash
pkill keepalived #停止keepalived服务

chmod +x bin/mysql.sh    #赋予脚本执行权限
systemctl start keepalived        #启动keepalived服务

修改主机mysql_CentOS_2的keepalived配置文件

cd /etc/keepalived/

linux使用mysql+keepalived双主实现_第27张图片

! Configuration File for keepalived
 
global_defs {
   router_id mysql-2         #更改router_id,此处在热备组中必须要唯一
}
 
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90             #更改优先级
    advert_int 1
    nopreempt             
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.137.120
    }
}
 
virtual_server 192.168.137.20 3306 {
    delay_loop 2
    lb_algo rr
    lb_kind DR
    persistence_timeout 60
    protocol TCP
 
    real_server 192.168.137.138 3306 {        #更改为本机的IP地址及监听端口
        weight -20
    notify_down /etc/keepalived/bin/mysql.sh
    TCP_CHECK {
        connect_port 3306
        connect_timeout 3
        retry 3
        delay_before_retry 3
     }
   }
}

指定脚本目录

mkdir /etc/keepalived/bin
cd /etc/keepalived/bin
vim bin/mysql.sh

#!/bin/bash
pkill keepalived #停止keepalived服务

chmod +x bin/mysql.sh    #赋予脚本执行权限
systemctl start keepalived        #启动keepalived服务

四.测试高可用

linux使用mysql+keepalived双主实现_第28张图片
现有192.168.137.137 192.168.137.138两台数据库服务器,互为主从

使用keepalived配置虚拟ip为 192.168.137.120
在这里插入图片描述
使用Navicat连接
linux使用mysql+keepalived双主实现_第29张图片
测试插入一条数据
往120虚拟IP连接中插入一条
linux使用mysql+keepalived双主实现_第30张图片
137,138两台都可看到
linux使用mysql+keepalived双主实现_第31张图片
测试停止137
linux使用mysql+keepalived双主实现_第32张图片
再次插入
linux使用mysql+keepalived双主实现_第33张图片
重新启动137
linux使用mysql+keepalived双主实现_第34张图片
137有新增
linux使用mysql+keepalived双主实现_第35张图片
测试关闭138
linux使用mysql+keepalived双主实现_第36张图片
插入一条
linux使用mysql+keepalived双主实现_第37张图片
137
linux使用mysql+keepalived双主实现_第38张图片
重启138
linux使用mysql+keepalived双主实现_第39张图片
有停机时加入的数据
linux使用mysql+keepalived双主实现_第40张图片

你可能感兴趣的:(mysql)