Keepalived+mysql 主从实现高可用集群配置
1、环境说明
- 操作系统:centos7
- 主服务器:172.16.122.100
- 从服务器:172.16.122.101
- keepalived中虚拟ip(VIP):172.16.122.102
2、Mysql下载安装
主、从服务器中mysql版本、配置信息 须一致。(主从服务器操作一致即可)
第一步:先安装wget
[root@localhost ~]# yum -y install wget
第二步:下载mysql源安装包
[root@localhost ~]# wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
第三步:安装mysql源
[root@localhost ~]# yum -y localinstall mysql57-community-release-el7-11.noarch.rpm
第四步:在线安装mysql
[root@localhost ~]# yum -y install mysql-community-server
第五步:启动Mysql服务
[root@localhost ~]# systemctl start mysqld
第六步:修改root本地登录密码
刚安装mysql会给root用户生成一个随机密码,使用
[root@localhost ~]# vi /var/log/mysqld.log
进行查看
这里的临时密码 eMV.R#mWe3ha
使用
[root@localhost ~]# mysql -u root -peMV.R#mWe3ha
进行登录mysql (mysql 语句都需要以分号结束)
取消密码复杂度验证
mysql> set global validate_password_policy=0; # 关闭密码复杂性策略
mysql> set global validate_password_length=1; # 设置密码复杂性要求密码最低长度为1
修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';
第七步:设置允许远程登录
Mysql默认不允许远程登录,我们需要设置下,并且防火墙开放3306端口;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xxx' WITH GRANT OPTION;
开放3306端口/直接关闭防火墙
[root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent #开放3306端口
[root@localhost ~]# service firewalld stop #关闭防火墙
第八步:配置mysql参数
[root@localhost ~]# vim /etc/my.cnf
在mysqld节点下添加
character-set-server=utf8
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
default-time_zone = ‘+8:00’
设置时区、编码集等
编辑保存后 重启mysql
[root@localhost ~]# service mysqld restart
参考地址:mysql下载
3、Mysql主从复制配置
- 主DB server和从DB server数据库的版本一致
- 主DB server和从DB server数据库数据一致[
可以把主的备份在从上还原
也可以直接将主的数据目录,拷贝到从的相应数据目录 - 主DB server开启二进制日志
主服务配置
第一步:添加mysql配置
[root@localhost ~]# vim /etc/my.cnf
添加下面配置
binlog-do-db=db1
binlog-ignore-db=mysql
#启用二进制日志
log-bin=mysql-bin
#服务器唯一ID,与从数据库不重复即可
server-id=134
说明:binlog-do-db 需要同步的数据库
binlog-ignore-db 忽略同步的数据库
保存后退出
第二步:重启mysql服务
[root@localhost ~]# service mysqld restart
第三步:建立帐户并授权slave
[root@localhost ~]# mysql -u root -pxxxx #(xxxx为root密码)
mysql>GRANT FILE ON *.* TO 'root'@'%' IDENTIFIED BY 'xxxx';
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'root'@'%' identified by 'xxxx';
刷新权限
mysql> FLUSH PRIVILEGES;
第四步:查询master的状态
mysql> show master status;
File 与Position参数需要记录下来 从数据库配置需要使用
从数据库配置
第一步:添加mysql配置
[root@localhost ~]# vim /etc/my.cnf
添加下面配置
server-id=166
说明:从数据库只需要配置server-id 即可
第二步:配置从服务器
[root@localhost ~]# mysql -u root -pxxxx #(xxxx为root密码)
mysql> change master to master_host='172.16.122.100',master_port=3306,master_user='root',master_password='Clm2184554.',master_log_file='mysql-bin.000003',master_log_pos=405;
说明:
master_port为mysql服务器端口号
master_user为执行同步操作的数据库账户
master_log_pos为405
就是主数据库中 show master status 中的position对应的值
master_log_file 为mysql-bin.000003
就是主数据库中 show master status中的file对应的值
第三步:启动从服务器复制功能
mysql>start slave;
第四步:检查从服务器复制功能状态
mysql> show slave status;
在命令中查看比较乱 可以从navicat中查看、也可以
mysql> show slave status\G;
这两个字段值均为Yes表示启动成功
第五步:测试数据同步
在主数据库 db1中建立表
从数据库会自动同步建立
参考地址:mysql主从复制
4、Keepalived 配置
第一步:keepalived软件安装(主从操作一样)
[root@localhost ~]# wget -q http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
[root@localhost ~]# tar xf keepalived-1.2.13.tar.gz
[root@localhost ~]# yum install -y gcc openssl-devel popt-devel
[root@localhost ~]# cd keepalived-1.2.13
[root@localhost keepalived-1.2.13]# ./configure && make && make install
[root@localhost keepalived]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
[root@localhost keepalived]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
[root@localhost keepalived]# mkdir /etc/keepalived
[root@localhost keepalived]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
[root@localhost keepalived]# cp /usr/local/sbin/keepalived /usr/sbin/
[root@localhost keepalived]# chkconfig --add keepalived
[root@localhost keepalived]# chkconfig --level 345 keepalived on
第二步:keepalived.conf配置
配置文件目录:/etc/keepalived
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
主服务器
global_defs {
router_id Nginx_HA_1
}
vrrp_script check_run {
script "/home/mysql/mysql_check.sh"
interval 30
}
vrrp_sync_group VG1 {
group {
VI_1
}
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 12
priority 100
advert_int 1
nopreempt
unicast_src_ip 172.16.122.100
unicast_peer {
#对象IP 发送vrrp包给备服务器
172.16.122.101
}
authentication {
auth_type PASS
auth_pass nginxha
}
virtual_ipaddress {
172.16.122.102
}
track_script {
check_run
}
}
从服务器
global_defs {
router_id Nginx_HA_1
}
vrrp_script check_run {
script "/home/mysql/mysql_check.sh"
interval 2
}
vrrp_sync_group VG1 {
group {
VI_1
}
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 12
priority 50
advert_int 1
nopreempt
#本机ip
unicast_src_ip 172.16.122.101
unicast_peer {
#对象IP 发送vrrp包给备服务器
172.16.122.100
}
authentication {
auth_type PASS
auth_pass nginxha
}
track_script {
check_run
}
virtual_ipaddress {
172.16.122.102
}
}
说明:
interface ens33 ->ens33是linux网卡名称
主服务 priority 参数必须大于 从服务
script “/home/mysql/mysql_check.sh” mysql_check.sh是检测mysql是否正常的脚本 如果不正常就关闭keepalived;
脚本内容
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
service keepalived stop
fi
注意 因为我是用Xftp新建和编辑该脚本的 需要进行授权与格式转换 不然keepalived会报错
[root@localhost ~]# sudo chmod -R 777 /home/mysql/mysql_check.sh
[root@localhost ~]# sed -i "s/\r//" /home/mysql/mysql_check.sh
第三步:启动并测试
主从都启动
[root@localhost ~]# systemctl restart keepalived
启动后可以进行状态查看
[root@localhost ~]# service keepalived status
查看vip绑定到哪台机器上
[root@localhost ~]# ip addr
可以看出vip已绑定成功(主服务器)
用navicat连接172.16.122.102查看
此时172.16.122.102 绑定的是172.16.122.100(主服务器)
下一步将主服务器mysql停止 查看vip是否漂移到从服务器中
[root@localhost ~]# service mysqld stop
然后在从服务器输入
[root@localhost ~]# ip addr
可以看到vip已经到了从服务器
然后在navicat中 刷新172.16.122.102连接的数据库
此时172.16.122.102实际连接的是172.16.122.101从服务器 表述keepalived部署成功。
参考地址:
keepalived+mysql实现高可用