加载中...

屌炸天实战 Mysql 系列教程(五) 多实例、高可用生产环境实战


第一篇:屌炸天实战 MySQL 系列教程(一) 生产标准线上环境安装配置案例及棘手问题解决

第二篇:屌炸天实战 MySQL 系列教程(二) 史上最屌、你不知道的数据库操作

第三篇:屌炸天实战 MySQL 系列教程(三)你不知道的 视图、触发器、存储过程、函数、事物、索引、语句

第四篇:屌炸天实战 MySQL 系列教程(四) 主从复制、读写分离、模拟宕机、备份恢复方案生产环境实战

第五篇:屌炸天实战 Mysql 系列教程(五) 多实例、高可用生产环境实战

 

本章内容:

  • MySQL 多实例
  • 简介
  • 安装前的配置
  • 生产环境屌炸天的脚步
  • 初始化登录实现多实例
  • 要再增加一个多实例怎么办?解决
  • MySQL 高可用
  • 部署配置heardbeat
  • 部署配置drbd
  • heardbeat与drbdde 联合配置
  • 部署MySQL
  • 联合heardbeat配置MySQL

 

一、MySQL 多实例

1、简介

前几年一个朋友跟我说他们公司一台物理服务器上跑 3 到 5 个实例,我说你们公司得多穷啊,他说这个是合理规划,发挥服务器最大性能,你说呢?

别问小编公司跑几个,小编公司有钱不在乎,一台小型器最多跑 3 个实例,当然,每天的数据量还是很大的。

那什么使多实例呢,为什么用它?

多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307);

运行多个MySQL服务进程,这些进程通过不同的socket监听不同的服务端口来提供各自的服务。

MySQL多实例共用一个 MySQL 的安装程序,使用不同(也可相同)的 my.cnf 配置文件,启动程序和数据文件。

在提供服务时,多实例 MySQL 在逻辑上是各自独立的,多个实例的本身是根据配置文件对应的设定值,来获得服务器的相关硬件资源多少。

2、安装配置前操作

安装配置前的一些配置少不了

文件的目录最好也规矩,这样才专业

  1. #杀掉进程,避免冲突,删掉启动命令。
  2. pkill mysqld
  3. ps -ef|grep mysql
  4. rm -f /etc/init.d/mysqld
  5. # 创建目录,授权
  6. mkdir -p /data/{3306,3307}/data
  7. chown -R mysql.mysql /data/
  8. tree /data/
  9. /data/ #总的多实例根目录
  10. ├── 3306 #3306实例的目录
  11. └── data #3306实例的数据文件目录
  12. └── 3307 #3307实例的目录
  13. └── data #3307实例的数据文件目录
  14. 4 directories, 0 files

3、配置文件

话不多说,直接上生产环境线上的配置文件:

  1. [client]
  2. port = 3306
  3. socket = /data/3306/mysql.sock
  4. [mysql]
  5. no-auto-rehash
  6. [mysqld]
  7. user = mysql
  8. port = 3306
  9. socket = /data/3306/mysql.sock
  10. basedir = /application/mysql
  11. datadir = /data/3306/data
  12. open_files_limit = 1024
  13. back_log = 600
  14. max_connections = 800
  15. max_connect_errors = 3000
  16. table_cache = 614
  17. external-locking = FALSE
  18. max_allowed_packet =8M
  19. sort_buffer_size = 1M
  20. join_buffer_size = 1M
  21. thread_cache_size = 100
  22. thread_concurrency = 2
  23. query_cache_size = 2M
  24. query_cache_limit = 1M
  25. query_cache_min_res_unit = 2k
  26. #default_table_type = InnoDB
  27. thread_stack = 192K
  28. #transaction_isolation = READ-COMMITTED
  29. tmp_table_size = 2M
  30. max_heap_table_size = 2M
  31. long_query_time = 1
  32. #log_long_format
  33. #log-error = /data/3306/error.log
  34. #log-slow-queries = /data/3306/slow.log
  35. pid-file = /data/3306/mysql.pid
  36. log-bin = /data/3306/mysql-bin
  37. relay-log = /data/3306/relay-bin
  38. relay-log-info-file = /data/3306/relay-log.info
  39. binlog_cache_size = 1M
  40. max_binlog_cache_size = 1M
  41. max_binlog_size = 2M
  42. expire_logs_days = 7
  43. key_buffer_size = 16M
  44. read_buffer_size = 1M
  45. read_rnd_buffer_size = 1M
  46. bulk_insert_buffer_size = 1M
  47. #myisam_sort_buffer_size = 1M
  48. #myisam_max_sort_file_size = 10G
  49. #myisam_max_extra_sort_file_size = 10G
  50. #myisam_repair_threads = 1
  51. #myisam_recover
  52. lower_case_table_names = 1
  53. skip-name-resolve
  54. slave-skip-errors = 1032,1062
  55. replicate-ignore-db=mysql
  56. server-id = 1
  57. innodb_additional_mem_pool_size = 4M
  58. innodb_buffer_pool_size = 32M
  59. innodb_data_file_path = ibdata1:128M:autoextend
  60. innodb_file_io_threads = 4
  61. innodb_thread_concurrency = 8
  62. innodb_flush_log_at_trx_commit = 2
  63. innodb_log_buffer_size = 2M
  64. innodb_log_file_size = 4M
  65. innodb_log_files_in_group = 3
  66. innodb_max_dirty_pages_pct = 90
  67. innodb_lock_wait_timeout = 120
  68. innodb_file_per_table = 0
  69. [mysqldump]
  70. quick
  71. max_allowed_packet = 2M
  72. [mysqld_safe]
  73. log-error=/data/3306/mysql3306.err
  74. pid-file=/data/3306/mysqld.pid
