linux MySQL 5.7+keepalived 主备服务器自主切换
一、环境准备
1、关闭防火墙与selinux
systemctl stop firewalld
setenforce 0
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
二、mysql5.7.20安装
#MySQL5.6与MySQL5.7的区别在于初始化的时候,其他安装步骤一致
1、创建目录
mkdir -p /data/mysql/{data,logs,tmp}
touch /data/mysql/{mysql.pid,mysql.sock}
2、创建用户
useradd mysql
3、安装依赖包
yum install perl perl-devel perl-Data-Dumper libaio-devel -y
4、下载包
cd /usr/local/src
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
tar zxf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
cd /usr/local
mv mysql-5.7.20-linux-glibc2.12-x86_64 mysql
chown -R mysql:mysql /usr/local/mysql /data/mysql/
三、配置文件
========================================================
[client]
port = 16205
default-character-set=utf8mb4
socket = /data/mysql/mysql.sock
[mysqld]
user = mysql
port = 16205
server-id = 111
character_set_server=utf8mb4
socket = /data/mysql/mysql.sock
datadir = /data/mysql/data/
pid-file = /data/mysql/mysql.pid
auto-increment-increment = 2 #主主参数,主从可注释(必填)
auto-increment-offset = 1 #主主参数,主从可注释(必填)主:1;从:2
#bind-address = 10.26.25.28
#skip-name-resolve=1
#event_scheduler = on
federated
skip-ssl
secure-file-priv = /home/mysql
disable-partition-engine-check=1
explicit_defaults_for_timestamp=false
max_allowed_packet = 32M
innodb_file_per_table = 1
back_log = 300
max_connections = 8000
max_connect_errors = 1000
table_open_cache = 4096
open_files_limit = 10240
max_allowed_packet = 512M
wait_timeout = 300
interactive_timeout=300
sort_buffer_size = 16M
join_buffer_size = 16M
query_cache_size = 128M
transaction_isolation = REPEATABLE-READ
thread_stack = 512K
innodb_buffer_pool_size = 4G
innodb_data_file_path = ibdata1:512M:autoextend
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 16
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_lock_wait_timeout = 120
binlog-ignore-db=information_schema,mysql,performance_schema #主主参数,主从可注释
#replicate-ignore-db=information_schema,mysql,performance_schema
binlog_format=row
expire_logs_days=10
binlog_cache_size = 7M
log-error = /data/mysql/logs/error.log
log-bin = /data/mysql/logs/mysql_bin.log
log-slave-updates=true #主主参数,主从可注释
#slow log
slow-query-log = 1
long_query_time = 2
slow-query-log-file = /data/mysql/logs/slowquery.log
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[mysqld_safe]
pid-file=/data/mysql/mysql.pid
================================================================================
四、初始化
1.MySQL5.7初始化:#注意: 要先初始化,再启动
初始化: bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql --initialize
查看随机密码: cat /data/mysql/logs/error.log | grep password(查看后保存密码)
2.启动mysql
bin/mysqld_safe --defaults-file=/etc/my.cnf &
3.修改密码: /usr/local/mysql/bin/mysqladmin -uroot -p password #输入随机密码,再输入两次新密码即可
# 初始化后数据目录包含: mysql、information_schema、sys、performache_schema四个数据库
登录数据库:
/usr/local/mysql/bin/mysql -uroot -p
退出数据库:exit;
五、主从配置
# Master
1、my.cnf
server-id=1111
log-bin=(产生binglog日志。)
2、创建用于主从同步的账号
repl(主从同步用户名)192.168.28.135(从库所在服务器的IP)
mysql> grant replication slave on *.* to 'repl'@'192.168.28.135' identified by 'a123456';(a123456表示密码)
Query OK, 0 rows affected, 1 warning (0.06 sec)
mysql> flush privileges;(刷新权限)
Query OK, 0 rows affected (0.02 sec)
3、查看主库当前bin_log文件和Position
mysql> show master status;
+---------------+----------+--------------+--------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+--------------------------+-------------------+
| binlog.000008 | 25616 | | information_schema,mysql | |
+---------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)
#以下是从库操作
登录数据库
/usr/local/mysql/bin/mysql -uroot -p
4、与主库建立连接
mysql> stop slave;(停止同步)
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to master_host='192.168.28.136',master_user='repl',master_password='a123456',master_port=16205,master_log_file='mysql_bin.000007',master_log_pos=25616;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
master_host='192.168.28.136’, (主库所在IP地址)
master_user='repl', (主从同步用户名)
master_password='a.123456', (主从同步密码)
master_port=16205, (主库对外访问端口号)
master_log_file='mysql_bin.000007',(主库配置文件)
master_log_pos=25616; (主库配置文件)
5、start slave;(开启从库同步主库)
6、show slave status;(查看主从同步状态)show slave status\G
。。。。。。
Slave_IO_Running: Yes (IO线程是否正常)
Slave_SQL_Running: Yes (sql线程是否正常)
#这两个参数都为Yes的时候表示主从配置完成
==============================================================================
六、双主配置(就是把主从反过在配一遍)
登录数据库
/usr/local/mysql/bin/mysql -uroot -p
从库:
2、创建用于主从同步的账号
repl(主从同步用户名)192.168.28.135(从库所在服务器的IP)
mysql> grant replication slave on *.* to 'repl1'@'192.168.28.135' identified by 'a123456';(a123456表示密码)
Query OK, 0 rows affected, 1 warning (0.06 sec)
mysql> flush privileges;(刷新权限)
Query OK, 0 rows affected (0.02 sec)
3、查看主库当前bin_log文件和Position
mysql> show master status;
+---------------+----------+--------------+--------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+--------------------------+-------------------+
| binlog.000008 | 25616 | | information_schema,mysql | |
+---------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)
#以下是从库操作
4、与主库建立连接
mysql> stop slave;(停止同步)
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to master_host='192.168.28.135',master_user='repl1',master_password='a123456',master_port=16205,master_log_file='mysql_bin.000008',master_log_pos=25616;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
master_host='172.16.1.20’, (主库所在IP地址)
master_user='repl', (主从同步用户名)
master_password='a123456', (主从同步密码)
master_port=16205, (主库对外访问端口号)
master_log_file='mysql_bin.000004',(主库配置文件)
master_log_pos=25618; (主库配置文件)
5、start slave;(开启从库同步主库)
6、show slave status;(查看主从同步状态)show slave status\G
。。。。。。
Slave_IO_Running: Yes (IO线程是否正常)
Slave_SQL_Running: Yes (sql线程是否正常)
#这两个参数都为Yes的时候表示主从配置完成(两台数据库服务器都为YES方为通过,一定要验证!!!!!!!!!!)
。。。。。。
===========================================================================
如遇访问权限问题:以下可以解决
mysql -uroot -p root
mysql->use mysql
mysql->update user set host = '%' where user ='root';
mysql->grant all privileges on *.* to 'root'@'%' with grant option;
mysql->flush privileges;
mysql->exit;
sudo service mysql restart;
**********************************************************************************************************************************
keepalived部署配置(安装在mysql双主服务器当中)
一、安装keepalived
下载keepalived
官网: https://keepalived.org/download.html
上传并解压keepalived
/home
cd /home/
tar -zxvf keepalived-2.0.18.tar.gz -C /usr/local/src/
进入目录/usr/local/src/keepalived-2.0.18
cd /usr/local/src/keepalived-2.0.18/
检查安装环境
./configure --prefix=/usr/local/keepalived
第一次检查:
configure: error:
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files. !!!
安装openssl openssl-devel解决问题
yum -y install openssl openssl-devel
第二次检查
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
安装libnl libnl-devel解决问题
yum -y install libnl libnl-devel
其他问题
configure: error: libnfnetlink headers missing
安装libnfnetlink-devel解决问题
yum -y install libnfnetlink-devel
编译并安装
make && make install
将keepalived添加到系统服务中
拷贝执行文件
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
将init.d文件拷贝到etc下,加入开机启动项
cp /usr/local/src/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
将keepalived文件拷贝到etc下
cp /usr/local/src/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
创建keepalived文件夹
mkdir -p /etc/keepalived
将keepalived配置文件拷贝到etc下
cp /usr/local/src/keepalived-2.0.18/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
添加keepalived到开机启动(看个人可随意)
chkconfig --add keepalived
添加可执行权限
chmod +x /etc/init.d/keepalived
二、部署keepalived双击自主切换(一下配置文件和脚本,两台机器都要重新布)
备份keepalived配置文件
cp keepalived.conf keepalived.conf.back
重新编辑配置文件
vim keepalived.conf
配置文件
===============================================================
! COnfiguration File for keepalived
global_defs {
router_id MASTER-HA #主机标识
#router_id BACKUP #备机标识
script_user root
enable_script_security
}
vrrp_script chk_mysql_port {
script "/etc/keepalived/chk_mysql.sh" #脚本地址和名字,此处调用改脚本
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER #主机MASTER、备机BACKUP
interface eth0 #本机的网卡
mcast_src_ip 192.168.28.136 #网卡IP
virtual_router_id 51
priority 101 #主机101,备机小于101便可
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.28.188 #新的IP地址,需要在同机网段内
}
track_script {
chk_mysql_port
}
===============================================================================================
编写脚本
vim chk_mysql.sh
========================================================
#!/bin/bash
#This scripts is check for Mysql Slave status
counter=$(netstat -na|grep "LISTEN"|grep "16205"|wc -l)
if [ "${counter}" -eq 0 ]; then
/etc/init.d/keepalived keepalived stop
killall keepalived
fi
ping 192.168.28.136 -w1 -c1 &>/dev/null
if [ $? -ne 0 ]
then
/etc/init.d/keepalived keepalived stop
killall keepalived
fi
========================================================
添加可执行权限
chmod +x /etc/init.d/keepalived
启动keepalived
/etc/init.d/keepalived start
查看是否启动成功
ps -ef | grep keepalived
启动成功之后会生成一个新的服务器IP地址,可通过新IP直接连接数据库
查看ip地址 ip addr
连接数据库地址
至此,数据库连接成功。
可以自由关闭其中一台数据库服务,keepalived会自动切换到另外一台数据库服务器当中。
linux MySQL 5.7+keepalived 主备服务器自主切换的更多相关文章
- Nginx+Keepalived主备切换(包含nginx服务停止)
原文地址:http://blog.sina.com.cn/s/blog_79ac6aa80101bmed.html Nginx+Keepalived主备切换(包含nginx服务停止) 环境: VM中4 ...
- keepalived主备节点都配置vip,vip切换异常案例分析
原文地址:http://blog.51cto.com/13599730/2161622 参考地址:https://blog.csdn.net/qq_14940627/article/details/7 ...
- haproxy+keepalived主备与双主模式配置
Haproxy+Keepalived主备模式 主备节点设置 主备节点上各安装配置haproxy,配置内容且要相同 global log 127.0.0.1 local2 chroot /var/lib ...
- Keepalived 主备配置
keepalived主备或多主多备,配置都是一样配置方法,只是搭建多少的问题. 1.keepalived安装 参考:https://www.cnblogs.com/zwcry/p/9542867.ht ...
- 24 | MySQL是怎么保证主备一致的?
在前面的文章中,我不止一次地和你提到了binlog,大家知道binlog可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了binlog就可以跟主库保持一致了呢?今天我就正式地 ...
- MySQL高可用(一)主备同步:MySQL是如何保证主备一致的
主备同步,也叫主从复制,是MySQL提供的一种高可用的解决方案,保证主备数据一致性的解决方案. 在生产环境中,会有很多不可控因素,例如数据库服务挂了.为了保证应用的高可用,数据库也必须要是高可用的. ...
- lvs主备可以自由切换,vip落在主上的时候,端口无法telnet,业务连接不了
lvs主备可以自由切换,vip落在主上的时候,端口无法telnet,业务连接不了 解决:将主上的keepalived重启,故障解除 原因:不可知 lvs常见故障原因: real server上的脚步没 ...
- 好记性不如烂笔头-linux学习笔记6keepalived实现主备操作
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工 ...
- KeepAlived主备模型高可用LVS
部署前准备: 1.至少4台主机:两个Director(HA1,HA2),两个Real Server(RS1,RS2) 2.Director之间时间必须同步,且关闭各主机的防火墙和Selinux 3.出 ...
随机推荐
- Pytorch的网络结构可视化(tensorboardX)(详细)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/xiaoxifei/article/det ...
- Jmeter xpath处理器
- Tyvj-1338 QQ农场
P1338 QQ农场 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Sandytea前段时间沉迷于QQ农场中……一天夜里,他梦见来到好友X的农场上…… 描述 ...
- 阿里云ECS服务器活动99元一年,最高可买三年
这几天阿里云 99一年.279三年的服务器活动如火如荼,和之前腾讯三年的服务器非常类似,非常低的价格换取非常高的价值,当然,通常情况下便宜没好货的,想要玩一下的老铁可以进阿里云去看看,阿里云270三年 ...
- mac上的mysql管理工具sequel pro
https://blog.csdn.net/wan_zaiyunduan/article/details/54909389 以前用过Plsql.Navicat.Workbench,现在换到mac上,用 ...
- BZOJ 4034"树上操作"(DFS序+线段树)
传送门 •题意 有一棵点数为 N 的树,以点 1 为根,且树点有边权. 然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的 ...
- Python--day46--mysql触发器
触发器:当对某张表做:增删改操作时,可以使用触发器自定义关联行为 1,为什么需要创建mysql触发器? 比如说我往tb1表里面插入一条数据的时候,同时需要往日志表tb2中插入这条数据,这时候就需要创造 ...
- Mockito 使用
1. 算术测试类 package com.smart.test.mockito; public interface Calculator { public int add(int a, int b); ...
- P1109 桃花岛
题目描述 不是任何人都可以进入桃花岛的,黄药师最讨厌象郭靖一样呆头呆脑的人.所以,他在桃花岛的唯一入口处修了一条小路,这条小路全部用正方形瓷砖铺设而成.有的瓷砖可以踩,我们认为是安全的,而有的瓷砖一踩 ...
- Tomcat最佳线程数
什么是最佳线程数? 为满足更多用户访问需求,可以调整Tomcat线程数,但是不能太大,否则导致线程切换开销,随着用户递增(线程数也随之调整),系统QPS逐渐增加,当用户量达到某个值,QPS并不会增加, ...