การติดตั้ง MySQL Group Replication (Master-Master)


0

ฉันกำลังจะเริ่มทดสอบการตั้งค่าหลักโดยใช้การจำลองแบบกลุ่ม MySQL ฉันได้ตั้งค่าเครื่องจักร 2 (จนถึง) น่าจะเป็นหนึ่งในสาม พวกเขาทั้งสองมี 2 นิคส์หนึ่งสำหรับการเข้าถึงแอปพลิเคชันและหนึ่งที่มีเพียง LAN IP สำหรับการสื่อสารระหว่างโหนด

ฉันเห็นในเอกสารบางฉบับที่กล่าวถึงโดยใช้ NIC สองรายการหนึ่งรายการสำหรับการส่งระหว่างโหนดและอีกรายการสำหรับการสื่อสารกับแอป ฉันมาถึงจุดที่ฉันแก้ไขไฟล์ /etc/mysql/my.cnf แล้ว ฉันต้องเข้าใจการตั้งค่าเหล่านี้:

สมมติว่าแอปพลิเคชันของฉันมี ip เท่ากับ 10.3.0.4 และ LAN เท่านั้น NIC มี 10.3.1.4 การตั้งค่าเดียวกันบนเครื่อง 2

bind-address = "10.3.0.4"
report_host = "10.3.??" ??
loose-group_replication_local_address = "10.3.1.4:33061"

IP ของโฮสต์รายงานรายใดเป็นของใคร ฉันรวบรวมว่า Loose-group_replication_local_address นั้นเป็นที่อยู่อื่นที่เชื่อมโยง แต่สำหรับการสื่อสารระหว่างโหนด แต่ฉันไม่สามารถหาตัวอย่างของการตั้งค่าแบบ Multi-Nic ที่จัดการกับการตั้งค่าเหล่านี้ได้ บทเรียนทั้งหมดที่มีบรรทัดเหล่านี้แสดงการใส่ ip เดียวกันเนื่องจากมีเพียงนิคเดียว

สภาพแวดล้อม: Ubuntu 16.04 ใน Azure

ฉันทำตามคำแนะนำนี้เพื่อติดตั้ง: https://www.digitalocean.com/community/tutorials/how-to-configure-mysql-group-replication-on-ubuntu-16-04

บิตเกี่ยวกับนิคส์คู่มาจากส่วนต่าง ๆ ประมาณ 6 หน้า

แก้ไข: @roothann ทำให้ฉันตรงกับสิ่งที่โฮสต์รายงานควรทำ ตอนนี้ฉันมีปัญหาใหม่เมื่อ mysql รีสตาร์ทพอร์ต 33061 จะไม่แสดงขึ้นใน netstat และฉันได้รับข้อผิดพลาดนี้ในบันทึก: "การรับชื่อเพื่อนล้มเหลวขณะเชื่อมต่อกับเซิร์ฟเวอร์ 10.3.1.5 โดยมีข้อผิดพลาด 111 - การเชื่อมต่อปฏิเสธ [GCS] ข้อผิดพลาดในการเปิดการเชื่อมต่อกับ 10.3.1.5:33061 บนพอร์ตในเครื่อง: 33061. ข้อผิดพลาด = 0 "ความคิดใด ๆ ฉันได้เพิ่มปลั๊กอิน group_replication แต่เมื่อฉันทำคำสั่งนี้: mysql> เริ่ม GROUP_REPLICATION; ข้อผิดพลาด 3096 (HY000): คำสั่ง START GROUP_REPLICATION ล้มเหลวเนื่องจากมีข้อผิดพลาดเมื่อเริ่มต้นเลเยอร์การสื่อสารกลุ่ม

นั่นคือสิ่งที่ทำให้ฉันตรวจสอบบันทึกและดูที่ netstat

แก้ไขอีก: ตามที่ระบุไว้ด้านล่างด้วยเหตุผลบางอย่างคำสั่งติดตั้งที่ปลอดภัยไม่ได้ลบคำสั่งที่จะใช้การเชื่อมต่อในประเทศเท่านั้น นั่นคือการแก้ไข ปัญหาใหม่คือข้อมูลไม่ได้ซิงค์ โหนดที่สองดึงตัวเองออกจากกลุ่มเนื่องจากไม่สามารถกู้คืนได้สำเร็จ

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | f0bcfc98-4255-11e8-b39f-000d3a1db637 | 10.3.1.4    |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+

ดังนั้นด้วยเหตุผลบางอย่างการจำลองแบบกำลังพยายามที่จะเกิดขึ้นในส่วนต่อประสาน LAN แต่บนพอร์ต mysql ปกติแทนที่จะเป็น 33061 ฉันพยายามแก้ไขปัญหานี้และได้รับสิ่งนี้:

mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PORT=33061, MASTER_PASSWORD='the password' FOR CHANNEL 'group_replication_recovery';

ERROR 3139 (HY000): CHANGE MASTER with the given parameters cannot be performed on channel 'group_replication_recovery'.

แก้ไข 17 พฤษภาคม: ฉันสร้างคลัสเตอร์ใหม่อีกครั้งตั้งแต่เริ่มต้นคราวนี้ด้วย 3 เครื่อง ยังคงเป็นปัญหาเดียวกัน โหนดแรกเกิดขึ้น เพิ่มอีกสองรายการเช่นกัน แต่แสดงเฉพาะการกู้คืนจากนั้นจะถูกลบออกจากคลัสเตอร์