3306_my.cnf
  1. #!/bin/sh
  2. #Nick Suo
  3. #email:630571017@qq.com
  4. #blog:http://www.cnblogs.com/suoning
  5.  
  6.  
  7. #init
  8. port=3306
  9. mysql_user="root"
  10. mysql_pwd="suoning"
  11. CmdPath="/application/mysql/bin"
  12. mysql_sock="/data/${port}/mysql.sock"
  13. #startup function
  14. function_start_mysql()
  15. {
  16. if [ ! -e "$mysql_sock" ];then
  17. printf "Starting MySQL...\n"
  18. /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
  19. else
  20. printf "MySQL is running...\n"
  21. exit
  22. fi
  23. }
  24. #stop function
  25. function_stop_mysql()
  26. {
  27. if [ ! -e "$mysql_sock" ];then
  28. printf "MySQL is stopped...\n"
  29. exit
  30. else
  31. printf "Stoping MySQL...\n"
  32. ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
  33. fi
  34. }
  35. #restart function
  36. function_restart_mysql()
  37. {
  38. printf "Restarting MySQL...\n"
  39. function_stop_mysql
  40. sleep 2
  41. function_start_mysql
  42. }
  43. case $1 in
  44. start)
  45. function_start_mysql
  46. ;;
  47. stop)
  48. function_stop_mysql
  49. ;;
  50. restart)
  51. function_restart_mysql
  52. ;;
  53. *)
  54. printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
  55. esac
3306_mysql
  1. [client]
  2. port = 3307
  3. socket = /data/3307/mysql.sock
  4. [mysql]
  5. no-auto-rehash
  6. [mysqld]
  7. user = mysql
  8. port = 3307
  9. socket = /data/3307/mysql.sock
  10. basedir = /application/mysql
  11. datadir = /data/3307/data
  12. open_files_limit = 1024
  13. back_log = 600
  14. max_connections = 800
  15. max_connect_errors = 3000
  16. table_cache = 614
  17. external-locking = FALSE
  18. max_allowed_packet =8M
  19. sort_buffer_size = 1M
  20. join_buffer_size = 1M
  21. thread_cache_size = 100
  22. thread_concurrency = 2
  23. query_cache_size = 2M
  24. query_cache_limit = 1M
  25. query_cache_min_res_unit = 2k
  26. #default_table_type = InnoDB
  27. thread_stack = 192K
  28. #transaction_isolation = READ-COMMITTED
  29. tmp_table_size = 2M
  30. max_heap_table_size = 2M
  31. #long_query_time = 1
  32. #log_long_format
  33. #log-error = /data/3307/error.log
  34. #log-slow-queries = /data/3307/slow.log
  35. pid-file = /data/3307/mysql.pid
  36. #log-bin = /data/3307/mysql-bin
  37. relay-log = /data/3307/relay-bin
  38. relay-log-info-file = /data/3307/relay-log.info
  39. binlog_cache_size = 1M
  40. max_binlog_cache_size = 1M
  41. max_binlog_size = 2M
  42. expire_logs_days = 7
  43. key_buffer_size = 16M
  44. read_buffer_size = 1M
  45. read_rnd_buffer_size = 1M
  46. bulk_insert_buffer_size = 1M
  47. #myisam_sort_buffer_size = 1M
  48. #myisam_max_sort_file_size = 10G
  49. #myisam_max_extra_sort_file_size = 10G
  50. #myisam_repair_threads = 1
  51. #myisam_recover
  52. lower_case_table_names = 1
  53. skip-name-resolve
  54. slave-skip-errors = 1032,1062
  55. replicate-ignore-db=mysql
  56. server-id = 3
  57. innodb_additional_mem_pool_size = 4M
  58. innodb_buffer_pool_size = 32M
  59. innodb_data_file_path = ibdata1:128M:autoextend
  60. innodb_file_io_threads = 4
  61. innodb_thread_concurrency = 8
  62. innodb_flush_log_at_trx_commit = 2
  63. innodb_log_buffer_size = 2M
  64. innodb_log_file_size = 4M
  65. innodb_log_files_in_group = 3
  66. innodb_max_dirty_pages_pct = 90
  67. innodb_lock_wait_timeout = 120
  68. innodb_file_per_table = 0
  69. [mysqldump]
  70. quick
  71. max_allowed_packet = 2M
  72. [mysqld_safe]
  73. log-error=/data/3307/mysql3307.err
  74. pid-file=/data/3307/mysqld.pid
