自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL系列-Docker搭建Percona XtraDB Cluster(圖文)

數(shù)據(jù)庫 MySQL
本篇帶給大家MySQL系列之Docker搭建Percona XtraDB Cluster,希望能夠幫助到你!

一、部署環(huán)境說明

本文中使用本地VM虛機(jī)部署測(cè)試。

OS:CentOS Linux release 7.6.1810 (Core) 3.10.0-957.el7.x86_64

IP:192.168.168.100

Docker Version:v20.10.6

虛機(jī)配置:2核CPU、4G內(nèi)存

注:①系統(tǒng)為最小化安裝,部署前已完成系統(tǒng)初始化、內(nèi)核及安全優(yōu)化;

②Docker已安裝。

二、Docker部署PXC

Docker鏡像倉庫地址:

https://hub.docker.com/r/percona/percona-xtradb-cluster

Docker部署官方說明文檔:

https://www.percona.com/doc/percona-xtradb-cluster/LATEST/install/docker.html

1.拉取鏡像

  1. docker pull percona/percona-xtradb-cluster:5.7.33 

## 使用 tag 給他打個(gè)標(biāo)簽,方便使用

  1. docker tag percona/percona-xtradb-cluster:5.7.33 pxc:5.7.33 

## 刪除之前的鏡像

  1. docker rmi -f percona/percona-xtradb-cluster:5.7.33 

2.設(shè)置網(wǎng)絡(luò)

## 創(chuàng)建一個(gè)網(wǎng)絡(luò)專門給 pxc 進(jìn)行使用

  1. docker network create --subnet=10.8.0.0/24 pxc-net 

## 查看創(chuàng)建好的網(wǎng)絡(luò)信息

  1. docker network ls 

 

3.持久化存儲(chǔ)

## 創(chuàng)建三個(gè) volume 給容器使用

  1. docker volume create --name data1 
  2. docker volume create --name data2 
  3. docker volume create --name data3 

 ## 查看已創(chuàng)建的存儲(chǔ)卷信息

  1. docker volume ls 

 

## 查看存儲(chǔ)卷詳情

  1. docker volume inspect data1 

 

4.構(gòu)建容器并形成集群關(guān)系

  1. ##node1 
  2. docker run -d --restart always -p 3301:3306 \ 
  3.  -v data1:/var/lib/mysql \ 
  4.  -e MYSQL_ROOT_PASSWORD=test20210425 \ 
  5.  -e CLUSTER_NAME=pxc \ 
  6.  -e XTRABACKUP_PASSWORD=test20210425 \ 
  7.  --net=pxc-net --privileged \ 
  8.  --ip 10.8.0.2 --name node1 pxc:5.7.33  
  9. ##node2 
  10. docker run -d --restart always -p 3302:3306 \ 
  11.  -v data2:/var/lib/mysql \ 
  12.  -e MYSQL_ROOT_PASSWORD=test20210425 \ 
  13.  -e CLUSTER_NAME=pxc \  
  14.  -e XTRABACKUP_PASSWORD=test20210425 \ 
  15.  -e CLUSTER_JOIN=node1 \ 
  16.  --net=pxc-net --privileged \ 
  17.  --ip 10.8.0.3 --name node2 pxc:5.7.33  
  18. ##node3 
  19. docker run -d --restart always -p 3303:3306 \ 
  20.  -v data3:/var/lib/mysql \ 
  21.  -e MYSQL_ROOT_PASSWORD=test20210425 \ 
  22.  -e CLUSTER_NAME=pxc \ 
  23.  -e XTRABACKUP_PASSWORD=test20210425 \ 
  24.  -e CLUSTER_JOIN=node1 \ 
  25.  --net=pxc-net --privileged \ 
  26.  --ip 10.8.0.4 --name node3 pxc:5.7.33 

 ## 部分參數(shù)說明

  1. ①CLUSTER_JOIN:形成集群關(guān)系  
  2. ②MYSQL_ROOT_PASSWORD:用戶root密碼  
  3. ③CLUSTER_NAME:集群名稱  
  4. ④XTRABACKUP_PASSWORD:數(shù)據(jù)備份密碼  
  5. ⑤privileged:指定最高優(yōu)先級(jí)。標(biāo)識(shí)容器內(nèi)的root擁有真正的root權(quán)限,否則root只是一個(gè)普通用戶  
  6. ⑥net:所處網(wǎng)段,pxc-net為創(chuàng)建網(wǎng)段 

 ## 查看容器

  1. docker ps -a 

 

