十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
博客分享的第一篇技术文章; 项目主要搭建:主主数据库高可用集群搭建。 数据库互为主备,应用技术:MM+keepalived 使用的是虚拟机搭建的实验向大家展示: 数据库1:192.168.4.7 数据库2:192.168.4.77 VIP:192.168.4.68 web1:192.168.4.69 web2:192.168.4.70 一、安装MySQL,部署主主同步结构。 直接yum安装 配置主主同步: 由于主数据库192.168.4.7里面存放着数据,所以需要先导出数据,方法很多,我们采取mysqldump: #mysqldump -uroot -p123456 --all-databases > /opt/all.sql 然后需要将数据拷贝到数据库192.168.4.77。 数据库2: 1、修改配置文件: 数据库192.168.4.7 [mysqld] server_id=7 #两台主机不能重复 log-bin=master7 #开启binlog功能 log-bin-index=master7.index datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock binlog_format="mixed" 数据库192.168.4.77 [mysqld] #vim /etc/my.cnf [mysqld] log-bin=master77 server_id=77 binlog_format="mixed" log_slave_updates datadir=/var/lib/ mysqlsocket=/var/lib/mysql/mysql.sock :wq 依次启动两台数据库:systemctl start mariadb 2、导入数据库: 将数据库192.168.4.7备份出来的数据库导入到数据库192.168.4.77,以此保持两端数据一致 mysql -uroot -p123456 < all.sql 3、配置用户授权并查看master信息: 数据库192.168.4.7 给用户授权:允许192.168.4.77的数据库用户slave拥有replication slave权限: mysql>grant replication slave on *.* to slave@"192.168.4.77" identified by "123456"; mysql>show master status; //查看状态; 数据库192.168.4.77 给用户授权:允许192.168.4.7的数据库用户slave拥有replication slave权限: mysql>grant replication slave on *.* to slave@"192.168.4.7" identified by "123456"; mysql>show master status; //查看状态; 4、配置相互主从,并开启slave模式: 数据库192.168.4.7 #mysql -uroot -p123456 mysql>change master to master_host="192.168.4.77",master_user="slave",master_password="12 3456",master_log_file="master77.000001",master_log_pos=357; mysql>start slave; //启动slave mysql>show slave status\G; //查看slave状态 数据库192.168.4.77 mysql>change master to master_host="192.168.4.7",master_user="slave",master_password="123 456",master_log_file="master7.000001",master_log_pos=357; mysql>start slave; mysql>show slave status\G; //查看slave状态 状态都为yes是正常,否则主主同步异常,需要进一步排查 Slave_IO_Running: Yes Slave_SQL_Running: Yes 主主同步配置完成后可以进行一些建库,建表的测试测试,看看两边的数据是否一致 二、安装keepalived并设置监控 keepalived是安装在两台MySQL服务器上的 首先安装keepalived过程不解释就正常解压安装就好 1、修改配置文件/etc/keepalived/keepalived.conf ! Configuration File for keepalived 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_script check_mysql { script "/opt/mysql.sh" //监控脚本存放位置(最后有参考脚本,也可以自己写) interval 2 //(检测脚本执行的间隔) weight 2 } vrrp_instance VI_1 { state MASTER //备份服务器上将MASTER改为 BACKUP interface eth0 virtual_router_id 51 //主、备机的virtual_router_id必须相同 priority 100 //主、备机取不同的优先级,主机值较大,备份机值较小,备份服 务器设置为99 advert_int 1 authentication { auth_type PASS auth_pass 1111 //主、备机一样 } track_script { check_mysql //检测脚本 } virtual_ipaddress { 192.168.4.68 //VIP(虚拟IP,对外提供服务的IP) } } 数据库192.168.4.77配置文件: vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived 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_script check_mysql { script "/opt/mysql.sh" interval 2 weight 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { check_mysql } virtual_ipaddress { 192.168.4.68 } } ****************************************************************************** 监控脚本的作用是:实现keepalived主备的切换 附:监控脚本 vim /opt/ mysql.sh #!/bin/bash a=`ps -C mysqld --no-header | wc -l` if [ $a -eq 0 ];then systemctl start mariadb sleep 3 b=`ps -C mysqld --no-header | wc -l` if [ $b -eq 0 ];then killall keepalived fi fi