3307_my.cnf
  1. #!/bin/sh
  2. #Nick Suo
  3. #email:630571017@qq.com
  4. #blog:http://www.cnblogs.com/suoning
  5.  
  6. #init
  7. port=3307
  8. mysql_user="root"
  9. mysql_pwd="suoning"
  10. CmdPath="/application/mysql/bin"
  11. mysql_sock="/data/${port}/mysql.sock"
  12. #startup function
  13. function_start_mysql()
  14. {
  15. if [ ! -e "$mysql_sock" ];then
  16. printf "Starting MySQL...\n"
  17. /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
  18. else
  19. printf "MySQL is running...\n"
  20. exit
  21. fi
  22. }
  23. #stop function
  24. function_stop_mysql()
  25. {
  26. if [ ! -e "$mysql_sock" ];then
  27. printf "MySQL is stopped...\n"
  28. exit
  29. else
  30. printf "Stoping MySQL...\n"
  31. ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
  32. fi
  33. }
  34. #restart function
  35. function_restart_mysql()
  36. {
  37. printf "Restarting MySQL...\n"
  38. function_stop_mysql
  39. sleep 2
  40. function_start_mysql
  41. }
  42. case $1 in
  43. start)
  44. function_start_mysql
  45. ;;
  46. stop)
  47. function_stop_mysql
  48. ;;
  49. restart)
  50. function_restart_mysql
  51. ;;
  52. *)
  53. printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
  54. esac
3307_mysql
  1. #上传及拷贝配置文件
  2. cd /home/oldsuo/tools/
  3. rz data.zip
  4. unzip data.zip
  5. Archive: data.zip
  6. creating: data/
  7. creating: data/3306/
  8. inflating: data/3306/my.cnf
  9. inflating: data/3306/mysql
  10. creating: data/3307/
  11. inflating: data/3307/my.cnf
  12. inflating: data/3307/mysql
  13. cp data/3306/my.cnf /data/3306/
  14. cp data/3307/my.cnf /data/3307/
  15. tree /data/
  1. #拷贝启动文件,加执行权限
  2. cp data/3306/mysql /data/3306/
  3. cp data/3307/mysql /data/3307/
  4. chmod +x /data/3306/mysql
  5. chmod +x /data/3307/mysql
  6. tree /data/
  7. /data/
  8. ├── 3306
  9. ├── data
  10. ├── my.cnf
  11. └── mysql
  12. └── 3307
  13. ├── data
  14. ├── my.cnf
  15. └── mysql
  16. # 多实例启动文件的启动mysql服务实质:
  17. mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null &
  18. mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 > /dev/null &
  19. # 多实例启动文件的停止mysql服务实质:
  20. mysqladmin -u root -poldsuo -S /data/3306/mysql.sock shutdown
  21. mysqladmin -u root -poldsuo -S /data/3307/mysql.sock shutdown

4、初始化启动登录