5.驗(yàn)證

①驗(yàn)證集群是否可用

##訪問MySQL客戶端(任意節(jié)點(diǎn))

  1. docker exec -it node1 /usr/bin/mysql -uroot -p  
  2. //輸入上述設(shè)置的root密碼登錄MySQL 

 ## 查看wsrep狀態(tài)變量(部分變量截圖)

  1. show status like 'wsrep%'

 

  1. +----------------------------------+-------------------------------------------------------+ 
  2. | Variable_name                    | Value                                                 | 
  3. +----------------------------------+-------------------------------------------------------+ 
  4. | wsrep_local_state_uuid           | f9d0df93-a995-11eb-8057-e2d1b05bbeb4                  | 
  5. | wsrep_protocol_version           | 9                                                     | 
  6. | wsrep_last_applied               | 18                                                    | 
  7. | wsrep_last_committed             | 18                                                    | 
  8. | wsrep_replicated                 | 0                                                     | 
  9. | wsrep_replicated_bytes           | 0                                                     | 
  10. | wsrep_repl_keys                  | 0                                                     | 
  11. | wsrep_repl_keys_bytes            | 0                                                     | 
  12. | wsrep_repl_data_bytes            | 0                                                     | 
  13. | wsrep_repl_other_bytes           | 0                                                     | 
  14. | wsrep_received                   | 16                                                    | 
  15. | wsrep_received_bytes             | 1876                                                  | 
  16. | wsrep_local_commits              | 0                                                     | 
  17. | wsrep_local_cert_failures        | 0                                                     | 
  18. | wsrep_local_replays              | 0                                                     | 
  19. | wsrep_local_send_queue           | 0                                                     | 
  20. | wsrep_local_send_queue_max       | 1                                                     | 
  21. | wsrep_local_send_queue_min       | 0                                                     | 
  22. | wsrep_local_send_queue_avg       | 0.000000                                              | 
  23. | wsrep_local_recv_queue           | 0                                                     | 
  24. | wsrep_local_recv_queue_max       | 2                                                     | 
  25. | wsrep_local_recv_queue_min       | 0                                                     | 
  26. | wsrep_local_recv_queue_avg       | 0.187500                                              | 
  27. | wsrep_local_cached_downto        | 0                                                     | 
  28. | wsrep_flow_control_paused_ns     | 0                                                     | 
  29. | wsrep_flow_control_paused        | 0.000000                                              | 
  30. | wsrep_flow_control_sent          | 0                                                     | 
  31. | wsrep_flow_control_recv          | 0                                                     | 
  32. | wsrep_flow_control_interval      | [ 173, 173 ]                                          | 
  33. | wsrep_flow_control_interval_low  | 173                                                   | 
  34. | wsrep_flow_control_interval_high | 173                                                   | 
  35. | wsrep_flow_control_status        | OFF                                                   | 
  36. | wsrep_flow_control_active        | false                                                 | 
  37. | wsrep_flow_control_requested     | false                                                 | 
  38. | wsrep_cert_deps_distance         | 0.000000                                              | 
  39. | wsrep_apply_oooe                 | 0.000000                                              | 
  40. | wsrep_apply_oool                 | 0.000000                                              | 
  41. | wsrep_apply_window               | 0.000000                                              | 
  42. | wsrep_commit_oooe                | 0.000000                                              | 
  43. | wsrep_commit_oool                | 0.000000                                              | 
  44. | wsrep_commit_window              | 0.000000                                              | 
  45. | wsrep_local_state                | 4                                                     | 
  46. | wsrep_local_state_comment        | Synced                                                | 
  47. | wsrep_cert_index_size            | 0                                                     | 
  48. | wsrep_cert_bucket_count          | 22                                                    | 
  49. | wsrep_gcache_pool_size           | 1576                                                  | 
  50. | wsrep_causal_reads               | 0                                                     | 
  51. | wsrep_cert_interval              | 0.000000                                              | 
  52. | wsrep_open_transactions          | 0                                                     | 
  53. | wsrep_open_connections           | 0                                                     | 
  54. | wsrep_ist_receive_status         |                                                       | 
  55. | wsrep_ist_receive_seqno_start    | 0                                                     | 
  56. | wsrep_ist_receive_seqno_current  | 0                                                     | 
  57. | wsrep_ist_receive_seqno_end      | 0                                                     | 
  58. | wsrep_incoming_addresses         | 1d475a8c4011:3306,c315e1e4f978:3306,883260fe6518:3306 | 
  59. | wsrep_cluster_weight             | 3                                                     | 
  60. | wsrep_desync_count               | 0                                                     | 
  61. | wsrep_evs_delayed                |                                                       | 
  62. | wsrep_evs_evict_list             |                                                       | 
  63. | wsrep_evs_repl_latency           | 0/0/0/0/0                                             | 
  64. | wsrep_evs_state                  | OPERATIONAL                                           | 
  65. | wsrep_gcomm_uuid                 | 04954080-a996-11eb-bbb9-9319a5bdf715                  | 
  66. | wsrep_gmcast_segment             | 0                                                     | 
  67. | wsrep_cluster_conf_id            | 5                                                     | 
  68. | wsrep_cluster_size               | 3                                                     | 
  69. | wsrep_cluster_state_uuid         | f9d0df93-a995-11eb-8057-e2d1b05bbeb4                  | 
  70. | wsrep_cluster_status             | Primary                                               | 
  71. | wsrep_connected                  | ON                                                    | 
  72. | wsrep_local_bf_aborts            | 0                                                     | 
  73. | wsrep_local_index                | 0                                                     | 
  74. | wsrep_provider_name              | Galera                                                | 
  75. | wsrep_provider_vendor            | Codership Oy <info@codership.com>                     | 
  76. | wsrep_provider_version           | 3.49(r0ef0d79)                                        | 
  77. | wsrep_ready                      | ON                                                    | 
  78. +----------------------------------+-------------------------------------------------------+ 

 說明:wsrep_ready:狀態(tài)監(jiān)控項(xiàng),可以知道當(dāng)前節(jié)點(diǎn)的狀態(tài)是不是可以撫慰,正常情況下為ON,如果變?yōu)镺FF,則可能是發(fā)生了腦裂,或者和其他節(jié)點(diǎn)之間的網(wǎng)絡(luò)連不上,又或者是galera集群沒有正常啟動(dòng)等;一般可以通過命令set global wsrep_provider_options='pc.bootstrap=yes' 來恢復(fù),不過在執(zhí)行這個(gè)命令之后,需要觀察整個(gè)集群的狀態(tài),不然可能會(huì)導(dǎo)致這個(gè)節(jié)點(diǎn)在邏輯上脫離集群。這個(gè)命令的作用就是讓當(dāng)前節(jié)點(diǎn)變?yōu)閜rimary,如果執(zhí)行了,則說明確定要使用這個(gè)節(jié)點(diǎn)來提供服務(wù)了。

