1.高可用搭建原理
当访问mysql时,如果该服务器挂掉如何继续访问该服务器的mysql。
当我们用keepalived提供的虚拟ip提供对外服务,如果该服务器挂掉时虚拟ip会飘到备用服务器继续对外提供服务。
而这时主服务器和备用服务器的mysql应当保持一致。
2.mysql互为主从搭建
主服务器: vim /etc/my.cnf修改配置文件
[mysqld]
server-id = 32 #让服务器拥有唯一的id号,为了让服务器知道谁是master
relay-log = relay-log
skip-name-resolve = on
log_slave_updates = 1
auto_increment_increment=2
auto_increment_offset=1
systemctl restart mysqld
进入数据库创建拷贝用户(两边都要创建)
mysql -uroot -p xxxxxxx(mysql的密码)
create user 'copy'@'%' identified with mysql_native_password by '密码';
grant replcation slave on *.* to 'copy'@'%'; 给拷贝用户加权限
mysql> show master status\G
*************************** 1. row ***************************
File: master-log.000023
Position: 390
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 69fe61cb-f1fd-11ed-995f-000c290ba48e:1-13
1 row in set (0.00 sec)
备用服务器:vim /etc/my.cnf修改配置文件
server_id=29
relay-log = relay-log
log-bin = mysql-log
skip-name-resolve = on
log_slave_updates = 1
auto_increment_increment=2
auto_increment_offset=2
systemctl restart mysqld
进入数据库搭建主从
changer master to master_host = '主库ip地址',
master_user = 'copy',
master_password = '密码',
master_log_file = '主库的日志文件',
master_pos = '主库的position'
start slave; 开启slave
show slave status\G 查看slave
Slave_IO_State: Waiting for master to send event
Master_Host: 主库服务器IP地址
Master_User: copy 拷贝用户名称
Master_Port: 3306 端口号
Connect_Retry: 60
Master_Log_File: mysql-bin.000024
Read_Master_Log_Pos: 155
Relay_Log_File: relay-log.000016
Relay_Log_Pos: 369
Relay_Master_Log_File: mysql-bin.000024
Slave_IO_Running: Yes 判断是否成功
Slave_SQL_Running: Yes 判断是否成功
在主库创建库和表验证主从是否搭建完成。
3.keepalived搭建主服务和备用服务
主机修改keepqlived配置
vim /etc/keepalived/keepalived.conf
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 mysql.sh {
script "/root/mysql.sh"
interval 1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
主服务器的虚拟ip地址
}
track_script {
mysql.sh
}
vim /root/mysql.sh 设计shell脚本
#!/bin/bash
/usr/bin/mysql -uroot -pNebula@123 -e "show status" &>/dev/null
if [ $? -ne 0 ] ;then
service keepalived stop
fi
chmod +x /root/mysql.sh 增加执行权限
systemctl restart keepalived
ip a 查看虚拟ip是否存在
从机也照上修改配置
将state和priority(权重)修改
state BACKUP
interface ens33
virtual_router_id 51
priority 80
advert_int 1
验证:
当主服务器出现虚拟ip时,关闭mysqld查看虚拟ip是否飘移到备用机上,通过虚拟ip进入mysql库查看数据是否丢失。