此时就算完成了,可以初始化并启动了,so easy

  1. #初始化数据库,存放数据路径,自己放自己的目录下
  2. cd /application/mysql/scripts/
  3. ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data --user=mysql
  4. ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data --user=mysql
  5. #启动mysql,并检查端口
  6. /data/3306/mysql start
  7. /data/3307/mysql start
  8. netstat -lntup|grep 330[6-7]
  9. tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 27896/mysqld
  10. tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 27174/mysqld
  11. #授权,并检查(批量)
  12. find /data/ -type f -name "mysql"
  13. /data/3306/mysql
  14. /data/3307/mysql
  15. find /data/ -type f -name "mysql" -exec chmod 700 {} \;
  16. find /data/ -type f -name "mysql" -exec chown root.root {} \;
  17. find /data/ -type f -name "mysql" -exec ls -l {} \;
  18. #设置mysql登陆密码,为nick。
  19. mysqladmin -u root -S /data/3306/mysql.sock password 'nick'
  20. mysqladmin -u root -S /data/3307/mysql.sock password 'nick'
  21. #修改密码
  22. mysqladmin -uroot -pnick password 'oldsuo' -S /data/3306/mysql.sock
  23. #多实例数据库的登陆方法,需要参数-S、并指定sock。
  24. mysql -S /data/3306/mysql.sock #不设置密码登陆
  25. mysql -S /data/3307/mysql.sock
  26. mysql -uroot -p -S /data/3306/mysql.sock #设置密码登陆
  27. mysql -uroot -p -S /data/3307/mysql.sock
  28. mysql -uroot -p hlocalhost -S /data/3306/mysql.sock #远程登陆
  29. mysql -uroot -p hlocalhost -S /data/3307/mysql.sock
  30. mysql -uroot -p h 192.168.200.98 -P 3306
  31. mysql -uroot -p h 192.168.200.98 -P 3307
  32.  
  33. #创建库,名为d3306、d3307。并检查。
  34. create database d3306;
  35. create database d3307;
  36. show databases;

5、增加一个mysql实例

问题又来了,要增加一个实例怎么弄呢?

其实不难,只需按上面步骤,创建目录,在修改相应配置文件,初始化就ok

  1. #增加一个mysql实例
  2. mkdir -p /data/3308/data
  3. cp /data/3306/my.cnf /data/3308/
  4. cp /data/3306/mysql /data/3308/
  5. chown -R mysql.mysql /data/3308/
  6. cd /data/3308/
  7. vim my.cnf
  8. :g/3306/s//3308/g #批量替换命令
  9. vi mysql
  10. :g/3306/s//3308/g
  11. #初始化数据库
  12. cd /application/mysql/scripts/
  13. ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3308/data --user=mysql
  14. #启动数据库,并检查端口
  15. /data/3308/mysql start
  16. netstat -lntup|grep 330
  17. #设置密码为nick。
  18. mysqladmin -u root -S /data/3308/mysql.sock password 'nick'
  19. #登陆mysql
  20. mysql -uroot -p -S /data/3308//mysql.sock

 

二、MySQL 高可用双机热备

小编啥也不说了,直接把公司得环境搬上来吧

本文采用 heartbeat + drbd + MySQL 实现MySQL的高可用。

其原理图如下:

 

1、部署heartbeat3.0

heartbeat 是一个高可用集群架构,它最核心的两个部分为:心跳监测和资源接管,心跳监测是通过HA心跳实时监测,机器之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那就认为对方以宕机等,这时启动资源接管,使备份服务器变为主服务器,使服务器正常运行。

1.1.配置主机名与hosts

一惯的,需先改主机名与hosts文件

  1. 1> data-1-1
  2. hostname data-1-1
  3. sed -i 's#HOSTNAME=localhost.localdomain#HOSTNAME=data-1-1#g' /etc/sysconfig/network
  4. tail -1 /etc/sysconfig/network
  5. /sbin/route add -host 192.168.1.5 dev eth1
  6. echo '/sbin/route add -host 192.168.1.5' >>/etc/rc.local
  7. route -n
  8. #退出重新登录查看修改后主机名
  9. 2> data-1-2
  10. hostname data-1-2
  11. sed -i 's#HOSTNAME=localhost.localdomain#HOSTNAME=data-1-2#g' /etc/sysconfig/network
  12. tail -1 /etc/sysconfig/network
  13. /sbin/route add -host 192.168.1.3 dev eth1
  14. echo '/sbin/route add -host 192.168.1.3' >>/etc/rc.local
  15. route -n
  1. [root@localhost ~]# hostname data-1-2
  2. [root@localhost ~]# sed -i 's#HOSTNAME=localhost.localdomain#HOSTNAME=data-1-2#g' /etc/sysconfig/network
  3. [root@localhost ~]# tail -1 /etc/sysconfig/network
  4. HOSTNAME=data-1-2
  5. [root@localhost ~]# /sbin/route add -host 192.168.1.6 dev eth1
  6. [root@localhost ~]# echo '/sbin/route add -host 192.168.1.6' >>/etc/rc.local
  7. [root@localhost ~]# route -n
  8. Kernel IP routing table
  9. Destination Gateway Genmask Flags Metric Ref Use Iface
  10. 192.168.1.6 0.0.0.0 255.255.255.255 UH 0 0 0 eth1
  11. 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
  12. 192.168.200.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
  13. 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
  14. 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
  15. 0.0.0.0 192.168.200.6 0.0.0.0 UG 0 0 0 eth0
