Keepalived+MySql 8.0(双主) HA搭建

操作系统:ubuntu 16.04
两台服务器ip分别为:
192.168.0.105
192.168.0.106
虚拟ip为:192.168.0.250

一. 离线安装mysql8.0.18

1. 下载mysql安装包

百度网盘
提取码:22th

2. 安装mysql

依次执行下面11条命令

sudo dpkg -i mysql-community-client-core_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-common_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-community-client_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i libmysqlclient21_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i libmysqlclient-dev_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i libaio1_0.3.110-2_amd64.deb
sudo dpkg -i libmecab2_0.996-1.2ubuntu1_amd64.deb
sudo dpkg -i mysql-client_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-community-server-core_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-community-server_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-server_8.0.18-1ubuntu16.04_amd64.deb

注:执行第10条命令时,会提示设置密码,如下图,选择5.x版本的加密方式:
加密方式
安装完成后启动mysql

service mysql start

登陆验证安装成功
l连接mysql

二. mysql配置互为主从

1.创建同步用户

使用mysql数据库

use mysql;

然后分别为另一主机创建一个链接用户,该帐户必须授予REPLICATION SLAVE权限,因为mysql8在授权语句中不能出现IDENTIFIED BY ‘password’; 因此创建用户和授予权限需要分开执行:

  1. 在105上执行创建用户并赋权:
CREATE USER 'replicate'@'192.168.0.106' IDENTIFIED WITH 'mysql_native_password' BY 'root';
GRANT REPLICATION SLAVE ON *.* TO 'replicate'@'192.168.0.106';
  1. 在106上执行:
CREATE USER 'replicate'@'192.168.0.105' IDENTIFIED WITH 'mysql_native_password' BY 'root';
GRANT REPLICATION SLAVE ON *.* TO 'replicate'@'192.168.0.105';

【注意】 对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库。

flush privileges;

开启允许远程访问(默认未开启)

update user set host='%' where user ='root';

创建完成后我们可以通过使用对方主机对本机数据库进行访问,看下是否能链接成:

mysql -h 192.168.0.106 -ureplicate -proot
mysql -h 192.168.0.105 -ureplicate -proot
2.修改mysql配置文件

找到mysql配置文件,在[mysqld]中添加(修改)如下内容:

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
  1. 192.168.0.105服务器
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,information_schema,performance_schema,sys # 不记录日志的数据库
sync_binlog=1 #开启binlog日志同步功能
slave_skip_errors=1146 # 跳过1146错误
  1. 192.168.0.106服务器
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,information_schema,performance_schema,sys # 不记录日志的数据库

sync_binlog=1 #开启binlog日志同步功能

slave_skip_errors=1146 # 跳过1146错误

三、重启并配置同步

1. 重启两台服务器上的mysql

两台服务器分别执行:

service mysql restart
2.查看两个服务器作为主服务器的状态
show master status\G

105
106

3.用change mster 语句指定同步位置

进入mysql操作界面(mysql -uroot -p)

  1. 192.168.0.105服务器:
    先停止slave服务线程
stop slave;

然后:

change master to master_host='192.168.0.106',master_user='replicate',
master_password='root',master_log_file='mysql-bin-2.000001',master_log_pos=155;

重启从服务线程:

start salve;
  1. 192.168.0.106服务器:
    先停止slave服务线程
stop slave;

然后:

change master to master_host='192.168.0.105',master_user='replicate',
master_password='root',master_log_file='mysql-bin-1.000001',master_log_pos=155;

重启从服务线程:

start salve;
4.分别查看从服务器状态
show slave status\G

106

四、验证

在192.168.0.105服务器上,连接数据库:

mysql -uroot -proot

创建一个测试库db_test

create database db_test;

创建一张测试表tb_user

create table tb_user (id int,name varchar(20));

插入一条数据

insert into tb_user(id,name) values (1, 'tomcat');

查看数据

select * from tb_user;

105
在192.168.0.106服务器上,验证mysql是否同步数据

连接数据库:

mysql -uroot -proot

106
验证成功!

五、配置keepalived实现mysql双主高可用

1. 下载keepalived安装包

百度网盘
提取码:oz2c

2. 安装
sudo dpkg -i keepalived_1%3a1.2.24-1ubuntu0.16.04.2_amd64.deb
3. 修改配置
sudo vim /etc/keepalived/keepalived.conf

以上均需要在两台服务器上分别执行。

  1. 192.168.0.105服务器上配置如下
global_defs {
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_mysql_port {     #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等
    script "/opt/chk_mysql.sh"   #这里通过脚本监测
    interval 2                   #脚本执行间隔,每2s检测一次
    weight -5                    #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
    fall 2                    #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
    rise 1                    #检测1次成功就算成功。但不修改优先级
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    nopreempt #不抢占模式,只有优先级高的机器上设置即可,优先级低的机器可不设置
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.250
    }
    track_script {
        chk_mysql_port
    }
}
  1. 192.168.0.106服务器上配置,只修改priority为90、nopreempt不设置、real_server设置本地IP。
global_defs {
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_mysql_port {     #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等
    script "/opt/chk_mysql.sh"   #这里通过脚本监测
    interval 2                   #脚本执行间隔,每2s检测一次
    weight -5                    #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
    fall 2                    #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
    rise 1                    #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.250
    }
    track_script {
        chk_mysql_port
    }
}

两台服务器分别编写检测脚本

sudo vim /opt/chk_mysql.sh
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
    /etc/init.d/keepalived stop
fi

添加执行权限

chmod +x /opt/chk_mysql.sh

启动keepalived

service keepalived start

查看日志

tail -f /var/log/messages

如果没有messages文件,则修改文件/etc/rsyslog.d/50-default.conf

sudo vim /etc/rsyslog.d/50-default.conf

取消/var/log/messages注释
b
重启rsyslog服务

sudo service rsyslog restart
4.测试
1.在远程客户端通过vip登陆测试
mysql -h192.168.0.250 -uroot -proot
2.分别执行命令 ip addr,并查看日志,确定当前哪台服务器是master状态
  1. 105上
    105
  2. 106上
    106
    由上图知道,现在106服务器MASTER,我们停止此服务器上的mysql,测试ip是否漂移
service mysql stop

在这里插入图片描述
查看105服务器
在这里插入图片描述
测试成功!

六.参考文章

配置本地数据源
Ubuntu18.04-离线安装mysql-8.0
centos7下mysql双主+keepalived
mysql+keepalived实现双主自由切换
mysql双机热备以及使用keepalived实现mysql双主高可用

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值