失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MySQL——Keepalived+Mysql高可用架构实战

MySQL——Keepalived+Mysql高可用架构实战

时间:2023-07-25 08:19:18

相关推荐

MySQL——Keepalived+Mysql高可用架构实战

摘要

在生产环境中mysql的高可用的对于整个项目而言有着至关重要的作用。因此需要将mysql设计成为高可用的架构。本博文将详细介绍的mysql+keepalived构建的mysql互为主从的架构实战。

一、环境准备

要实现互为主从,就必须 mster1-->master2设置主从同步 同时 master2--->master1 也设置主从同步。

二、Mysql主主同步环境部署

2.1 master-mysql 配置

vi /etc/f

vi /etc/f[mysqld]#全局唯一,每台都不能一样server-id = 1#log-bin表示开启二进制日志记录,mysql-bin表示日志文件的命名格式,会生成mysql-bin.0001 等等log-bin = mysql-bin#指定中继日志格式(拉取主mysql日志后,在从库上生成的日志)relay-log = mysql-relay-bin#指定那些库或则表不进行同步,mysql是库名,.%表示下面所有的表,mysql.user 表示不同不mysql库下的user表replicate-wild-ignore-table=mysql.%replicate-wild-ignore-table=test.%replicate-wild-ignore-table=information_schema.%#replicate-wild-do-table=boke.%#表示同步那个库#注意:不要在主库上使用binlog-do-db 或binlog-ignore-db选项#也不要在从库上使用replicate-do-db 或replicate-ignore-db 选项,因为这有可能产生跨库更新失败的问题.推荐从库上使用replicate_wild_do_table 和replicate_wild_ignore_table 这两个选项来解决复制过滤问题datadir=/data/mysqlsocket=/data/mysql/mysql.sockuser=mysqlsymbolic-links=0log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pidcharacter-set-server=utf8[mysql]socket=/data/mysql/mysql.sockdefault-character-set=utf8[client]socket=/data/mysql/mysql.sockdefault-character-set=utf8user=rootpassword=root#若是不写上这个字段,在本机用命令进入mysql会报错,提示默认路径/var/lib/mysql/mysql.sock找不到

2.2 slave-mysql配置

vi /etc/f

vi /etc/f[mysqld]server-id = 2log-bin = mysql-binrelay-log = mysql-relay-binreplicate-wild-ignore-table=mysql.%replicate-wild-ignore-table=test.%replicate-wild-ignore-table=information_schema.%datadir=/data/mysqlsocket=/data/mysql/mysql.sockuser=mysqlsymbolic-links=0log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pidcharacter-set-server=utf8[mysql]socket=/data/mysql/mysql.sockdefault-character-set=utf8[client]socket=/data/mysql/mysql.sockdefault-character-set=utf8user=rootpassword=root

2.3 测试Mysql主主同步环境

#mysql5.7.7以后的初始化方法mysqld --initialize --user=mysql --datadir=/data/mysql#mysql5.7.7以前的初始化方法mysql_install_db --user=mysql --datadir=/data/mysql#分别启动主从数据库#在centos7里面,必须先关闭selinux,否在无法启动mysqldsystemctl start mysqld# 分别为主从mysql做安全加固#查到上一步,首次启动mysql,系统自动生成的密码(cat /var/log/mysqld.log |grep pass)mysql_secure_installation#使用该命令更改随机root密码(修改为NCYD-tianyu@0791)手动同步数据(假如现在的环境,主上已经有数据了,从是新的)

1:在主上数据库中创建用于复制的用户,并授权mysql> GRANT REPLICATION SLAVE ON *.* to 'tongbu'@'192.168.1.43' identified by '123456789';2:在主mysql上先锁表(使其所有表变成只读状态)mysql> flush tables with read lock;#不要退出终端,否在这个锁就失效了3:再开启另一个命令行终端,使用myqldump等工具将数据导出(或则直接打包存储mysql数据的目录,并发送到从机上)4:将导出数据复制到从机上,并创建新库并导入数据互相置从,互相置主(以达到双主模式)

mysqlMaster上将mysqlSlave设置为自己的主角色服务器

mysql> show master status;#查看mysqlSlave的状态(记录File名字,和Position)change master tomaster_host = '192.168.25.140',master_user = 'root',master_password = 'root',master_log_file = 'mysql-bin.000002',master_log_pos = 1006;mysql> start slave;#启动slave端的复制进程(某些版本是:slave start; )mysql> show slave status\G #查看slaves端的I/O进程,与SQL进程

在从上将mysqlMaster设置为自己的主角色服务器

mysql> show master status;#查看mysqlMaster的状态(记录File名字,和Position)change master tomaster_host = '192.168.25.128',master_user = 'root',master_password = 'root',master_log_file = 'mysql-bin.000002',master_log_pos = 1006;mysql> start slave;#启动slave端的复制进程mysql> show slave status\G #查看slaves端的I/O进程,与SQL进程

1:第一验证在myssqlMaster上创建库,mysqlSlave上是否存在。

2:第二验证在mysqlSlave上创建库,mysqlMaster上是否存在。

三、Keepalived+Mysql高可用环境

3.1 配置mastekeepalive节点

### 配置主节点 ###找到140注解keepalived的配置文件keepalived.confglobal_defs {router_id 192.168.25.140script_user rootenable_script_security}vrrp_script chk_nginx {script "/etc/keepalived/check_mysql.sh"interval 2weight -20}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 140mcast_src_ip 192.168.25.140priority 100nopreemptadvert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_nginx}virtual_ipaddress {192.168.25.150}}

3.2 配置slavekeepalive节点

### 配置从节点 ###找到128注解keepalived的配置文件keepalived.confglobal_defs {router_id 192.168.25.128script_user rootenable_script_security}vrrp_script chk_nginx {script "/etc/keepalived/check_mysql.sh"interval 2weight -20}vrrp_instance VI_1 {state BACKUPinterface eth2virtual_router_id 128priority 90mcast_src_ip 192.168.25.128advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_nginx}virtual_ipaddress {192.168.25.150}}

3.3 在master和salve中配置check_mysql.sh

mysql5.7

#!/bin/bashcounter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)if [ "${counter}" -eq 0 ]; then/etc/init.d/keepalived stopfi

mysql5.8

#!/bin/bash#slave_is=( $(mysql -uroot -pNCYD-tianyu@0791 -e "show slave status\G" | grep "Slave_.*_Running" | awk '{print $2}') )在新版本的myql中,直接将密码写在命令行,会进行安全提示,解决办法是将其写在mysql的配置文件里的 [client] 字段里,写法见上面mysql的配置文件slave_is=( $(mysql -e "show slave status\G" | grep "Slave_.*_Running" | awk '{print $2}') )if [ "${slave_is[0]}" = "Yes" -a "$slave_is[1]" = "Yes"]thenexit 0elseexit 1fi

3.4 赋予权限和执行keepalive

# 赋予权限chmod +x /etc/keepalived/mysql_check.sh# 启动keeplivedsudo service keepalived start# 查看keeplivedsudo service keepalived status# 停止keeplivedsudo service keepalived stop

四、测试mysql+keepalived高可用架构

1 连接使用主192.168.25.150:3306 是否跳转连接master-mysql的192.168.25.140:3306

2 关闭主服务器

3.连接使用主192.168.25.150:3306 是否跳转连接slave-mysql的192.168.25.128:3306

博文参考

如果觉得《MySQL——Keepalived+Mysql高可用架构实战》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。