View Code

1.2.下载安装epel包

yum 安装前需先安装 epel 包

  1. mkdir -p /home/oldsuo/tools
  2. cd /home/oldsuo/tools/
  3. sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
  4. wget http://mirrors.opencas.cn/epel/6/i386/epel-release-6-8.noarch.rpm
  5. rpm -ivh epel-release-6-8.noarch.rpm
  6. rpm -qa |grep epel

1.3.安装heartbeat

yum 安装,简单快捷

  1. yum install heartbeat y

1.4.配置heartbeat

安装完配置,以下是快速配置文档

  1. cd /etc/ha.d/
  2. cp ha.cf ha.cf.ori
  3. cp authkeys authkeys.ori
  4. cp haresources haresources.ori
  5. chmod 600 authkeys
  6. vim ha.cf
  7. debugfile /var/log/ha-debug
  8. logfile /var/log/ha-log
  9. logfacility local1
  10. keepalive 2
  11. deadtime 30
  12. warntime 10
  13. initdead 60
  14.  
  15. #bcast eth1
  16. mcast eth1 225.0.0.1 694 1 0
  17. auto_failback on
  18. node data-1-1
  19. node data-1-2
  20. crm no
  21. vim authkeys
  22. auth 1
  23. 1 sha1 sui1bian2xie3duo4dian5suibianxieduodian
  24. vim haresources
  25. #192.168.1.3
  26. data-1-1 IPaddr::192.168.200.91/24/eth0
  27. #data-1-1 IPaddr::192.168.200.91/24/eth0 httpd
  28.  
  29. #192.168.1.5
  30. data-1-2 IPaddr::192.168.200.94/24/eth0
  31. #mysql master
  32. #picdata-1-1 IPaddr::192.168.1.3/24/eth1 mysqld
  33. #picdata-1-1 IPaddr::192.168.1.3/24/eth1
  34.  
  35. #mysql slave
  36. #picdata-1-2 IPaddr::192.168.1.5/24/eth1

1.5.配置hosts

检查 hosts,一定要做

  1. #!!!主机名必须与uname -n 显示一致!
  2. cat >>/etc/hosts<<eof
  3. 192.168.1.3 data-1-1
  4. 192.168.1.5 data-1-2
  5. eof
  6. tail -2 /etc/hosts
  7. ping data-1-1
  8. ping data-1-2
  1. [root@data-1-2 heartbeat-3.0.4]# cat >>/etc/hosts<<eof
  2. > 192.168.1.3 data-1-1
  3. > 192.168.1.5 data-1-2
  4. > eof
  5. [root@data-1-2 heartbeat-3.0.4]# tail -2 /etc/hosts
  6. 192.168.1.6 data-1-1
  7. 192.168.1.7 data-1-2
  8. [root@data-1-2 heartbeat-3.0.4]# ping data-1-1
  9. 64 bytes from data-1-1 (192.168.1.3): icmp_seq=1 ttl=64 time=1.98 ms
  10. [root@data-1-2 heartbeat-3.0.4]# ping data-1-2
  11. 64 bytes from data-1-2 (192.168.1.5): icmp_seq=1 ttl=64 time=0.040 ms
View Code

1.6.启动heartbeat服务

可以启动啦,啦

  1. /etc/init.d/iptables stop
  2. setenforce 0
  3. /etc/init.d/heartbeat start
  4. ps -ef |grep hear
  1. [root@data-1-1 ha.d]# /etc/init.d/iptables stop
  2. [root@data-1-1 ha.d]# setenforce 0
  3. setenforce: SELinux is disabled
  4. [root@data-1-1 ha.d]# /etc/init.d/heartbeat start
  5. Starting High-Availability services: INFO: Resource is stopped
  6. INFO: Resource is stopped
  7. Done.
  8. [root@data-1-1 ha.d]# ps -ef |grep hear
  9. root 5282 1 0 14:17 ? 00:00:00 heartbeat: master control process
  10. root 5286 5282 0 14:17 ? 00:00:00 heartbeat: FIFO reader
  11. root 5287 5282 0 14:17 ? 00:00:00 heartbeat: write: mcast eth1
  12. root 5288 5282 0 14:17 ? 00:00:00 heartbeat: read: mcast eth1
  13. root 5298 1763 0 14:18 pts/0 00:00:00 grep hear