②使用Naticat工具連接進(jìn)行驗(yàn)證

注:構(gòu)建容器時(shí)映射的端口防火墻默認(rèn)已放開。

## 在 node1 中創(chuàng)建一個(gè) test 庫

## 查看 node2 和 node3

可看到數(shù)據(jù)進(jìn)行了同步,至此 pxc 的搭建就完成了。

三、Docker部署HaProxy

搭建好了 pxc 之后,每次訪問的是哪個(gè)數(shù)據(jù)庫,可以通過 haproxy 進(jìn)行路由,類似 nginx,如果 node1 資源不是很多了,可以將請(qǐng)求分發(fā)到 node2 或者 node3 當(dāng)中。

Docker鏡像倉庫地址:

https://hub.docker.com/_/haproxy

1.拉取鏡像

  1. docker pull haproxy 

2.創(chuàng)建配置文件

## 創(chuàng)建haproxy的配置文件,映射到容器中

  1. mkdir -p /data/haproxy 
  2. vi /data/haproxy/haproxy.cfg 

 ## 在配置文件中輸入以下內(nèi)容

  1. global 
  2.     #工作目錄,這邊要和創(chuàng)建容器指定的目錄對(duì)應(yīng) 
  3.     chroot /usr/local/etc/haproxy 
  4.     #日志文件 
  5.     log 127.0.0.1 local5 info 
  6.     #守護(hù)進(jìn)程運(yùn)行 
  7.     daemon 
  8.  
  9. defaults 
  10.     log global 
  11.     mode    http 
  12.     #日志格式 
  13.     option  httplog 
  14.     #日志中不記錄負(fù)載均衡的心跳檢測(cè)記錄 
  15.     option  dontlognull 
  16.     #連接超時(shí)(毫秒) 
  17.     timeout connect 5000 
  18.     #客戶端超時(shí)(毫秒) 
  19.     timeout client  50000 
  20.     #服務(wù)器超時(shí)(毫秒) 
  21.     timeout server  50000 
  22.  
  23.     #監(jiān)控界面    
  24.     listen  admin_stats 
  25.     #監(jiān)控界面的訪問的IP和端口 
  26.     bind  0.0.0.0:8888 
  27.     #訪問協(xié)議 
  28.     mode        http 
  29.     #URI相對(duì)地址 
  30.     stats uri   /dbs_monitor 
  31.     #統(tǒng)計(jì)報(bào)告格式 
  32.     stats realm     Globalstatistics 
  33.     #登陸帳戶信息 
  34.     stats auth  admin:admin123456 
  35.     #數(shù)據(jù)庫負(fù)載均衡 
  36.     listen  proxy-mysql 
  37.     #訪問的IP和端口,haproxy開發(fā)的端口為3306 
  38.     #假如有人訪問haproxy的3306端口,則將請(qǐng)求轉(zhuǎn)發(fā)給下面的數(shù)據(jù)庫實(shí)例 
  39.     bind  0.0.0.0:3306   
  40.     #網(wǎng)絡(luò)協(xié)議 
  41.     mode  tcp 
  42.     #負(fù)載均衡算法(輪詢算法) 
  43.     #輪詢算法:roundrobin 
  44.     #權(quán)重算法:static-rr 
  45.     #最少連接算法:leastconn 
  46.     #請(qǐng)求源IP算法:source  
  47.     balance  roundrobin 
  48.     #日志格式 
  49.     option  tcplog 
  50.     #在MySQL中創(chuàng)建一個(gè)沒有權(quán)限的haproxy用戶,密碼為空。 
  51.     #Haproxy使用這個(gè)賬戶對(duì)MySQL數(shù)據(jù)庫心跳檢測(cè) 
  52.     option  mysql-check user haproxy 
  53.     server  MySQL_1 10.8.0.2:3306 check weight 1 maxconn 2000   
  54.     server  MySQL_2 10.8.0.3:3306 check weight 1 maxconn 2000   
  55.     server  MySQL_3 10.8.0.4:3306 check weight 1 maxconn 2000  
  56.     #使用keepalive檢測(cè)死鏈 
  57.     option  tcpka 

 3.構(gòu)建容器

  1. docker run -d --restart always \ 
  2.  -p 3306:3306 -p 8888:8888 \ 
  3.  -v /data/haproxy:/usr/local/etc/haproxy \ 
  4.  --name haproxy01 \ 
  5.  --net=pxc-net --privileged haproxy 

 4.查看容器

  1. docker ps -a |grep haproxy 

 

