当前位置:   article > 正文

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

mysql keepalived

摘要

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

一、环境准备

操作系统centos7.0
数据库mysql5.7
master 安装mysql 和keeplived192.168.128
slave  安装mysql 和keeplived192.168.140
docker 安装docker 最新版本
虚拟IP地址192.168.150

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

二、Mysql主主同步环境部署

2.1 master-mysql 配置

vi /etc/my.cnf

  1. vi /etc/my.cnf
  2. [mysqld]
  3. #全局唯一,每台都不能一样
  4. server-id = 1
  5. #log-bin表示开启二进制日志记录,mysql-bin表示日志文件的命名格式,会生成mysql-bin.0001 等等
  6. log-bin = mysql-bin
  7. #指定中继日志格式(拉取主mysql日志后,在从库上生成的日志)
  8. relay-log = mysql-relay-bin
  9. #指定那些库或则表不进行同步,mysql是库名,.%表示下面所有的表,mysql.user 表示不同不mysql库下的user表
  10. replicate-wild-ignore-table=mysql.%
  11. replicate-wild-ignore-table=test.%
  12. replicate-wild-ignore-table=information_schema.%
  13. #replicate-wild-do-table=boke.% #表示同步那个库
  14. #注意:不要在主库上使用binlog-do-db 或 binlog-ignore-db选项
  15. #也不要在从库上使用 replicate-do-db 或 replicate-ignore-db 选项,因为这有可能产生跨库更新失败的问题.推荐从库上使用 replicate_wild_do_table 和 replicate_wild_ignore_table 这两个选项来解决复制过滤问题
  16. datadir=/data/mysql
  17. socket=/data/mysql/mysql.sock
  18. user=mysql
  19. symbolic-links=0
  20. log-error=/var/log/mysqld.log
  21. pid-file=/var/run/mysqld/mysqld.pid
  22. character-set-server=utf8
  23. [mysql]
  24. socket=/data/mysql/mysql.sock
  25. default-character-set=utf8
  26. [client]
  27. socket=/data/mysql/mysql.sock
  28. default-character-set=utf8
  29. user=root
  30. password=root
  31. #若是不写上这个字段,在本机用命令进入mysql会报错,提示默认路径/var/lib/mysql/mysql.sock找不到

2.2 slave-mysql配置

vi /etc/my.cnf

  1. vi /etc/my.cnf
  2. [mysqld]
  3. server-id = 2
  4. log-bin = mysql-bin
  5. relay-log = mysql-relay-bin
  6. replicate-wild-ignore-table=mysql.%
  7. replicate-wild-ignore-table=test.%
  8. replicate-wild-ignore-table=information_schema.%
  9. datadir=/data/mysql
  10. socket=/data/mysql/mysql.sock
  11. user=mysql
  12. symbolic-links=0
  13. log-error=/var/log/mysqld.log
  14. pid-file=/var/run/mysqld/mysqld.pid
  15. character-set-server=utf8
  16. [mysql]
  17. socket=/data/mysql/mysql.sock
  18. default-character-set=utf8
  19. [client]
  20. socket=/data/mysql/mysql.sock
  21. default-character-set=utf8
  22. user=root
  23. password=root

2.3 测试Mysql主主同步环境

  1. #mysql5.7.7以后的初始化方法
  2. mysqld --initialize --user=mysql --datadir=/data/mysql
  3. #mysql5.7.7以前的初始化方法
  4. mysql_install_db --user=mysql --datadir=/data/mysql
  5. #分别启动主从数据库
  6. #在centos7里面,必须先关闭selinux,否在无法启动mysqld
  7. systemctl start mysqld
  8. # 分别为主从mysql做安全加固
  9. #查到上一步,首次启动mysql,系统自动生成的密码( cat /var/log/mysqld.log |grep pass )
  10. mysql_secure_installation #使用该命令更改随机root密码(修改为 NCYD-tianyu@0791 )
  11. 手动同步数据(假如现在的环境,主上已经有数据了,从是新的)
  1. 1:在主上数据库中创建用于复制的用户,并授权
  2. mysql> GRANT REPLICATION SLAVE ON *.* to 'tongbu'@'192.168.1.43' identified by '123456789';
  3. 2:在主mysql上先锁表(使其所有表变成只读状态)
  4. mysql> flush tables with read lock; #不要退出终端,否在这个锁就失效了
  5. 3:再开启另一个命令行终端,使用myqldump等工具将数据导出(或则直接打包存储mysql数据的目录,并发送到从机上)
  6. 4:将导出数据复制到从机上,并创建新库并导入数据
  7. 互相置从,互相置主(以达到双主模式)

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

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

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

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

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

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

三、Keepalived+Mysql高可用环境

3.1 配置maste keepalive节点

  1. ### 配置主节点 ###
  2. 找到140注解keepalived的配置文件keepalived.conf
  3. global_defs {
  4. router_id 192.168.25.140
  5. script_user root
  6. enable_script_security
  7. }
  8. vrrp_script chk_nginx {
  9. script "/etc/keepalived/check_mysql.sh"
  10. interval 2
  11. weight -20
  12. }
  13. vrrp_instance VI_1 {
  14. state MASTER
  15. interface eth0
  16. virtual_router_id 140
  17. mcast_src_ip 192.168.25.140
  18. priority 100
  19. nopreempt
  20. advert_int 1
  21. authentication {
  22. auth_type PASS
  23. auth_pass 1111
  24. }
  25. track_script {
  26. chk_nginx
  27. }
  28. virtual_ipaddress {
  29. 192.168.25.150
  30. }
  31. }

3.2 配置slave keepalive节点

  1. ### 配置从节点 ###
  2. 找到128注解keepalived的配置文件keepalived.conf
  3. global_defs {
  4. router_id 192.168.25.128
  5. script_user root
  6. enable_script_security
  7. }
  8. vrrp_script chk_nginx {
  9. script "/etc/keepalived/check_mysql.sh"
  10. interval 2
  11. weight -20
  12. }
  13. vrrp_instance VI_1 {
  14. state BACKUP
  15. interface eth2
  16. virtual_router_id 140
  17. priority 90
  18. mcast_src_ip 192.168.25.128
  19. advert_int 1
  20. authentication {
  21. auth_type PASS
  22. auth_pass 1111
  23. }
  24. track_script {
  25. chk_nginx
  26. }
  27. virtual_ipaddress {
  28. 192.168.25.150
  29. }
  30. }

3.3 在master和salve中配置check_mysql.sh

mysql5.7

  1. #!/bin/bash
  2. counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
  3. if [ "${counter}" -eq 0 ]; then
  4. /etc/init.d/keepalived stop
  5. fi

 mysql5.8

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

3.4 赋予权限和执行keepalive

  1. # 赋予权限
  2. chmod +x /etc/keepalived/mysql_check.sh
  3. # 启动keeplived
  4. sudo service keepalived start
  5. # 查看keeplived
  6. sudo service keepalived status
  7. # 停止keeplived
  8. sudo 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

博文参考

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/675491
推荐阅读
相关标签
  

闽ICP备14008679号