View Code

 

2、部署 DRBD

DRBD 是一个用软件实现、不共享、服务器之间镜像块块的存储复制解决方案。

在高可用(HA)环境中使用 DRBD,可以代替一个共享的盘阵。

2.1.环境准备

  1. #!!!双网卡,双硬盘

2.2.对磁盘分区

超过2T的磁盘,一般是 parted 分区,支持更好

  1. #parted分区
  2. ##data-1-1和data-1-2操作一样!
  3. fdisk l
  4. parted /dev/xvdb mklabel gpt
  5. parted /dev/xvdb mkpart primary 0 1024
  6. parted /dev/xvdb p
  7. parted /dev/xvdb mkpart primary 1025 2146
  8. parted /dev/xvdb p
  1. [root@data-1-1 ~]# fdisk -l
  2. Disk /dev/xvdb: 2147 MB, 2147483648 bytes
  3. [root@data-1-1 ~]# parted /dev/xvdb mklabel gpt
  4. 信息: You may need to update /etc/fstab.
  5. [root@data-1-1 ~]# parted /dev/xvdb mkpart primary 0 1024
  6. 警告: The resulting partition is not properly aligned for best performance.
  7. 忽略/Ignore/放弃/Cancel? Ignore
  8. 信息: You may need to update /etc/fstab.
  9. [root@data-1-1 ~]# parted /dev/xvdb p
  10. Number Start End Size File system Name 标志
  11. 1 17.4kB 1024MB 1024MB primary
  12. [root@data-1-1 ~]# parted /dev/xvdb mkpart primary 1025 2146
  13. 警告: The resulting partition is not properly aligned for best performance.
  14. 忽略/Ignore/放弃/Cancel? Ignore
  15. 信息: You may need to update /etc/fstab.
  16. [root@data-1-1 ~]# parted /dev/xvdb p
  17. 1 17.4kB 1024MB 1024MB primary
  18. 2 1025MB 2146MB 1121MB primary
View Code

2.3.安装配置DRBD

以下是快速安装配置文档

  1. 1> 安装epel
  2. mkdir -p /home/oldsuo/tools
  3. cd /home/oldsuo/tools/
  4. sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
  5. wget http://mirror.ventraip.net.au/elrepo/elrepo/el6/x86_64/RPMS/elrepo-release-6-5.el6.elrepo.noarch.rpm
  6. rpm -ivh elrepo-release-6-5.el6.elrepo.noarch.rpm
  7. 2> 安装drbd,并加载到内核
  8. yum install drbd kmod-drbd84 -y
  9. rpm -qa |grep drbd
  10. cd /home/oldsuo/tools/
  11. export LC_ALL=C
  12. lsmod |grep drbd
  13. modprobe drbd
  14. lsmod |grep drbd
  15. echo "modprobe drbd >/dev/null 2>&1" >/etc/sysconfig/modules/drbd.modules
  16. tail -1 /etc/sysconfig/modules/drbd.modules
  17. #!!!报错FATAL: Module drbd not found.
  18. http://blog.sina.com.cn/s/blog_702bd5360101h84d.html
  19. [root@data-1-2 ~]# modprobe drbd
  20. FATAL: Module drbd not found.
  21. 解决方法:yum install kernel* -y 重启服务器!

2.4.配置drbd.conf文件

一惯需改配置文件

  1. vim /etc/drbd.conf
  2. global {
  3. usage-count no;
  4. }
  5. common {
  6. syncer {
  7. rate 330M;
  8. verify-alg crc32c;
  9. }
  10. }
  11. resource data {
  12. protocol C;
  13. disk {
  14. on-io-error detach;
  15. }
  16. on data-1-1 {
  17. device /dev/drbd0;
  18. disk /dev/xvdb1;
  19. address 192.168.1.6:7788;
  20. meta-disk /dev/xvdb2;
  21. }
  22. on data-1-2 {
  23. device /dev/drbd0;
  24. disk /dev/xvdb1;
  25. address 192.168.1.7:7788;
  26. meta-disk /dev/xvdb2;
  27. }
  28. }

