搭建数据库服务高可用架构

[复制链接]
发表于 昨天 23:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
搭建数据库服务高可用架构
  1. 为了实现数据服务主库异常后,可以将从库自动切换为主库
复制代码
1.搭建高可用主从架构
  1. 架构环境规划 -- centos 7.9
  2. 主库    10.0.0.51    8.0.36  MHA-node
  3. 从库    10.0.0.52    8.0.36  MHA-node
  4. 从库    10.0.0.53    8.0.36  MHA-node
  5. mgr     10.0.0.54    8.0.36  MHA-node MHA-manager
  6. MHA-manager: 管理程序包  负责监控监控和控制主从架构
  7. MHA-node   : 节点程序包  和管理程序进行对接
  8. 步骤一:在虚拟环境中部署安装数据库和MHA程序
  9. 主库安装程序信息
  10. 安装数据库8.0.36 程序 并实现程序正常运行 (二进制包)
  11. 安装MHA-node程序
  12. yum install perl-DBD-MySQL -y
  13. rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  14. yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  15. 从库安装程序信息
  16. 安装数据库8.0.36 程序 并实现程序正常运行 (二进制包)
  17. 安装MHA-node程序
  18. yum install perl-DBD-MySQL -y
  19. rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  20. yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  21. 管理节点程序信息
  22. 安装数据库8.0.36 程序 不需要程序正常运行 (二进制包)
  23. 安装MHA-node程序
  24. yum install perl-DBD-MySQL -y
  25. rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  26. yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  27. 安装MHA-manager程序
  28. yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
  29. rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
  30. yum localinstall -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
  31. 步骤二:在数据库和管理节点中做高可用环境配置
  32. 准备好主从同步架构环境 -- GTID(推荐)
  33. show slave status\G
  34. 实现主从数据库之间互信 -- ssh互信      
  35. 主库操作 -- 10.0.0.51
  36. rm -rf /root/.ssh
  37. ssh-keygen
  38. cd /root/.ssh
  39. mv id_rsa.pub authorized_keys
  40. scp  -r  /root/.ssh  10.0.0.52:/root
  41. scp  -r  /root/.ssh  10.0.0.53:/root
  42. scp  -r  /root/.ssh  10.0.0.54:/root
  43. ssh 10.0.0.52 date
  44. ssh 10.0.0.53 date
  45. ssh 10.0.0.54 date
  46. - 以上操作完毕,表示52和53和54都信任了51
  47. ssh 10.0.0.51 date
  48. ssh 10.0.0.53 date
  49. ssh 10.0.0.54 date
  50. -- 以上操作完毕,表示51和53和54都信任了52
  51. ssh 10.0.0.51 date
  52. ssh 10.0.0.52 date
  53. ssh 10.0.0.54 date
  54. -- 以上操作完毕,表示51和52和54都信任了53
  55. ssh 10.0.0.51 date
  56. ssh 10.0.0.52 date
  57. ssh 10.0.0.53 date
  58. -- 以上操作完毕,表示51和52和53都信任了54
  59. 步骤三:运行启动高可用服务程序
  60. ln -s /usr/local/mysql/bin/mysql  /usr/bin/mysql
  61. ln -s /usr/local/mysql/bin/mysqlbinlog  /usr/bin/mysqlbinlog
  62. -- 命令软链接创建,在管理节点和主从节点都进行创建
  63. -- 以下操作信息,在管理节点执行即可(10.0.0.54)
  64. mkdir -p /etc/mha
  65. -- 创建配置文件目录
  66. mkdir -p /var/log/mha/app1
  67. -- 创建日志日志目录
  68. create user mha@'10.0.0.%' identified with mysql_native_password by 'mha';
  69. grant all privileges on *.* to mha@'10.0.0.%';
  70. -- 在主从环境搭建好,在主库中创建mha监控监控用户
  71. cat > /etc/mha/app1.cnf <<EOF
  72. [server default]
  73. manager_log=/var/log/mha/app1/manager         
  74. -- MHA的工作日志日志设置
  75. manager_workdir=/var/log/mha/app1            
  76. -- MHA的工作目录        
  77. master_binlog_dir=/data/3306/data/               
  78. -- 主库的binlog目录
  79. user=mha                                      
  80. -- 监控监控用户,利用此用户连接各个节点,做心跳检测(主要是检测主库的状态)                     
  81. password=mha                                 
  82. -- 监控密码
  83. ping_interval=2                              
  84. -- 心跳检测的间隔时间
  85. repl_password=123456                             
  86. -- 复制密码
  87. repl_user=repl                                
  88. -- 复制用户(用于告知从节点通过新主同步数据信息的用户信息)
  89. ssh_user=root                                
  90. -- ssh互信的用户(可以利用互信用户从主库scp获取binlog日志日志信息,便于从库进行数据信息补偿)
  91. [server1]                                    
  92. -- 节点信息....
  93. hostname=10.0.0.51
  94. port=3306                                 
  95. [server2]            
  96. hostname=10.0.0.52
  97. port=3306
  98. [server3]
  99. hostname=10.0.0.53
  100. port=3306
  101. EOF
  102. -- 编辑mha配置文件
  103. nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
  104. MHA服务启动扩展说明:
  105. masterha_check_status --conf=/etc/mha/app1.cnf
  106. app1 (pid:23754) is running(0:PING_OK), master:10.0.0.51
  107. -- 查看mha服务是否正确运行
  108. 排查启动异常方法:
  109. 1)查看日志信息,确认启动异常原因
  110. /var/log/mha/app1/manager.log
  111. 2)执行查看命令,确认启动异常原因
  112. masterha_check_ssh --conf=/etc/mha/app1.cnf
  113. -- 确认SSH互信是否正常
  114. masterha_check_repl --conf=/etc/mha/app1.cnf
  115. -- 确认主从同步是否正常
