翼度科技»论坛 编程开发 mysql 查看内容

Mysql+Keepalived实现双主热备方式

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短
MySQL双主复制,即互为Master-Slave(默认只使用一台MasterA负责数据写入,另一台MasterB备用),可以实现数据库服务器的热备,但是一台Master宕机后不能实现动态切换。
使用Keepalived,可以通过虚拟IP,实现双主对外的统一接口以及自动检查、失败切换机制,从而实现MySQL数据库的高可用方案。

一、Mysql安装、配置和安全启动

把mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz上传到/usr/local/src/
1、mysql安装
  1. cd /usr/local/src/
  2. tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
  3. mkdir -p /usr/local/mysql/
  4. mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/local/mysql/mysql-5.7.28
复制代码
2、创建mysql用户组和用户
  1. cd /usr/local
  2. groupadd mysql
  3. useradd -r -g mysql -s /bin/false mysql
  4. chown -R mysql:mysql mysql
复制代码
3、初始化数据
  1. cd /usr/local/mysql/mysql-5.7.28
  2. bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/mysql-5.7.28/ --datadir=/data1/mysql/data --lc_messages_dir=/usr/local/mysql/mysql-5.7.28/share --lc_messages=en_US
  3. bin/mysql_ssl_rsa_setup --datadir=/data1/mysql/data
复制代码
4、修改配置
  1. vi /etc/my.cnf
  2. basedir=/usr/local/mysql/mysql-5.7.28
  3. datadir=/data1/mysql/data
复制代码
5、配置环境变量
  1. #编辑环境变量 .bash_profile表示当前用户个人配置 只对当前用户生效
  2. vi ~/.bash_profile

  3. #将mysql的bin目录配置到环境变量中
  4. PATH=$PATH:$HOME/bin:/usr/local/mysql/mysql-5.7.28/bin
  5. export PATH

  6. #使配置修改后立即生效
  7. source ~/.bash_profile
复制代码
6、修改密码、配置远程访问和安全启动
  1. #启动前先设置免密登录
  2. vi /etc/my.cnf
  3. #添加如下配置并保存 跳过权限验证
  4. skip-grant-tables=1

  5. #安全启动
  6. cd /usr/local/mysql/mysql-5.7.28/bin
  7. ./mysqld_safe --user=mysql &

  8. #修改密码
  9. #进入mysql
  10. mysql
  11. use mysql
  12. update user set authentication_string=password("123456") where user="root";
  13. #刷新权限表
  14. flush privileges;

  15. #配置远程访问
  16. use mysql
  17. #允许所有机器访问root用户 %代表所有机器
  18. update user set host='%' where user='root';
  19. #授权所有机器的root用户拥有所有数据库的所有权限 远程访问密码root %代表所有机器
  20. grant all privileges on *.* to root@'%' identified by 'root';
  21. #刷新权限表
  22. flush privileges;

  23. #退出mysql
  24. exit

  25. #安全关闭
  26. ./mysqladmin -uroot -p shutdown

  27. #删除免密登录配置
  28. vi /etc/my.cnf
  29. #删除skip-grant-tables=1并保存

  30. #安全启动
  31. ./mysqld_safe --user=mysql &
复制代码
二、 两台Mysql配置双主

1、创建主从同步replication用户
2、授权
192.168.0.101
  1. #授权IP192.168.0.102的从数据库replication用户拥有所有数据库的同步权限 远程访问密码replication
  2. grant replication slave on *.* to 'replication'@'192.168.0.102' identified by 'replication';
  3. #刷新权限表
  4. flush privileges;
复制代码
192.168.0.102
  1. #授权IP192.168.0.101的从数据库replication用户拥有所有数据库的同步权限 远程访问密码replication
  2. grant replication slave on *.* to 'replication'@'192.168.0.101' identified by 'replication';
  3. #刷新权限表
  4. flush privileges;
复制代码
3、添加配置文件
  1. [mysqld]
  2. basedir=/usr/local/mysql/mysql-5.7.28
  3. datadir=/data1/mysql/data

  4. server-id = 101

  5. skip-external-locking

  6. log_bin = mysql-binlog
  7. binlog_do_db = sample
  8. binlog-ignore-db = mysql
  9. binlog-ignore-db = performance_schema
  10. binlog-ignore-db = information_schema

  11. binlog_group_commit_sync_delay = 100000 # 单位微妙
  12. binlog_group_commit_sync_no_delay_count = 20 # 单位每组事物数量

  13. #设置复制类型
  14. slave-parallel-type=LOGICAL_CLOCK
  15. #设置并行数量
  16. slave-parallel-workers=4

  17. #主主需要加的部分
  18. replicate-do-db = sample

  19. log-slave-updates=true
  20. #sync_binlog=1
  21. auto_increment_offset=1
  22. auto_increment_increment=2

  23. innodb_buffer_pool_size = 12G
  24. innodb_buffer_pool_instances = 8
  25. innodb_buffer_pool_chunk_size = 128M
  26. innodb_log_file_size = 256M
  27. innodb_log_buffer_size = 32M
  28. innodb_flush_method = O_DIRECT
  29. innodb_lock_wait_timeout = 120

  30. slow_query_log = ON
  31. slow_query_log_file = /usr/local/mysql/log/slow.log
  32. long_query_time = 5

  33. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

  34. secure_file_priv=/usr/local/mysqlcsvfiles/

  35. expire_logs_days=7
  36. max_binlog_size=1024M

  37. !includedir /etc/my.cnf.d
