一文解决mysql双主+keepalived高可用搭建

双主+keepalived高可用:话不多说直接开干

1.准备工作

1.1两台centos7.9服务器

mysql-1:192.168.0.113
mysql-2:192.168.0.111

1.2mysql安装包

版本:mysql-5.7.26-el7-x86_64.tar.gz
下载地址:https://cdn.mysql.com/archives/mysql-5.7/mysql-test-5.7.26-el7-x86_64.tar.gz

1.3keepalived安装包

版本:keepalived-2.2.7.tar.gz
下载地址:https://www.keepalived.org/software/keepalived-2.2.7.tar.gz

2.安装mysql

2.1下载并上传软件至 ~目录

2.2解压软件

[root@test2 ~]# tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
[root@test2 ~]# mv mysql-5.7.26-linux-glibc2.12-x86_64  /opt/mysql

2.3创建用户处理原始环境

#卸载系统自带mariadb
[root@test2 mysql] yum remove mariadb-libs-5.5.68-1.el7.x86_64 -y
#查看系统自带mariadb      
[root@test2 mysql] rpm -qa |grep mariadb   
#创建mysql系统用户                         
[root@test2 mysql] useradd -s /sbin/nologin mysql 

2.4 设置环境变量

vim /etc/profile                                  
export PATH=/opt/mysql/bin:$PATH
[root@test2 ~]# source /etc/profile           
[root@test2 ~]# mysql -V
mysql  Ver 14.14 Distrib 5.7.26, for linux-glibc2.12 (x86_64) using  EditLine wrapper

2.5创建数据路径并授权(无新磁盘跳过)

#查看磁盘信息
[root@test2 mysql]# fdisk -l    
磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区
#格式化
[root@test2 ~]# mkfs.xfs /dev/sdb        
#创建数据目录
[root@test2 ~]# mkdir /data 
#查看磁盘UUID               
[root@test2 ~]# blkid
#修改磁盘管理文件                       
[root@test2 ~]# vim /etc/fstab 
#修改文件将sdb磁盘 挂载到/data目录
[root@test2 ~]# UUID="eac66d23-c5db-4d22-8e4e-e5e30e8ae37c" /data xfs defaults 0 0 
#挂载
[root@test2 ~]# mount -a            
[root@test2 data]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   12M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  5.7G   12G   34% /
/dev/sda1               1014M  151M  864M   15% /boot
tmpfs                    378M     0  378M    0% /run/user/0
/dev/sdb                 100G   33M  100G    1% /data

2.6授权

#mysql默认用户是mysql
chown -R mysql.mysql /opt/mysql*            #软件路径
chown -R mysql.mysql /data/mysql*           #数据路径

2.7数据初始化(创建系统数据)

#创建数据初始化目录
[root@test2 ~]# mkdir /data/mysql/data -p         
[root@test2 ~]# mkdir -p /data/mysql/log
#授权
[root@test2 ~]# chown -R mysql.mysql /data        
[root@test2 ~]#mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/data/mysql/data 
#初始化完成生成临时密码 用于第一次登录
2023-02-20T08:33:58.573076Z 1 [Note] A temporary password is generated for root@localhost: 3a;PJB&m7tze 

2.8配置文件的准备(两边一致 server-id唯一)

#用于启动MySQL
cat >/etc/my.cnf <<EOF
[client]
port=3306
socket=/data/mysql/log/mysql.sock
default-character-set=utf8

[mysqld]
port=3306
basedir=/opt/mysql
datadir=/data/mysql/data

socket=/data/mysql/log/mysql.sock
log-error=/data/mysql/log/mysql.log
pid-file=/data/mysql/log/mysql.pid

#server-id 
server-id=1
log-bin=mysql-bin
binlog_do_db=test_db
#binlog_ignore_db=mysql
#binlog_ignore_db=information_schema
#binlog_ignore_db=sys
#binlog_ignore_db=performance_schema
binlog_format=row
character-set-server=utf8

2.9启动数据库

#systemd 方式启动
cat >/etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql

ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF

#启动命令
[root@test2 data]# systemctl start mysqld
[root@test2 data]# systemctl stop mysqld
[root@test2 ~]# systemctl enable mysqld.service #开启自启

2.10修改密码

#使用临时密码登录
mysql -uroot -p
Enter password: 输入临时密码
#修改密码
mysql> alter user root@'localhost' identified by '123123';
#更新策略
mysql> flush privileges;   

3.mysql数据库双主配置

3.1服务器113

在这里插入图片描述

#在主服务器设置允许root用户在所有IP访问数据库
mysql>grant replication slave on *.* to 'root'@'%' identified by '123123';
#刷新MySQL的系统权限相关表­
mysql> flush privileges;
#锁定数据库,此时不允许更改任何数据
mysql> flush tables with read lock; 
#查看状态,这些数据是要记录的
mysql> show master status;

3.2登录服务器111 配置113主库信息

#允许root用户在所有IP访问数据库
grant replication slave on *.* to 'root'@'%' identified by '123123';
#刷新MySQL的系统权限相关表­
mysql> flush privileges;
#在另外的服务器上测试连通性
[root@test2 mysql]# mysql -h192.168.0.111 -uroot -p123123
#配置113主库信息
mysql> change master to 
 -> master_host='192.168.0.113',
 -> master_port=3306, 
 -> master_user='root', 
 -> master_password='123123', 
   -> master_log_file='mysql-bin.000001',
 -> master_log_pos=1137; 
#启动从库配置
mysql> start slave;  
#查看状态,这些数据是要记录的
mysql> show master status;
#查看Slave_IO_Running、Slave_SQL_Running都为yes则成功
mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.113							    
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 1137
               Relay_Log_File: node1-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