复制代码
2.MHA高可勤奋能设置和原理阐明
  1. 1)MHA高可用服务运行启动
  2. nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
  3. --conf=/etc/mha/app1.cnf  -- 配置文件没有存储在默认路径下,需要进行指定加载;需要利用自定义配置文件实现多个主从架构高可用
  4. --remove_dead_master_conf -- 表示在配置文件中会将有故障的主节点配置删除,避免配置信息影响选主效率
  5. --ignore_last_failover    -- 表示可以让高可用服务出现异常后,快速启动  
  6. < /dev/null               -- 表示程序运行过程中,忽略所有交互操作信息
  7. PS:MHA实现高可用属于一次性高可用服务
  8. 2)MHA高可用主节点监控过程
  9. mha会调用masterha_master_monitor监控主节点脚本 实现确认主库是否存活
  10. 应用监控用户(mha)登录连接主库,执行SQL语句 select user();
  11. 当发现监控用户无法连接主库或者无法向主库发送查询请求,都会触发故障转移操作
  12. 3)MHA会从其余节点中选择新主节点(选主过程)  52 53 54 55 56 57
  13. 进行分组操作  
  14. alive   将活着的从节点划分到存活组中   52 53   
  15. latest  数据量和主库基本一致的组       52 53   
  16. pref    指定接替主库角色节点信息组        (candidate_master=1)
  17. dead    不会参数选主的角色组          54      (no_master=1/log_bin=0/检测主从数据差异量>100M)      
  18. 根据不同策略选主
  19. 最优策略   先考虑 alive   其次考虑  latest  再其次考虑  pref  最后确认  dead组 55 56
  20.           以上策略选择完,还有多个节点信息,根据节点顺序编号选择最终的主节点
  21. 次优选择   先考虑 alive   其次考虑  latest  dead组      
  22.           以上策略选择完,还有多个节点信息,根据节点顺序编号选择最终的主节点
  23. 再次优选择 先考虑 alive   其次考虑  pref    dead组
  24.           以上策略选择完,还有多个节点信息,根据节点顺序编号选择最终的主节点
  25. 最后选主方法 先考虑 alive dead组
  26.            以上策略选择完,还有多个节点信息,根据节点顺序编号选择最终的主节点
  27. 4)MHA数据补偿操作过程   
  28.    情况一:原有主库只是数据库服务异常,但是数据库系统环境正常(ssh连接管理)
  29.    ssh 连接主库 -- 到指定binlog目录中拉取日志 -- 从库中(选举后)-- 将主库binlog信息补充到从库中
  30.    情况二:原有主库系统崩溃,无法实现ssh连接管理
  31.    1)所有从库之间进行binlog信息对比 ssh连接所有从库
  32.    52 新主  -- 53 binlog -- 54 binlog -- 55 binlog
  33.     1-15        1-9           1-15        1-10
  34.    2)借助远程日志备份服务器,将binlog日志信息拉取并补偿数据  
  35.    必须搭建好原有备份日志服务/管理节点可以连接备份服务器拉取日志         
  36.    mkdir -p /backup/binlog/10.0.0.51/ && cd /backup/binlog/10.0.0.51/   
  37.    mysqlbinlog -R --host=10.0.0.51 --user=root --password=123456 --raw --stop-never binlog.000001 &
  38.    vim /etc/mha/app1.cnf
  39.    [binlog1]
  40.    hostname=10.0.0.54
  41.    master_binlog_dir=/backup/binlog/10.0.0.51/   
  42.    no_master=1
  43. 5) MHA会自动完成主从重建过程
  44.    52 新主   10.0.0.52  3306  repl  123456
  45.    管理其他从节点和新主建立连接
  46.    53 从库   stop slave; change master 10.0.0.52  3306   repl  123456; start slave
  47.    54 从库   stop slave; change master 10.0.0.52  3306   repl  123456; start slave   
  48. 6) MHA实现VIP地址创建和实现地址漂移
  49.    ifconfig ens33:1 10.0.0.50/24  -- 在主库中执行
  50.    上传脚本文件信息
  51.    vim /usr/local/bin/master_ip_failover
  52.    13 my $vip = '10.0.0.50/24';
  53.    14 my $key = '1';
  54.    15 my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
  55.    16 my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
  56.    17 my $ssh_Bcast_arp= "/sbin/arping -I ens33 -c 3 -A 10.0.0.50";
  57.    -- 以上编写内容在mha管理节点操作
  58.    vim /etc/mha/app1.cnf
  59.    [server default]
  60.    master_ip_failover_script=/usr/local/bin/master_ip_failover
  61. 7) MHA故障切换实现邮件报警功能
  62.    vim /usr/local/bin/send_report
  63.    28 my $smtp='smtp.qq.com';
  64.    29 my $mail_from='330882721@qq.com';
  65.    30 my $mail_user='330882721';
  66.    31 my $mail_pass='lshxuahtxuxfcaec';
  67.    32 #my $mail_to=['to1@qq.com','to2@qq.com',];
  68.    33 my $mail_to='330882721@qq.com';
  69.    vim /etc/mha/app1.cnf
  70.    [server defaults]
  71.    report_script=/usr/local/bin/send_report
