安装MySQL:
cd /usr/local/src/
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
yum -y install mysql-server
service mysqld restart
grep "password" /var/log/mysqld.log
mysql -u root -p
alter user 'root'@'localhost' identified by 'Root!!2018';
flush privileges;
支持root用户允许远程连接mysql数据库
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;
默认配置文件路径:
配置文件:/etc/my.cnf
日志文件:/var/log/var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid
忽略大小写 : lower_case_table_names=1 (建议最好忽略) 1: 忽略 0:区分大小写
MySQL 主从双备配置:
准备:/etc/my.cnf
增加以下内容:
开始-->
server_id=1 #不重复
log-bin = mysql-bin
binlog_format = mixed #指定mysql的binlog日志的格式,mixed是混合模式
relay-log = relay-bin #开启中继日志功能
relay-log-index = slave-relay-bin.index #中继日志清单
auto-increment-increment = 2 #表示自增长字段每次递增的量,其默认值是1。它的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2。
auto-increment-offset = 2 #不重复 用来设定数据库中自动增长的起点(即初始值),因为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突。
结束--<
在mysql 1 主机上创建授权账户,允许在mysql 2 主机上连接(在主库中对从库进行同步授权):
grant replication slave on *.* to 'username'@'ip'identified by 'password';
查看mysql 1 的当前binlog状态信息:
show master status;
在mysql 2 上将mysql 1 设为自已的主服务器并开启slave功能:
change master to master_host='ip',master_user='username',master_password='password',master_log_file='mysql-bin.000001',master_log_pos=456;
start slave;
查看mysql2的状态:
show slave status\G;
注意事项一:在mysql 1 防火墙上开启3306/tcp例外:
firewall-cmd --permanent --add-port=8888/tcp;firewall-cmd --reload
注意事项二:如果系统是复制过来的,需要更换mysql2的UUID号:
cd /var/lib/mysql/
vi auto.cnf #修改server-uuid
查找命令:
find -name auto.cnf
注意:修改uuid后,需要重启MySQL服务: >>> systemctl restart mysqld
以下为测试,看是否配置成功:
create database bdqn;
use bdqn;
create table it(id int primary key auto_increment,name varchar(20));
show databases;
use bdqn;
show tables;
insert into it(name) values('tom');
select * from it;
MySQL + keepalived HA配置部署:
首先安装gcc、c++编译器以及内核文件
yum -y install gcc gcc-c++ kernel-devel
tar -zxvf keepalived-1.2.tar.gz -C /usr/src/
cd /usr/src/keepalived-1.2/
在两台mysql上都开始解压缩编译安装keepalived:
./configure --prefix=/ && make && make install
ls /etc/init.d/keepalived
执行make install操作之后,会自动生成/etc/init.d/keepalived脚本文件,但还需要手动添加为系统服务,这样就可以使用service、chkconfig工具来对keepalived服务程序进行管理 (注意:可能路径不一定是这个,我的在安装目录下)
chkconfig --add keepalived
chkconfig keepalived on
若开启了防火墙,则需要关闭防火墙或者建富策略(现实生产环境中,都不允许关防火墙的,所以我们还是建富策略为第一选择)(两台mysql都需要操作)
firewall-cmd --permanent --add-rich rule="rule family=ipv4 destination address=224.0.0.18 protocol value=ip accept"
firewall-cmd reload
修改keepalived的配置文件:
vi /etc/keepalived/keepalived.conf #编辑信息
开始:(直接替换即可)
! Configuration File for keepalived
global_defs {
router_id mysql-1 #这里不一样 #当前节点名
}
vrrp_instance VI_1 {
state BACKUP #两台配置节点均为BACKUP
interface enp0s3 #绑定虚拟IP的网络接口
virtual_router_id 51 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
priority 100 #这里不一样 50 #节点的优先级,另一台优先级改低一点
advert_int 1 #组播信息发送间隔,两个节点设置必须一样
nopreempt #这里不一样 下个没这个 #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
authentication { #设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #指定虚拟IP,两个节点设置必须一样
192.168.1.150
}
}
virtual_server 192.168.1.150 3306 { #linux虚拟服务器(LVS)配置
delay_loop 2 #每个2秒检查一次real_server状态
lb_algo rr #LVS调度算法,rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #LVS集群模式 ,NAT|DR|TUN
persistence_timeout 60 #会话保持时间
protocol TCP #使用的协议是TCP还是UDP
real_server 192.168.1.100 3306 { #这里不一样
weight 3 #权重
notify_down /etc/keepalived/bin/mysql.sh #检测到服务down后执行的脚本
TCP_CHECK {
connect_timeout 3 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 3306 #健康检查端口
}
}
}
编辑信息-结束
/etc/init.d/keepalived start #启动服务 注意:但可能一定是这个目录下
mysql1和mysql2上都需要添加检测脚本:
作用:是当mysql停止工作时自动关闭本机的keeplived,从而实现将故障主机踢出热备组,因每台机器上keepalived只添加了本机为realserver,所以当mysqld正常启动后,我们还需要手动启动keepalived服务。
mkdir /etc/keepalived/bin
vi /etc/keepalived/bin/mysql.sh
#!/bin/bash
pkill keepalived
/sbin/ifdown enp0s3 && /sbin/ifup enp0s3
给mysql.sh脚本赋予可执行权限(两台mysql都操作同样的步骤):
chmod +x /etc/keepalived/bin/mysql.sh
在mysql1和mysql2上分别执行ip addr show dev eno16777736命令查看mysql1和mysql2对VIP(群集虚拟IP)的控制权:
测试:ip addr show dev enp0s3
systemctl stop mysqld
systemctl restart mysqld
/etc/init.d/keepalived start
再次测试
客户端测试:
grant all on *.* to 'user'@'ip' identified by 'password';
mysql -uroot -ppassword -hhost -P3306
show variables like 'server_id';
查看端口占用(小工具):
netstat -apn|grep 3306
总结:
Keepalived+mysql双主一般来说,中小型规模的时候,采用这种架构是最省事的。
在master节点发生故障后,利用keepalived的高可用机制实现快速切换到备用节点。
在这个方案里,有几个需要注意的地方:
1.采用keepalived作为高可用方案时,两个节点最好都设置成BACKUP模式,避免因为意外情况下(比如脑裂)相互抢占导致往两个节点写入相同数据而引发冲突;
2.把两个节点的auto_increment_increment(自增步长)和auto_increment_offset(自增起始值)设成不同值。其目的是为了避免master节点意外宕机时,可能会有部分binlog未能及时复制到slave上被应用,从而会导致slave新写入数据的自增值和原先master上冲突了,因此一开始就使其错开;当然了,如果有合适的容错机制能解决主从自增ID冲突的话,也可以不这么做;
3.slave节点服务器配置不要太差,否则更容易导致复制延迟。作为热备节点的slave服务器,硬件配置不能低于master节点;
4.如果对延迟问题很敏感的话,可考虑使用MariaDB分支版本,或者直接上线MySQL 5.7最新版本,利用多线程复制的方式可以很大程度降低复制延迟;
推荐文章:
命令行如何远程连接MySQL数据库
https://blog.csdn.net/weixin_40539892/article/details/79146999