2.5.初始化

启动前需初始化

  1. drbdadm create-md data
  2. [root@data-1-2 tools]# drbdadm create-md data
  3. initializing activity log
  4. NOT initializing bitmap
  5. Writing meta data...
  6. New drbd meta data block successfully created.

2.6.启动、关闭及查看状态

启动啦,啦,啦,检查状态

  1. drbdadm up data
  2. cat /proc/drbd
  3. drbdadm down data 关闭
  4. [root@data-1-1 tools]# drbdadm up data
  5. [root@data-1-1 tools]# cat /proc/drbd
  6. version: 8.4.6 (api:1/proto:86-101)
  7. GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by phil@Build64R6, 2015-04-09 14:35:00
  8. 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
  9. ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:999984

2.7.同步

配置同步

  1. #!!!主上操作!
  2. drbdadm -- --overwrite-data-of-peer primary data
  3. cat /proc/drbd
  4. Primary/Secondary
  1. [root@data-1-1 ~]# drbdadm -- --overwrite-data-of-peer primary data
  2. [root@data-1-1 ~]# cat /proc/drbd
  3. version: 8.4.4 (api:1/proto:86-101)
  4. GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@data-1-1, 2015-12-11 20:06:46
  5. 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
  6. ns:58112 nr:0 dw:0 dr:58784 al:0 bm:3 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:490464
  7. [=>..................] sync'ed: 11.2% (490464/548576)K
  8. finish: 0:00:08 speed: 58,112 (58,112) K/sec
  9. [root@data-1-1 ~]# cat /proc/drbd
  10. version: 8.4.4 (api:1/proto:86-101)
  11. GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@data-1-1, 2015-12-11 20:06:46
  12. 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
  13. ns:517248 nr:0 dw:0 dr:517920 al:0 bm:31 lo:0 pe:146 ua:0 ap:0 ep:1 wo:f oos:34420
  14. [=================>..] sync'ed: 94.1% (34420/548576)K
  15. finish: 0:00:00 speed: 36,724 (36,724) K/sec
  16. [root@data-1-1 ~]# cat /proc/drbd
  17. version: 8.4.4 (api:1/proto:86-101)
  18. GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@data-1-1, 2015-12-11 20:06:46
  19. 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
  20. ns:548576 nr:0 dw:0 dr:549248 al:0 bm:34 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
  21. [root@data-1-1 ~]# cat /proc/drbd
  22. version: 8.4.4 (api:1/proto:86-101)
  23. GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@data-1-1, 2015-12-11 20:06:46
  24. 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
  25. ns:548576 nr:0 dw:0 dr:549248 al:0 bm:34 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
View Code

2.8.挂载磁盘

挂载磁盘

  1. #主!!!
  2. mkfs.ext4 /dev/drbd0
  3. mkdir /data
  4. mount /dev/drbd0 /data/
  5. df -HT
  6. mount /dev/xvdb2 /mnt/
  7. #从!!!
  8. mkdir /data
  1. [root@data-1-1 tools]# mkfs.ext4 /dev/drbd0
  2. mke2fs 1.41.12 (17-May-2010)
  3. Filesystem label=
  4. OS type: Linux
  5. Block size=4096 (log=2)
  6. Fragment size=4096 (log=2)
  7. Stride=0 blocks, Stripe width=0 blocks
  8. 62592 inodes, 249995 blocks
  9. 12499 blocks (5.00%) reserved for the super user
  10. First data block=0
  11. Maximum filesystem blocks=260046848
  12. 8 block groups
  13. 32768 blocks per group, 32768 fragments per group
  14. 7824 inodes per group
  15. Superblock backups stored on blocks:
  16. 32768, 98304, 163840, 229376
  17. Writing inode tables: done
  18. Creating journal (4096 blocks): done
  19. Writing superblocks and filesystem accounting information: done
  20. This filesystem will be automatically checked every 23 mounts or
  21. 180 days, whichever comes first. Use tune2fs -c or -i to override.
  22. [root@data-1-1 tools]# mkdir /md1
  23. [root@data-1-1 tools]# mount /dev/drbd0 /md1/
  24. [root@data-1-1 tools]# df -HT
  25. Filesystem Type Size Used Avail Use% Mounted on
  26. /dev/mapper/VolGroup-lv_root ext4 49G 6.4G 40G 14% /
  27. tmpfs tmpfs 187M 0 187M 0% /dev/shm
  28. /dev/xvda1 ext4 500M 85M 389M 18% /boot
  29. /dev/drbd0 ext4 992M 1.3M 939M 1% /data
  30. [root@data-1-1 data]# mount /dev/xvdb2 /mnt/
  31. mount: you must specify the filesystem type