复制代码
4、添加之后
  1. mkdir -p /usr/local/mysql/log
  2. mkdir -p /usr/local/mysqlcsvfiles
复制代码
5、安全关闭
  1. ./mysqladmin -uroot -p shutdown
复制代码
6、安全启动
  1. ./mysqld_safe --user=mysql &
复制代码
7、进入mysql执行
  1. #进入mysql执行
  2. show master status\G;

  3. #分别记录主的binlog位置,在101的角度上102为主,在102的角度上,101为主
  4. File:mysql-bin.000001
  5. Position: 154

  6. #设置同步关系(两个主都要设置)
  7. #其中master_log_file和master_log_pos要登录到对方机器执行show master status\G;去查看
  8. stop slave;
  9. (在192.168.0.101)
  10. change master to master_host='192.168.0.102',master_user='replication',master_password='replication',master_log_file='mysql-bin.000001',master_log_pos=154;
  11. (在192.168.0.102)
  12. change master to master_host='192.168.0.101',master_user='replication',master_password='replication',master_log_file='mysql-bin.000001',master_log_pos=154;

  13. #分别启动slave
  14. start slave;
复制代码
三、安装Keepalived

1、安装编译依赖包
  1. yum install -y gcc openssl-devel libnl libnl-devel libnfnetlink-devel
复制代码
2、安装Keepalived
  1. #解压keepalived压缩包放到/usr/local/并重命名为keepalived
  2. cd /usr/local/src
  3. tar -zxvf keepalived-2.0.7.tar.gz
  4. mv keepalived-2.0.7 /usr/local/keepalived

  5. #配置keepalived 得到一个Makefile的文件夹
  6. #--prefix:keepalived安装目录
  7. #--sysconf:keepalived的核心配置文件,必须要在/etc目录下面,改为其他位置会导致启动不了,不配置在该目录下的话,启动keepalived时日志文件里面会报错,显示找不到/etc这个文件夹
  8. cd /usr/local/keepalived
  9. ./configure --prefix=/usr/local/keepalived/ --sysconf /etc

  10. #编译和安装keepalived
  11. make && make install

  12. #创建keepalived软链接 /usr/sbin/如果存在keepalived就先删除
  13. ln -s  /usr/local/keepalived/sbin/keepalived /usr/sbin/

  14. #复制keepalived脚本文件到/etc/init.d/目录下
  15. cd keepalived
  16. cp /usr/local/keepalived/etc/init.d/keepalived /etc/init.d/

  17. #设置Keepalived开机自启动
  18. chkconfig --add keepalived
  19. chkconfig keepalived on

  20. #启动keepalived
  21. service keepalived start
复制代码
四、配置Keepalived

1、编辑keepalived配置文件
  1. vi /etc/keepalived/keepalived.conf
复制代码
2、主服务器添加对应配置文件
  1. global_defs {
  2.         router_id LVS_LEVEL1        #主服务器名称
  3. }

  4. vrrp_script check_run {
  5.    script "/etc/keepalived/mysql_check.sh"
  6.    interval 5                                #5秒执行一次脚本
  7. }

  8. vrrp_instance VI_1 {
  9.     state MASTER                        #主服务器
  10.     interface eth0                        #承载VIP地址到物理接口
  11.     virtual_router_id 51        #虚拟路由器ID号,每个热播组保持一致
  12.     priority 100                        #优先级,数值越大优先级越高
  13.     advert_int 1                        #检查间隔,默认为1s
  14.     authentication {                #认证信息,每个热播组保持一致
  15.         auth_type PASS      #认证类型
  16.         auth_pass 1111                #密码字串
  17.     }
  18.     virtual_ipaddress {
  19.         192.168.0.144                #VIP地址(内网地址)
  20.     }
  21.     track_script {
  22.         check_run
  23.     }
  24. }
复制代码
3、备份服务器添加对应配置文件
  1. global_defs {
  2.         router_id LVS_LEVEL2        #备份服务器名称
  3. }
  4. vrrp_script check_run {
  5.         script "/etc/keepalived/mysql_check.sh"
  6.         interval 5                                #5秒执行一次脚本
  7. }
  8. vrrp_instance VI_1 {
  9.     state BACKUP                        #备份服务器
  10.     interface eth0                        #承载VIP地址到物理接口
  11.     virtual_router_id 51        #虚拟路由器ID号,每个热播组保持一致
  12.     priority 50                                #优先级,数值越大优先级越高
  13.     advert_int 1                        #检查间隔,默认为1s
  14.     authentication {                #认证信息,每个热播组保持一致
  15.         auth_type PASS      #认证类型
  16.         auth_pass 1111                #密码字串
  17.     }
  18.     virtual_ipaddress {
  19.         192.168.0.144       #VIP地址(和主服务器设置一样)
  20.     }
  21.     track_script {
  22.         check_run
  23.     }
  24. }
复制代码
附mysql_check.sh
  1. #!/bin/bash
  2. /usr/bin/mysql -uroot -p'你自己的数据库密码' -e "show status" &>/dev/null
  3. if [ $? -ne 0 ] ;then
  4.     systemctl stop keepalived
  5. fi
复制代码
  1. chmod +x /etc/keepalived/mysql_check.sh
复制代码
4、重启keepalived
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/article/266298.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具