บนโหนดแรกฉันจะได้รับสิ่งนี้ในบันทึก:

2018-05-17T14:37:21.859153Z 27 [System] [MY-010597] [Repl] 'CHANGE MASTER TO FOR CHANNEL 'group_replication_recovery' executed'. Previous state master_host='', master_port= 3306, master_log_file='', master_log_pos= 4, master_bind=''. New state master_host='', master_port= 3306, master_log_file='', master_log_pos= 4, master_bind=''.

+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 38d4aa76-592f-11e8-814a-000d3a60e580 | 10.7.1.11   |       33061 | RECOVERING   | PRIMARY     | 8.0.11         |
| group_replication_applier | 3dbbb30f-592f-11e8-8fc7-000d3a603364 | 10.7.1.12   |       33061 | RECOVERING   | PRIMARY     | 8.0.11         |
| group_replication_applier | b0ff0148-592e-11e8-aa03-000d3a60e4cc | 10.7.1.10   |       33061 | ONLINE       | PRIMARY     | 8.0.11         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)

ฉันได้รับสิ่งนี้ในบันทึกจากเซิร์ฟเวอร์อื่น:

2018-05-17T14:57:17.970789Z 18 [ERROR] [MY-011583] [Repl] Plugin group_replication reported: 'For details please check performance_schema.replication_connection_status table and error log messages of Slave I/O for channel group_replication_recovery.'
2018-05-17T14:58:18.023898Z 18 [System] [MY-010597] [Repl] 'CHANGE MASTER TO FOR CHANNEL 'group_replication_recovery' executed'. Previous state master_host='10.7.1.10', master_port= 33061, master_log_file='', master_log_pos= 4, master_bind=''. New state master_host='10.7.1.10', master_port= 33061, master_log_file='', master_log_pos= 4, master_bind=''.

ฉันสังเกตเห็นว่าในโหนดแรกตัวแปร master_host ว่างเปล่าในขณะที่สองมันเต็มไปด้วย ip ของหลัก ตอนนี้เนื่องจากพวกเขาทุกคนควรจะเป็นปรมาจารย์หลักไม่ควรมีบางอย่างเช่นกัน?

ขอบคุณล่วงหน้า!


report_host เป็นสตริงที่คุณเพิ่งกำหนดตามที่คุณต้องการ คุณกำลังพูดถึง InnoDB Cluster จาก GA 5.7 หรือไม่ ถ้าเป็นเช่นนั้นคุณใช้ mysqlsh เพื่อ bootstrap หรือไม่
roothahn

@roothahn ฉันไม่แน่ใจว่าฉันเพียงแค่ติดตามการกวดวิชานั้นมันไม่ได้พูดอะไรเกี่ยวกับ innodb โดยเฉพาะ นอกจากนี้ฉันไม่คิดว่า report_host เป็นแบบสุ่ม มันจะต้องเป็นทั้ง IP สำหรับที่อยู่ผูกหรือที่อยู่ในท้องถิ่นตัวแทน ฉันพยายามหาว่าอันไหน
บรูซ

ฉันไม่ได้บอกว่ามันเป็นการสุ่ม (ไม่ควรเปลี่ยนให้ชัดเจน) แต่สตริงที่คุณกำหนดมักจะเป็นชื่อโฮสต์หรือ IP ของทาส (เพื่อให้คุณสามารถระบุได้ผ่าน SHOW SLAVE HOSTS บนต้นแบบ) แต่ถ้าคุณกำหนดสตริงหรือนามแฝงที่ไม่ใช่ชื่อโฮสต์ก็ไม่เป็นไรเช่นกัน ไม่เกี่ยวข้องกับ bind_address
roothahn

@roothahn ตกลงนั่นทำให้เข้าใจได้มากกว่า ฉันไปกับ IP ของ nic เฉพาะ LAN เพราะนั่นเป็นวิธีที่โหนดคุยกัน ปัญหาใหม่และฉันจะแก้ไขโพสต์หลักเช่นกันคือเมื่อ mysql รีสตาร์ทพอร์ต 33061 จะไม่ปรากฏใน netstat และฉันได้รับข้อผิดพลาดนี้: "การรับชื่อเพื่อนล้มเหลวขณะเชื่อมต่อกับเซิร์ฟเวอร์ 10.3 1.5 ที่มีข้อผิดพลาด 111 - การเชื่อมต่อถูกปฏิเสธ [GCS] ข้อผิดพลาดในการเปิดการเชื่อมต่อกับ 10.3.1.5:33061 บนพอร์ตในเครื่อง: 33061. ข้อผิดพลาด = 0 "มีความคิดเห็นอะไรบ้าง?
บรูซ

บางที my.cnf ของคุณอาจไม่มีค่าสำหรับ Loose-group_replication_group_seeds (รายการที่คั่นด้วยจุลภาคของ ip: พอร์ตรวมกันของโหนดทั้งหมดในคลัสเตอร์) นั่นคือจุดที่ฉันกำหนด 13306
roothahn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.