赞
踩
无论在学习还是工作的过程中,随着时间的推移,数据量会越来越大,对数据库的要求也越来越高.这个时候,对数据库的相关部署就显得尤为重要,本文简单介绍了对Mysql数据库的主从复制和高可用部署,希望对大家有所帮助.
1.Mysql数据库的主从复制:基于binlog日志,当主库更新操作后,从库会自动同步操作,实现数据的统一,提高了数据库的安全性
2.高可用:基于keepalived实现高可用,避免单点故障
(1)环境准备 两台centos7版本虚拟机(master backup) 关闭防火墙 关闭selinux安全服务 配置国内的base仓库和epel仓库 注意:主库和从库的数据应当保持一致(密码 用户名..)
(2)下载Mysql数据库仓库文件软件包并安装指定版本
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
#下载仓库文件软件包
rpm -ivh mysql80-community-release-el7-7.noarch.rpm
#安装软件包
yum -y install yum-utils
#安装yum管理工具
yum-config-manager --enable mysql57-community
#启用mysql5.7版本
yum-config-manager --disable mysql80-community
#禁用mysql8.0版本
yum -y install mysql-server mysql
#安装
systemctl start mysqld
#启动数据库
(3)数据库初始化
cat /var/log/mysqld.log |grep password
#获取原始密码
mysqladmin -uroot -p'原始密码' password '新密码'
#修改root用户原始密码 如果需要设置弱密码策略,在/etc/my.cnf配置文件中写入validate_password=off
(1)在配置文件/etc/my.cnf中写入
- log-bin
- server-id=1 #服务器的id不能相同
- gtid_mode = ON #开启GTID功能
- enforce_gtid_consistency=1
(2)进入数据库创应的授权用户供从服务器使用
mysql -uroot -p密码
#登录到数据库
grant all on *.* to haha@"%" identified by '密码'
#任何人可以通过haha用户登录到数据库并享有所有库,所有表的权限
flush privileges;
#刷新授权表 也可以最后重启mysqld服务systemctl restart mysqld
#重启服务 因为修改了配置文件
(1)配置文件/etc/my.cnf中写入并重启mysqld服务
- log-bin
- server-id=2
- gtid_mode = ON
- enforce_gtid_consistency=1
- master-info-repository=TABLE #将master.info和relay.info保存在表中
- relay-log-info-repository=TABLE
- relay_log_recovery = on #开启relay-log日志
(2)进入数据库,并关联到主数据库
mysql命令行输入edit写入
change master to
master_host='master的IP地址',
master_user='授权用户',
master_password='授权密码',
master_auto_position=1;保存退出并以;结束
(3)启动角色并查看状态,
start slave;启动角色
show slave status\G; 查看状态
(4)出现下图两个yes表示主从状态正常
(5)交换master和slave身份再执行以上操作(注意:两台服务器应创建一样的授权用户)
(1)安装keepalived
yum -y install keepalived
(1)修改/etc/keepalived/keepalived.conf
- ! Configuration File for keepalived
-
- global_defs {
- router_id sun1 #集群id,保持不一致
- }
- vrrp_script check_run {
- script "/etc/keepalived/keepalived_chech_mysql.sh"
- interval 5
- }
-
- vrrp_instance VI_1 {
- state MASTER #定义为master
- interface ens33
- virtual_router_id 89 #集群调度器保持一致
- priority 100 #优先级master大于backup
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 10.0.0.244/24 #定义VIP(最好是和宿主机同一网段)
- }
- track_script {
- check_run
- }
- }
(1)修改/etc/keepalived/keepalived.conf
- ! Configuration File for keepalived
-
- global_defs {
- router_id sun2
- }
- vrrp_script check_run {
- script "/etc/keepalived/keepalived_check_mysql.sh"
- interval 5
- }
-
- vrrp_instance VI_1 {
- state BACKUP #定义为backup
- nopreempt #默认不抢占
- interface ens33
- virtual_router_id 89
- priority 50 #优先级小于master
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 10.0.0.244/24 #定义VIP
- }
- track_script {
- check_run
- }
- }
master和backeup启动keepalived
(1)VIP出现在master,停掉master的keepalived后,VIP漂移到backup上
(2)停掉master的mysqld和keepalived后,用第三台服务器通过授权用户+VIP仍然可以远程登陆到数据库
当MySQL服务出现问题,而keepalived未停止,VIP不会飘移,这时无法切换master,数据库无法正常登录。
当检测到mysqld服务未正常运行时,同时关闭keepalived
编写健康监测脚本+计划任务,脚本如下:
- #!/bin/bash
- systemctl status mysqld&>/dev/null
- if [ $? = 0 ]; then #通过判断执行上条命令的返回结果,判断mysqld是否运行
- echo "数据库运行正常"
- else
- systemctl stop keepalived
- fi
计划任务如下:
- chmod a+x /root/mysql.sh #给脚本执行权限
-
- */5 * * * * bash /root/mysql.sh #每隔五分钟执行一次脚本
本文介绍了Mysql数据库基于GTID实现互为主从,并在此基础上做了数据库的高可用,编写了健康检测脚本,当master宕掉了,数据库仍然正常可以访问,很大程度上保证了服务的可用性.希望对大家有所帮助.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。