linux使用mysql+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/
在这里插入图片描述
百度云链接

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

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

mkdir /usr/local/server

进入文件夹

cd /usr/local/server/

使用shell工具上传
在这里插入图片描述

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

在这里插入图片描述

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
在这里插入图片描述

[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   

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

在这里插入图片描述
再执行下面三步操作,然后重新登录。

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端口
在这里插入图片描述
连接成功
在这里插入图片描述
执行一下操作,不用每次在/mysql/bin目录下登录了

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

在这里插入图片描述

克隆镜像

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
完成后会自动添加到列表中,如未自动添加,执行如下操作
在这里插入图片描述
找到.vmx文件
在这里插入图片描述

二.配置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

在这里插入图片描述

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> 

会用到这两个值
在这里插入图片描述

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)

在这里插入图片描述
主机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;

在这里插入图片描述
mysql_CentOS_2有同步
在这里插入图片描述

mysql_CentOS_2新增一条数据,这里id是自增
在这里插入图片描述

mysql_CentOS_1有同步在这里插入图片描述

mysql_CentOS_1新增一条数据
在这里插入图片描述

mysql_CentOS_2有同步
在这里插入图片描述

三.配置keepalived高可用

两个节点都执行以下操作

yum -y install keepalived

查看本机网卡

ifconfig

在这里插入图片描述

修改主机mysql_CentOS_1的keepalived配置文件

cd /etc/keepalived

在这里插入图片描述
或者使用vi编辑

vi /etc/keepalived/keepalived.conf

在这里插入图片描述
按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/

在这里插入图片描述

! 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服务

四.测试高可用

在这里插入图片描述
现有192.168.137.137 192.168.137.138两台数据库服务器,互为主从

使用keepalived配置虚拟ip为 192.168.137.120
在这里插入图片描述
使用Navicat连接
在这里插入图片描述
测试插入一条数据
往120虚拟IP连接中插入一条
在这里插入图片描述
137,138两台都可看到
在这里插入图片描述
测试停止137
在这里插入图片描述
再次插入
在这里插入图片描述
重新启动137
在这里插入图片描述
137有新增
在这里插入图片描述
测试关闭138
在这里插入图片描述
插入一条
在这里插入图片描述
137
在这里插入图片描述
重启138
在这里插入图片描述
有停机时加入的数据
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45352783/article/details/117226607