#注释: 注意是英文单引号
mysql> change master to 
    -> master_host='192.168.0.113',              #113服务器mysql ip
    -> master_port=3306,                         #113服务器mysql端口
    -> master_user='root',                       #113服务器mysql从库同步用户
    -> master_password='123123',               	 #113服务器mysql从库同步用户密码
    -> master_log_file='mysql-bin.000001',       #前面记录的113服务mysql file值
    -> master_log_pos=1137;                      #前面记录的113服务mysql psition值

3.3登录113服务器,配置111的库信息

mysql> change master to 
     -> master_host='192.168.0.111',
     -> master_port=3306, 
     -> master_user='root', 
     -> master_password='123123', 
       -> master_log_file='mysql-bin.000001',
     -> master_log_pos=985; 

#启动从库配置
mysql> start slave;  
#查看状态,这些数据是要记录的
mysql> show master status;
#查看Slave_IO_Running、Slave_SQL_Running都为yes则成功
show slave status \G;         
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.111
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 985
               Relay_Log_File: test2-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

3.4双主模式搭建完成测试

#连接113服务器 创建test_db数据库,t_test表,插入数据id=1,name='Raptao'
mysql> create database test_db;
Query OK, 1 row affected (0.00 sec)
mysql> use test_db;
mysql> create table t_test(id int primary key, name varchar(30));
Query OK, 0 row affected (0.01 sec)
mysql> insert into t_test values (1, 'zhangsan');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t_test;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
+----+----------+
1 rows in set (0.00 sec)
#连接111服务器,查看test_db数据库、t_test表以及数据是否同步,并插入id=2,name=‘lisi’ 
mysql> show databases;
| test_db            |        #test_db数据库已同步过来
mysql> use test_db;
mysql> show tables;
| t_test            |        #t_test表已同步过来
mysql> select * from t_test;
|  1 | zhangsan |            #数据已同步过来
mysql> insert into t_test values (2, 'lisi');    #插入数据
Query OK, 1 row affected (0.01 sec)
#113服务器查看数据已同步
mysql> select * from t_test;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
+----+----------+

4.keepalived配置

4.1两台服务器安装步骤相同,配置文件不同

#安装相关依赖包,并下载keepalived安装包,解压,配置,编译
[root@test2 ~]# cd /opt
[root@test2 opt]# yum -y install gcc openssl-devel popt-devel psmisc
[root@test2 opt]# wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
[root@test2 opt]# tar -zxvf keepalived-2.2.7.tar.gz
[root@test2 opt]# cd keepalived-2.2.7
[root@test2 keepalived-2.2.7]# ./configure --prefix=/opt/keepalived2.2.7
[root@test2 keepalived-2.2.7]# make && make install
#将文件复制到对应目录下
[root@test2 keepalived-2.2.7]# mkdir /etc/keepalived
[root@test2 keepalived-2.2.7]# cp keepalived/etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf
[root@test2 keepalived-2.2.7]# cp keepalived/etc/init.d/keepalived /etc/init.d/
[root@test2 keepalived-2.2.7]# cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@test2 keepalived-2.2.7]# cp bin/keepalived /usr/sbin/ 

4.2修改113服务器/etc/keepalived/keepalived.conf配置文件

! Configuration File for keepalived

global_defs {
   notification_email {        #邮件告警
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_httpd {
   script "killall -0 mysqld"    #返回值判断mysql服务是否正常
   interval 2
   }
    
vrrp_instance HA_1 {
   state BACK
   interface ens33
   virtual_router_id 80
   priority 100                #值越大 优先级越高  主库
   advert_int 2
   nopreempt
   authentication {
      auth_type PASS
      auth_pass qwaszx
      }
   track_script {
   check_httpd
   }

   virtual_ipaddress {
      192.168.0.222/24 dev ens33    #VIP 地址
   }
}

4.3修改111服务器/etc/keepalived/keepalived.conf配置文件


! Configuration File for keepalived

global_defs {
   notification_email {        #邮件告警
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_httpd {
   script "killall -0 mysqld"    #返回值判断mysql服务是否正常
   interval 2
   }
    
vrrp_instance HA_1 {
   state BACK
   interface ens33
   virtual_router_id 80
   priority 80                #值越大 优先级越高 
   advert_int 2
   nopreempt
   authentication {
      auth_type PASS
      auth_pass qwaszx
      }
   track_script {
   check_httpd
   }

   virtual_ipaddress {
      192.168.0.222/24 dev ens33
   }
}

4.4将113、111服务器keepalived加入开机自启,并启动服务

[root@test2 keepalived-2.2.7]# systemctl enable keepalived
[root@test2 keepalived-2.2.7]# systemctl start keepalived

5.测试keeaplived

5.1启动后相当于虚拟出一个vip 192.168.0.222,可使用远程连接工具,连接该服务器,连接进去后使用ifconfig查看该虚拟vip实际上使用的实体服务器是113服务器。

在这里插入图片描述在这里插入图片描述

5.2将111服务器的keepalived应用停止,再次查看222服务ifconfig,可以看到,222服务器自动将实体机ip漂移到了113服务器上

在这里插入图片描述
测试成功!

6.mysql双主双活+keepalived高可用整体测试

6.1首先将113、111两台服务器mysql、keepalived应用全部启动,然后用mysql连接工具连接keepalived虚拟出来的192.168.0.222服务器

在这里插入图片描述

6.2再222数据库test_db库t_test表插入id=3,name=‘Raptao’

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

6.3当一台mysql服务挂掉后会自己切换至另一台MySQL

已完成测试mysql高可用,当113mysql服务挂掉即时切换至111mysql服务
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值