5.驗(yàn)證

①查看監(jiān)控頁面

瀏覽器訪問

http://host:port/dbs_monitor,本文中為http://192.168.168.100:8888/dbs_monitor,賬號(hào)/密碼:admin/admin123456

## 登錄之后可以發(fā)現(xiàn) MYSQL 幾個(gè)節(jié)點(diǎn)都是DOWN狀態(tài)的,這需要在容器內(nèi)部啟動(dòng)haproxy服務(wù)。

②啟動(dòng)haproxy服務(wù)

## 進(jìn)入haproxy容器內(nèi)啟動(dòng)服務(wù)

  1. docker exec -it haproxy01 /bin/bash  
  2. haproxy -f /usr/local/etc/haproxy/haproxy.cfg & 

 

③創(chuàng)建haproxy用戶并授權(quán)

## 進(jìn)入任一數(shù)據(jù)庫容器內(nèi)操作(或在Naticat工具端操作)

  1. docker exec -it node1 /bin/bash  
  2. mysql -uroot -p  
  3. //輸入密碼登錄 

 

  1. use mysql; 
  2. CREATE USER 'haproxy'@'%' IDENTIFIED BY '';    //空密碼 
  3. flush privileges

 

④刷新監(jiān)控頁面

## 刷新頁面后,3個(gè)節(jié)點(diǎn)都是 up 狀態(tài)

## 同時(shí)可以使用3306端口在 navicat 進(jìn)行連接了

## 點(diǎn)擊“測(cè)試連接”

## 連接成功如下圖所示,即可在Navicat工具上進(jìn)行創(chuàng)建\刪除用戶、數(shù)據(jù)庫等其他操作,無需進(jìn)入容器操作。

 

責(zé)任編輯:姜華 來源: 今日頭條
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)