切换ip下的sql server用户权限丢失_离线环境下Keepalived+MySQL 8.0安装和双主高可用配置...

29a3fb2ffd73d5ab4e0991fa488ca419.png

系统环境准备

两台服务器IP:

  • 10.17.55.201主要的
  • 10.17.55.202次要的

两台系统版本均为 CentOS Linux release 7.4.1708 (Core)

MySQL官网上下载mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar,即适用于CentOS的MySQL 8.0.18

组件安装

CentOS可能带有默认的Mariadb,如果不想用的话可以执行rpm -qa|grep mariadb找到所有安装包,然后依次执行rpm -r 每个文件名卸载Mariadb。

然后从官网上下载相应的MySQL安装文件。

安装顺序为

 rpm -ivh mysql-community-common-5.7.17-1.el7.x86_64.rpm   
 rpm -ivh mysql-community-libs-5.7.17-1.el7.x86_64.rpm   
 rpm -ivh mysql-community-client-5.7.17-1.el7.x86_64.rpm  
 rpm -ivh mysql-community-server-5.7.17-1.el7.x86_64.rpm  
 rpm -ivh mysql-community-devel-5.7.17-1.el7.x86_64.rpm  

安装最后一个的时候有可能出现依赖openssl的问题,重新安装openssl无效,输入参数-e --nodeps可以解决,暂不清楚原理

数据库配置

先从主备模式开始进行配置,方便排错。

主实例

修改配置文件/etc/my.cnf

 [mysqld]
 log-bin=mysql-bin #日志名称
 server-id=1 #数据库id,两个实例不能一样

然后创建用户,用于数据同步,MySQL 8.0之后的用户创建方式和之前不一样

 CREATE USER 'repl'@'10.17.55.202' IDENTIFIED WITH mysql_native_password BY '1';
 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.17.55.202';

然后刷新权限

 flush privileges;

查看主节点的binary log文件名和位置:

 show master status;

9ff54081de8e90413ab8b8fe9d4074fa.png

记录下来FilePosition两个字段,下面要用。

备用实例

在从节点上设置参数:

 CHANGE MASTER TO MASTER_HOST='10.17.55.201',MASTER_USER='repl',MASTER_PASSWORD='1',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=1141;

然后启动从节点start slave,并且查看节点状态show slave statusG

如果看到节点的状态信息中包含一下的两条,证明连接成功。

 Slave_IO_State: Waiting for master to send event
 Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

然后验证一下:

切换回主节点,新建一个数据库或者表,从节点中应该同步添加了。

双主环境

以上搭建的是MySQL主备模式,双主模式其实一样,只不过两者之间互为主备。

同样的,把之前的备用节点当做主节点,之前的主节点当做备用节点,再来一遍。不要忘记修改my.cnf

配置完成之后继续新建一个数据库或者表,测试是否同步。

Keepalived安装和配置

CentOS上直接可以用yum安装Keepalived,省了不少事情,不过可能遇到错误

 Error: Package: 1:net-snmp-agent-libs-5.7.2-43.el7.x86_64 (base)
            Requires: libmysqlclient.so.18()(64bit)
 Error: Package: 1:net-snmp-agent-libs-5.7.2-43.el7.x86_64 (base)
            Requires: libmysqlclient.so.18(libmysqlclient_18)(64bit)

安装MySQL安装包中的libs-compat即可

然后对keepalived进行配置,最简配置如下:

主节点:

 ! Configuration File for keepalived
 ​
 global_defs {
    router_id master
 }
 ​
 vrrp_instance VI_1 {
     state MASTER
     interface eth1
     virtual_router_id 51
     priority 100
     advert_int 1
     unicast_src_ip 172.18.0.2
     unicast_peer {
         1172.18.0.3
     }
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
     172.18.0.10
     }
 }

从节点:

 ! Configuration File for keepalived
 ​
 global_defs {
    router_id master
 }
 ​
 vrrp_instance VI_1 {
     state MASTER
     interface eth1
     virtual_router_id 51
     priority 90
     advert_int 1
     unicast_src_ip 172.18.0.3
     unicast_peer {
         1172.18.0.2
     }
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         172.18.0.10
     }
 }

主要有几点重要的地方,一个是router_id不能一样,这个是区分每个实力上的标志。

然后state可以都为master,即按照权重来强占。

interface填写的是网卡名称,这个要结合自己实际的网卡名。

virtual_router_id在同一个网络环境下不可以重复,不然会出问题。

priority是权重,按照这个值来确定主节点。

一般采用单播的形式,方便配置而且不影响其他服务,所以两个配置文件中的unicast_src_ipunicast_peer是相反的。

virtual_ipaddress填写需要使用的虚拟IP就可以了。

如果是在容器中创建虚拟IP,有可能遇到错误:

 IPVS: Can't initialize ipvs: Protocol not available

开启的必要条件有两个:

  1. 容器放开权限,即添加参数--privileged
  2. 宿主机同样需要开启ipvasdm

测试

输入ip a应该就可以看到虚拟ip出现在网络信息中。

没有这个命令的话通过yum install iproute安装

附录

MySQL状态监测脚本

 #!/bin/bash
 pgrep -x mysqld &> /dev/null
 if [ $? -ne 0 ]
 then
   echo "not running"
 else
   echo "running"
 fi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值