复制代码
MHA额外设置
  1. 1)VIP地址漂移功能设置   /usr/local/bin/master_ip_failover   mha服务加载
  2. 2)数据补偿功能设置      搭建binlog日志远程备份功能/可以拉取备份日志
  3. 3)实现MHA报警功能       /usr/local/bin/send_report          mha服务加载
复制代码
MHA高可用切换原理
  1. 1)当MHA实现高可用监控后,会不断对主库发起探活测试,但发现主库不能连接或返回查询结果
  2. 2)当MHA发现主库异常后,会先举行新主角色选举过程
  3. 3)当新的主节点选择后,会将数据信息在新的主节点上进行补偿
  4. 4)在新的主节点补偿数据后,会实现新主节点和其余从节点之间主从关系重建
  5. 5)在原有主节点上会删除VIP地址,在新主节点上会生成VIP地址(VIP漂移)
  6. 6)所有前端业务都会访问新的主节点
  7. 7)会利用邮件报警脚本,实现MHA故障转移报警通知
复制代码
3.MHA高可勤奋能测试和修复
  1. MHA切换功能测试
  2. masterha_stop --conf=/etc/mha/app1.cnf
  3. nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
  4. /etc/init.d/mysqld stop
  5. -- 模拟主库异常
  6. -- 检测VIP地址是否漂移      主库vip是否清理  从库是否生成VIP
  7. -- 检查主从关系是否重新建立  show slave status\G  获取新主库连接信息
  8. -- 检查报警邮件信息是否收到  QQ 其他邮箱
  9. MHA切换修复过程:
  10. 步骤一:将原有主库恢复运行启动
  11. /etc/init.d/mysqld start  
  12. -- 当主库无法正常恢复启动,可以重新建立新的数据库实例(重新加载备份数据 和新主库建立主从同步)
  13. 步骤二:在原有主库中做设置,实现和新主库建立主从同步
  14. reset master;
  15. CHANGE MASTER TO
  16.   MASTER_HOST='10.0.0.52',
  17.   MASTER_PORT=3306,
  18.   MASTER_USER='repl',
  19.   MASTER_PASSWORD='123456',
  20. master_auto_position=1;
  21. 在新主库中做数据备份,在原主库中进行数据恢复
  22. mysqldump -A --source-data >/backup/all-03-09-02.sql  
  23. scp -rp /backup/all-03-09-02.sql 10.0.0.51:/backup/
  24. mysql </backup/all-03-09-02.sql
  25. start slave;
  26. 步骤三:在MHA配置文件中,添加原主节点配置信息
  27. vim /etc/mha/app1.cnf
  28. [server1]
  29. hostname=10.0.0.51
  30. port=3306
  31. 步骤四:恢复binlog日志远程备份功能
  32. 10.0.0.54
  33. mkdir -p /backup/binlog/10.0.0.52/ && chown -R mysql.mysql /backup/binlog/10.0.0.52/
  34. cd /backup/binlog/10.0.0.52/
  35. mysqlbinlog -R --host=10.0.0.52 --user=root --password=123456 --raw --stop-never binlog.000001 &
  36. 步骤五:重新恢复MHA服务运行启动
  37. vim /etc/mha/app1.cnf
  38. [binlog1]
  39. hostname=10.0.0.54
  40. master_binlog_dir=/backup/binlog/10.0.0.52/   
  41. no_master=1
  42. nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
