日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
中小型企業(yè)可參考的類MySQL雙主架構(gòu)方案

在企業(yè)中,一般系統(tǒng)架構(gòu)的瓶頸會出現(xiàn)在數(shù)據(jù)庫這一部分,mysql主從架構(gòu)在很大程度上解決了這部分瓶頸,但是在mysql主從同步的架構(gòu)也存在很多問題;比如:1. 關(guān)于數(shù)據(jù)寫入部分(也就是主庫)往往很難做到擴(kuò)展,雖然很多大公司在邏輯業(yè)務(wù)方面就進(jìn)行對數(shù)據(jù)的拆分,比如商品庫存按照區(qū)域去拆分(一個(gè)區(qū)域走一個(gè)庫存也就是一個(gè)主庫,然后定時(shí)同步總的庫存),按照商品類型去劃分(一個(gè)類型的商品走一套數(shù)據(jù)庫),但是這對于很多中小型公司來說實(shí)現(xiàn)起來還是比較困難的; 2. 主從同步一般都是一個(gè)主庫,一旦主庫出現(xiàn)問題,就有可能直接導(dǎo)致整個(gè)主從同步架構(gòu)崩盤,雖然發(fā)現(xiàn)后也是可以慢慢恢復(fù)的,但是這個(gè)恢復(fù)時(shí)間對于很多公司來說是難以接受的,今天的這篇博文就是主要給解決主庫單點(diǎn)故障這個(gè)問題提供一個(gè)思路:

主要思路是:

1.一臺主庫(我們稱之為master-01)提供服務(wù),只負(fù)責(zé)數(shù)據(jù)的寫入;

2.拿出一臺數(shù)據(jù)庫服務(wù)器(我們稱之為Master-02)資源做master-01主庫的從庫(之間做主從同步);

3.兩臺主庫之間做高可用,可以采用keepalived等方案(一定要保證master-01同時(shí)也要作為keepalived的主)

4.程序在調(diào)用主庫IP地址的地方寫為高可用的VIP地址;

5.所有提供服務(wù)的從服務(wù)器與master-02進(jìn)行主從同步;

6.建議采用高可用策略的時(shí)候,當(dāng)master-01出現(xiàn)問題切換到master-02的時(shí)候,即使master-01恢復(fù)了,也不要讓它去自動承接VIP地址,否則可能造成數(shù)據(jù)的混寫;