View Code

 

3:配合heartbeat调试drbd服务配置

联合 heartbeat 调试配置 DRBD 服务,两者结合

  1. #两台操作!
  2. /etc/init.d/heartbeat stop
  3. #后面加入内容,不能换行
  4. vim /etc/ha.d/haresources
  5. data-1-1 IPaddr::192.168.200.91/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4
  6. /etc/init.d/heartbeat start
  7. ###!!!/etc/ha.d/resource.d/IPaddr!!!
  8. ###!!!/etc/ha.d/resource.d/drbddisk!!!

 

4: 部署MySQL

快速安装 MySQL 文档

4.1.解压配置

  1. mkdir -p /home/oldsuo/tools/
  2. cd /home/oldsuo/tools/
  3. rz 上传免编译安装包
  4. ls mysql-5.5.47-linux2.6-x86_64.tar.gz
  5. tar zxf mysql-5.5.47-linux2.6-x86_64.tar.gz
  6. mkdir -p /application/
  7. mv mysql-5.5.47-linux2.6-x86_64 /application/mysql-5.5.47
  8. ln -s /application/mysql-5.5.47/ /application/mysql
  9. ls -l /application/
  10. #检查
  11. [root@data-1-1 tools]# ls -l /application/
  12. lrwxrwxrwx 1 root root 26 Dec 13 13:25 mysql -> /application/mysql-5.7.10/
  13. drwxr-xr-x 9 7161 wheel 4096 Nov 30 03:54 mysql-5.7.10

4.2.创建用户

  1. groupadd mysql
  2. useradd -g mysql -M mysql

4.3.多实例配置

  1. #杀掉进程,避免冲突,删掉启动命令。
  2. pkill mysqld
  3. ps -ef|grep mysql
  4. rm -f /etc/init.d/mysqld
  5. #上传及拷贝配置文件
  6. cd /home/oldsuo/tools/
  7. rz data.zip
  8. unzip data.zip
  9. Archive: data.zip
  10. creating: data/
  11. creating: data/3306/
  12. inflating: data/3306/my.cnf
  13. inflating: data/3306/mysql
  14. creating: data/3307/
  15. inflating: data/3307/my.cnf
  16. inflating: data/3307/mysql
  17. cp data/3306/my.cnf /data/3306/
  18. cp data/3307/my.cnf /data/3307/
  19. tree /data/
  20.  
  21. #拷贝启动文件,加执行权限
  22. cp data/3306/mysql /data/3306/
  23. cp data/3307/mysql /data/3307/
  24. chmod +x /data/3306/mysql
  25. chmod +x /data/3307/mysql
  26. tree /data/
  27. /data/ #总的多实例根目录
  28. ├── 3306 #3306实例的目录
  29. ├── my.cnf #3306实例的配置文件
  30. └── mysql #3306实例的启动文件
  31. └── 3307 #3307实例的目录
  32. ├── my.cnf #3307实例的配置文件
  33. └── mysql #3307实例的启动文件

4.3.初始化数据库,启动单实例

  1. #初始化数据库
  2. cd /application/mysql/scripts/
  3. ./mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql
  4. [root@data-1-1 ~]# /application/mysql/bin/mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql
  5. 2015-12-13 13:53:25 [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
  6. 2015-12-13 13:53:33 [WARNING] The bootstrap log isn't empty:
  7. 2015-12-13 13:53:33 [WARNING] 2015-12-13T05:53:26.040946Z 0 [Warning] --bootstrap is deprecated. Please consider using --initialize instead
  8. 2015-12-13T05:53:26.076433Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)
  9. 2015-12-13T05:53:26.076465Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000)
  10. #授权,并做替换
  11. find /data –name mysql.mysql /data
  12. sed -i 's#/usr/local/mysql#/application/mysql#g' /application/mysql/bin/mysqld_safe
  13. #启动单实例,并检查
  14. /data/3306/mysql start
  15. sleep 6
  16. lsof -i :3306

 

5: 配合heartbeat调试MySQL

  1. #两边操作,添加mysql。
  2. cp /data/3306/mysql /etc/ha.d/resource.d/
  3. chmod +x /etc/ha.d/resource.d/
  4. vim /etc/ha.d/haresources
  5. data-1-1 IPaddr::192.168.200.91/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/md1::ext4 mysql

 


还没有评论.