复制代码
4.MHA切换主数据库脚色到原有主库
  1. 利用脚本文件实现角色手工切换转移   52(主) -主角色切换- 51(主)
  2. 步骤一:编写手工切换脚本信息,并加载手工切换脚本
  3. vim /usr/local/bin/master_ip_online_change
  4. 21 my $vip = "10.0.0.50/24";
  5. 22 my $key = "1";
  6. 23 my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";   
  7. 24 my $ssh_stop_vip = "/sbin/ifconfig ens33:$key $vip down";
  8. 25 my $ssh_Bcast_arp= "/sbin/arping -I ens33 -c 3 -A 10.0.0.50/24";
  9. vim /etc/mha/app1.cnf
  10. master_ip_online_change_script=/usr/local/bin/master_ip_online_change
  11. 步骤二:实现手工切换主备角色信息
  12. masterha_stop  --conf=/etc/mha/app1.cnf
  13. masterha_master_switch --conf=/etc/mha/app1.cnf --master_state=alive --new_master_host=10.0.0.51 --orig_master_is_new_slave --running_updates_limit=10000
  14. --master_state=alive   -- 表示在主节点正常运行状态,做主备切换
  15. --new_master_host      -- 表示将哪个节点切换成主节点
  16. --orig_master_is_new_slav  -- 表示让其余从节点和新主节点重新建立主从关系   
  17. --running_updates_limit    -- 切换过程有异常超过时间设定,会撤销切换
  18. FLUSH NO_WRITE_TO_BINLOG TABLES   --在主节点做命令执行  切换过程中禁止向主节点写入新的binlog信息
  19. 步骤三:重新恢复MHA服务运行
  20. vim /etc/mha/app1.cnf
  21. [binlog1]
  22. hostname=10.0.0.54
  23. master_binlog_dir=/backup/binlog/10.0.0.51/   
  24. no_master=1
  25. cd /backup/binlog/10.0.0.51/
  26. mysqlbinlog -R --host=10.0.0.51 --user=root --password=123456 --raw --stop-never binlog.00000X &
  27. nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
复制代码
总结
  1. 1)MHA高可用架构部署过程
  2.    环境准备(安装程序 主从同步 ssh互信设置) --> 编写配置文件,并启动mha服务 --> 额外功能设置(VIP漂移/数据补偿功能/报警功能设置)
  3. 2)MHA高可故障切换原理/高可用切换测试
  4. 3)MHA故障修复过程
  5.    -- 将故障节点修复后,可以重新加入到高可用集群中
  6.    -- 可以手工将原有主库角色恢复
复制代码
课程知识训练
  1. 1.重新部署综合架构LNMP架构(wordpress) 在数据库应用上可以应用mysql数据库(构建为高可用架构)
  2. 2.测试主库故障,网站业务是否可以正常访问  50x
复制代码
免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表