這樣做可以在一定程度上保證主庫的高可用,在一臺主庫down掉之后,可以在極短的時(shí)間內(nèi)切換到另一臺主庫上(盡可能減少主庫宕機(jī)對業(yè)務(wù)造成的影響),減少了主從同步給線上主庫帶來的壓力;但是也有幾個(gè)不足的地方:比如master-02可能會一直處于空閑狀態(tài)(其實(shí)完全可以讓它承擔(dān)一部分從庫的角色來負(fù)責(zé)一部分查詢請求的),2. 這樣真正提供服務(wù)的從庫要等master-02先同步完了數(shù)據(jù)后才能去master-02上去同步數(shù)據(jù),這樣可能會造成一定程度的同步延遲時(shí)間的加長;3. 如果master-01一旦恢復(fù)正常,會不會導(dǎo)致數(shù)據(jù)寫入混亂(這個(gè)可以在keepalived中設(shè)置響應(yīng)的規(guī)則,讓其不”奪權(quán)”,我們認(rèn)為的去調(diào)整操作即可

架構(gòu)的簡易圖如下:

具體實(shí)施方案:

1. 在所有需要提供服務(wù)的服務(wù)器上安裝MySQL服務(wù)(建議源碼安裝)

1.1 yum安裝依賴包

 
 
  1. yum -y install cmake make gcc gcc-c++  ncurses-devel bison openssl-devel

1.2 添加MySQL所需要的用戶/組

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

1.3 下載MySQL源碼包

 
 
  1. wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.36.tar.gz 

1.4 創(chuàng)建MySQL安裝所需要的目錄

 
 
  1. mkdir /data/mydata/{data,tmp,logs} –pv 

1.5 解壓編譯安裝MySQL

 
 
  1. tar xf mysql-5.5.36.tar.gz 
  2. cd mysql-5.5.36 
  3. cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ 
  4.       -DMYSQL_DATADIR=/data/mydata/data \ 
  5.       -DSYSCINFDIR=/etc \ 
  6.       -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 
  7.       -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ 
  8.       -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 
  9.       -DWITH_READLINE=1 \ 
  10.       -DWITH_SSL=system \ 
  11.       -DWITH_ZLIB=system \ 
  12.       -DWITH_LIBWARP=0 \ 
  13.       -DWITH_UNIX_ADDR=/tmp/mysql.sock \ 
  14.       -DDEFAULT_CHARASET=uft8 \ 
  15.       -DDEFAULT_COLLATTON=utf9_general_ci \ 
  16. make && make install

1.6 為MySQL提供啟動腳本

 
 
  1. cp support-files/mysql.server /etc/rc.d/init.d/mysqld 

1.7 為master-01主庫提供配置文件(32G內(nèi)存較為保守(滿連接占用25G左右內(nèi)存)的配置文件)

 
 
  1. [client] 
  2. port = 3306 
  3. socket = /var/lib/mysql/mysql.sock 
  4. default-character-set = utf-8 
  5. [mysqld] 
  6. server-id = 1 
  7. port = 3306 
  8. user = mysql 
  9. basedir = /usr/local/mysql
  10. datadir = /data/mydata/data
  11. tmpdir = /data/mydata/tmp
  12. socket = /var/lib/mysql/mysql.sock 
  13. skip-external-locking 
  14. skip-name-resolve 
  15. default-storage-engine = INNODB 
  16. character-set-server = utf8 
  17. wait-timeout = 100 
  18. connect_timeout = 20 
  19. interactive_timeout = 100 
  20. back_log = 300 
  21. myisam_recover 
  22. event_scheduler = on 
  23. log-bin=/data/mydata/logs/mysql-bin
  24. binlog_format = row 
  25. max_binlog_size = 64M 
  26. binlog_cache_size = 1M 
  27. slave-net-timeout = 10 
  28. skip-slave-start 
  29. slow_query_log  = 1 
  30. long_query_time = 1 
  31. slow_query_log_file = /data/mydata/mysqllog/logs/mysql.slow 
  32. log-error = /data/mydata/mysqllog/logs/error.log 
  33. max_connections = 1000 
  34. max_user_connections = 1000 
  35. max_connect_errors = 10000 
  36. key_buffer_size = 32M     #以MyISAM為主的服務(wù)器,要調(diào)大此值 
  37. max_allowed_packet = 64M 
  38. table_cache = 4096 
  39. table_open_cache = 4096 
  40. table_definition_cache = 4096 
  41. sort_buffer_size = 512K        
  42. read_buffer_size = 512K        
  43. read_rnd_buffer_size = 512K    
  44. join_buffer_size = 512K        
  45. tmp_table_size = 64M       
  46. max_heap_table_size = 64M    
  47. query_cache_type = 0 
  48. query_cache_size = 0 
  49. bulk_insert_buffer_size = 16M 
  50. thread_cache_size = 64 
  51. thread_concurrency = 16       #CPU核數(shù)*2 
  52. thread_stack = 256K 
  53. innodb_data_home_dir = /data/mydata/data
  54. innodb_log_group_home_dir = /data/mydata/mysqllog/logs
  55. innodb_data_file_path = ibdata1:1G:autoextend 
  56. innodb_buffer_pool_size = 16G 
  57. innodb_buffer_pool_instances = 4                
  58. innodb_additional_mem_pool_size = 16M 
  59. innodb_log_file_size = 512M 
  60. innodb_log_buffer_size = 32M 
  61. innodb_log_files_in_group = 3 
  62. innodb_flush_log_at_trx_commit = 2 
  63. innodb_lock_wait_timeout = 10 
  64. innodb_sync_spin_loops = 40 
  65. innodb_max_dirty_pages_pct = 90 
  66. innodb_support_xa = 1 
  67. innodb_thread_concurrency = 0 
  68. innodb_thread_sleep_delay = 500 
  69. innodb_file_io_threads = 4 
  70. innodb_concurrency_tickets = 1000 
  71. log_bin_trust_function_creators = 1 
  72. innodb_flush_method = O_DIRECT  
  73. innodb_file_per_table          #是否采用單表單空間 
  74. innodb_write_io_threads = 8   
  75. innodb_read_io_threads = 8 
  76. innodb_io_capacity = 1000 
  77. innodb_file_format = Barracuda    #不開啟單表單空間,此選項(xiàng)無效 
  78. innodb_purge_threads = 1 
  79. innodb_purge_batch_size = 32 
  80. innodb_old_blocks_pct = 75 
  81. innodb_change_buffering = all 
  82. transaction_isolation = READ-COMMITTED 
  83. [mysqldump] 
  84. quick 
  85. max_allowed_packet = 32M 
  86. [mysql] 
  87. no-auto-rehash 
  88. [myisamchk] 
  89. key_buffer_size = 64M 
  90. sort_buffer_size = 256M 
  91. read_buffer = 2M 
  92. write_buffer = 2M 
  93. [mysqlhotcopy] 
  94. interactive-timeout 
  95. [mysqld_safe] 
  96. open-files-limit = 10240

1.8 為master-02提供配置文件

 
 
  1. master-02的配置文件僅需在master-01上稍作修改 
  2. server-id = 20 
  3. log_slave_updates = 1    #添加(將復(fù)制事件寫入binlog,一臺服務(wù)器既做主庫又做從庫此選項(xiàng)必須要開啟) 
  4. replicate-same-server-id=0 #添加(防止MySQL循環(huán)更新) 
  5. relay_log_recovery = 1   #添加(MySQLrelay_log的自動修復(fù)功能)

1.9 為從庫提供配置文件(8G)

 
 
  1. [client] 
  2. port = 3306 
  3. socket = /var/lib/mysql/mysql.sock 
  4. default-character-set = utf8 
  5. [mysqld] 
  6. server-id = 2 
  7. port = 3306 
  8. user = mysql 
  9. basedir = /usr/local/mysql
  10. datadir = /data/mydata/data
  11. tmpdir  = /data/mydata/tmp
  12. socket  = /var/lib/mysql/mysql.sock 
  13. skip-external-locking 
  14. skip-name-resolve 
  15. default-storage-engine = INNODB 
  16. character-set-server = utf8 
  17. wait-timeout = 100 
  18. connect_timeout = 20 
  19. interactive_timeout = 100 
  20. back_log = 300 
  21. myisam_recover 
  22. event_scheduler = on 
  23. log-bin=/data/mydata/logs/mysql-bin
  24. binlog_format = row 
  25. max_binlog_size = 64M 
  26. binlog_cache_size = 1M 
  27. slave-net-timeout = 10 
  28. relay_log_recovery = 1 
  29. slow_query_log = 1 
  30. long_query_time = 1 
  31. slow_query_log_file = /data/mydata/mysqllog/logs/mysql.slow 
  32. log-error = /data/mydata/mysqllog/logs/error.log 
  33. max_connections = 500 
  34. max_user_connections = 500 
  35. max_connect_errors = 10000 
  36. key_buffer_size = 32M     #以MyISAM為主的服務(wù)器,要調(diào)大此值 
  37. max_allowed_packet = 64M 
  38. table_cache = 2048 
  39. table_open_cache = 2048 
  40. table_definition_cache = 2048 
  41. sort_buffer_size = 128K        
  42. read_buffer_size = 128K        
  43. read_rnd_buffer_size = 128K    
  44. join_buffer_size = 128K        
  45. tmp_table_size = 16M       
  46. max_heap_table_size = 16M    
  47. query_cache_type = 0 
  48. query_cache_size = 0 
  49. bulk_insert_buffer_size = 16M 
  50. thread_cache_size = 64 
  51. thread_concurrency = 4       #CPU核數(shù)*2 
  52. thread_stack = 128K 
  53. innodb_data_home_dir = /data/mydata/data
  54. innodb_log_group_home_dir = /data/mydata/mysqllog/logs
  55. innodb_data_file_path = ibdata1:1G:autoextend 
  56. innodb_buffer_pool_size = 2G 
  57. innodb_buffer_pool_instances = 4                
  58. innodb_additional_mem_pool_size = 4M 
  59. innodb_log_file_size = 512M 
  60. innodb_log_buffer_size = 16M 
  61. innodb_log_files_in_group = 3 
  62. innodb_flush_log_at_trx_commit = 2 
  63. innodb_lock_wait_timeout = 10 
  64. innodb_sync_spin_loops = 40 
  65. innodb_max_dirty_pages_pct = 90 
  66. innodb_support_xa = 1 
  67. innodb_thread_concurrency = 0 
  68. innodb_thread_sleep_delay = 500 
  69. innodb_file_io_threads = 4 
  70. innodb_concurrency_tickets = 1000 
  71. log_bin_trust_function_creators = 1 
  72. innodb_flush_method = O_DIRECT     
  73. innodb_file_per_table                #是否采用單表單空間 
  74. innodb_write_io_threads = 8   
  75. innodb_read_io_threads = 8 
  76. innodb_io_capacity = 1000 
  77. innodb_file_format = Barracuda     #不開啟單表單空間,此選項(xiàng)無效 
  78. innodb_purge_threads = 1 
  79. innodb_purge_batch_size = 32 
  80. innodb_old_blocks_pct = 75 
  81. innodb_change_buffering = all 
  82. transaction_isolation = READ-COMMITTED 
  83. [mysqldump] 
  84. quick 
  85. max_allowed_packet = 32M 
  86. [mysql] 
  87. no-auto-rehash 
  88. [myisamchk] 
  89. key_buffer_size = 64M 
  90. sort_buffer_size = 256M 
  91. read_buffer = 2M 
  92. write_buffer = 2M 
  93. [mysqlhotcopy] 
  94. interactive-timeout 
  95. [mysqld_safe] 
  96. open-files-limit = 10240

1.10 初始化MySQL

 
 
  1. /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mydata/data/ --basedir=/usr/local/mysql 

1.11 為啟動腳本賦予可執(zhí)行權(quán)限并啟動MySQL

 
 
  1. chmod +x /etc/rc.d/init.d/mysqld
  2. /etc/init.d/mysqld start

2. 配置master-01

2.1 添加主從同步賬戶

 
 
  1. mysql> grant replication slave on *.* to 'repl'@'192.168.237.%' idetified by '123456'; 
  2. mysql> flush privileges;

2.2 查看主庫的狀態(tài)

 
 
  1. mysql> show master status; 
  2. +------------------+----------+--------------+------------------+ 
  3. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  4. +------------------+----------+--------------+------------------+ 
  5. | mysql-bin.000009 |      652 |              |                  | 
  6. +------------------+----------+--------------+------------------+ 
  7. 1 row in set (0.01 sec)

2.3 因?yàn)檫@是測試環(huán)境,可以保證沒數(shù)據(jù)寫入,否則需要先鎖表-->查看狀態(tài)-->備份數(shù)據(jù)-->查看狀態(tài)(保證沒變)-->解鎖表

3. 配置master-02

3.1 配置master-02為master-01的從

 
 
  1. #若是線上有數(shù)據(jù)需要先導(dǎo)入數(shù)據(jù) 
  2. mysql> CHANGE MASTER TO 
  3.   -> MASTER_HOST='192.168.237.128', 
  4.   -> MASTER_PORT=3306, 
  5.   -> MASTER_USER='repl', 
  6.   -> MASTER_PASSWORD='123456', 
  7.   -> MASTER_LOG_FILE='mysql-bin.000009', 
  8.   -> MASTER_LOG_POS=652; 
  9. Query OK, 0 rows affected (0.03 sec) 
  10. mysql> start slave; 
  11. mysql> show slave status \G 
  12.    Slave_IO_Running: Yes   #確保為yes 
  13.    Slave_SQL_Running: Yes  #確保為yes

3.2 配置master-02的同步用戶

 
 
  1. mysql> grant replication slave on *.* to 'repl’@’192.168.237.%' identified by '123456'; 
  2. mysql> flush privileges;

3.3 查看master-02的狀態(tài)

 
 
  1. mysql> show master status; 
  2. +------------------+----------+--------------+------------------+ 
  3. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  4. +------------------+----------+--------------+------------------+ 
  5. | mysql-bin.000004 |      689 |              |                  | 
  6. +------------------+----------+--------------+------------------+ 
  7. 1 row in set (0.00 sec)

4. 從庫根據(jù)上面步驟配置為master-02的從即可(為了節(jié)省篇幅不再一一贅述)

5. 在master-01上創(chuàng)建一個(gè)數(shù)據(jù)庫測試同步效果

6. 去master-02跟從庫上分別查看是否已經(jīng)同步過數(shù)據(jù)來

好了,至此數(shù)據(jù)同步已經(jīng)完成,關(guān)于keepalived實(shí)現(xiàn)雙主高可用,我會在下篇keepalived實(shí)現(xiàn)MySQL高可用總給大家寫出!!!

博文鏈接:http://yanshisan.blog./7879234/1393063


網(wǎng)站欄目:中小型企業(yè)可參考的類MySQL雙主架構(gòu)方案
路徑分享:http://www.dlmjj.cn/article/ccoipoc.html