שימוש ב-Cassandra proxy כדי להתחבר ל-Spanner Omni

אפשר לקשר את ה-proxy של Apache Cassandra ל-Spanner Omni כדי שאפליקציות Cassandra קיימות יוכלו ליצור אינטראקציה עם Spanner Omni באמצעות Cassandra Query Language ‏(CQL). השילוב הזה מאפשר לכם להשתמש ביכולות של Spanner Omni תוך שמירה על תאימות לאפליקציות הלקוח של Cassandra.

כדי לחבר את השרת הפרוקסי, פועלים לפי השלבים הבאים:

  1. משכפלים את מאגר ה-proxy של Cassandra ל-Spanner.

  2. ממירים את ההגדרות של סכימת Cassandra לסכימת Spanner Omni באמצעות סקריפט להמרת סכימות שסופק. הסקריפט תומך במצבי אבטחה של טקסט רגיל, TLS ו-mTLS.

  3. מעדכנים את קובץ ההגדרות של מתאם ה-proxy עם נקודת הקצה של Spanner Omni והגדרות האבטחה כדי להגדיר את מתאם ה-proxy.

  4. בונים ומריצים את ה-proxy. לאחר מכן, מתחברים אליו באמצעות cqlsh כדי להתחיל בפעולות.

מידע נוסף מופיע במאמר בנושא ממשק Cassandra במסמכי התיעוד של Spanner.

לפני שמתחילים

לפני שמתחילים, צריך לעמוד בדרישות הבאות:

  • מגדירים פריסה של Spanner Omni ויוצרים מסד נתונים.

  • כדי להפעיל סשנים מרובי-ערוצים בסביבה שלכם, צריך להגדיר את משתני הסביבה הנדרשים.

  • מוודאים ש-Go מותקן במחשב המקומי.

  • כדאי לעיין במגבלות של פרוקסי Cassandra ל-Spanner כדי להבין איך להשתמש בו.

  • מגדירים את מצב האבטחה (טקסט רגיל, TLS או mTLS) שרוצים להשתמש בו לתקשורת בין ה-proxy לבין Spanner Omni.

הגדרה של משתני סביבה

כדי להשתמש ב-Cassandra proxy, צריך להגדיר את משתני הסביבה הנדרשים כדי להפעיל סשנים מרובי-ערוצים. נדרשים סשנים מרובי-ערוצים לחיבורים ל-Spanner Omni, אבל הם מושבתים כברירת מחדל בספריות הלקוח ובדרייברים של Spanner.

מגדירים את משתני הסביבה הבאים:

GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_FOR_RW=true
GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_PARTITIONED_OPS=true
GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS=true

שכפול המאגר

משכפלים את המאגר שתומך ב-Proxy ומוודאים ש-Go מותקן במחשב:

git clone https://github.com/cloudspannerecosystem/cassandra-to-spanner-proxy.git

// Ensure all Go modules are installed
go mod tidy

המרת סכימת Cassandra

יוצרים מראש את כל הטבלאות של Cassandra. הסקריפט schema_converter/cql_to_spanner_schema_converter.go ממיר שאילתות של Cassandra CREATE TABLE מקובץ CQL לשאילתות של Spanner CREATE TABLE.

  • --database DATABASE_ID: מציינים את שם מסד הנתונים של היעד ב-Spanner Omni. מחליפים את DATABASE_ID בשם מסד הנתונים.

  • --cql PATH_TO_CQL_FILE: מציינים את הנתיב לקובץ ה-CQL שמכיל את הגדרת הסכימה של Cassandra.

  • --endpoint ENDPOINT: מציינים את כתובת נקודת הקצה של Spanner Omni. מחליפים את ENDPOINT בנקודת הקצה של Spanner Omni.

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT
    

    כלי ההמרה של הסכימה תומך בכל שלושת מצבי האבטחה של Spanner Omni: טקסט פשוט, TLS ו-mTLS. כל מצב אבטחה דורש פרמטרים נוספים:

  • כדי להשתמש במצב טקסט פשוט, משתמשים בדגל --usePlainText:

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT --usePlainText
    
  • במצב TLS, משתמשים בדגל --caCertificate עם הנתיב לקובץ אישור ה-CA:

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT --caCertificate PATH_TO_CA_CRT
    
  • למצב mTLS, משתמשים בדגלים --caCertificate, --clientCertificate ו---clientKey עם הנתיבים המתאימים:

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT --caCertificate PATH_TO_CA_CRT --clientCertificate PATH_TO_CLIENT_CERT --clientKey PATH_TO_CLIENT_KEY
    

    הסקריפט גם יוצר טבלה TableConfigurations אם היא עדיין לא קיימת. בטבלה הזו מתבצע מעקב אחרי מטא-נתוני הסכימה של הטבלאות והעמודות ב-Cassandra:

    CREATE TABLE IF NOT EXISTS TableConfigurations (
        `KeySpaceName` STRING(MAX),
        `TableName` STRING(MAX),
        `ColumnName` STRING(MAX),
        `ColumnType` STRING(MAX),
        `IsPrimaryKey` BOOL,
        `PK_Precedence` INT64,
    ) PRIMARY KEY (TableName, ColumnName, KeySpaceName);
    

הגדרת מתאם ה-proxy

אחרי שיוצרים טבלאות של Cassandra באמצעות סקריפט להמרת סכימות, צריך להגדיר את המתאם כדי לבצע פעולות בטבלאות. כדי להגדיר את המתאם:

מעדכנים את הקובץ config.yaml בתיקיית השורש של המאגר עם אפשרויות ההגדרה הזמינות. בקובץ ההגדרות של המתאם צריך להגדיר את נקודת הקצה של Spanner Omni, יחד עם אפשרויות מצב האבטחה הרלוונטיות.

# [Optional] endpoint configuration for spanner
endpoint: ENDPOINT

# [Optional] If set to True, will connect to endpoint over plain text
usePlainText: False

# [Optional] CA certificate path for TLS and mTLS configuration
caCertificate: PATH_TO_CA_CRT

# [Optional] client certificate path for mTLS configuration
clientCertificate: PATH_TO_CLIENT_CERT

# [Optional] client key path for mTLS configuration
clientKey: PATH_TO_CLIENT_KEY

ההגדרה הבאה מספקת את ההגדרה המינימלית להפעלת המתאם:

cassandra_to_spanner_configs:
  # [Optional] endpoint configuration for spanner
  endpoint: ENDPOINT

  # Uncomment the options as required by the security mode of the Spanner Omni deployment
  # [Optional] If set to True, will connect to endpoint over plain text
  # usePlainText: False
  # [Optional] CA certificate path for TLS and mTLS configuration
  # caCertificate: /tmp/ca.crt
  # [Optional] client certificate path for mTLS configuration
  # clientCertificate: /tmp/client.crt
  # [Optional] client key path for mTLS configuration
  # clientKey: /tmp/client.key

listeners:
  - name: CLUSTER_NAME
    port: 9042
    spanner:
      databaseId: DATABASE_ID

בנייה והפעלה של שרת ה-Proxy

אחרי שמגדירים את מתאם ה-Proxy, יוצרים ומריצים את ה-Proxy באמצעות הפקודות הבאות:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o cassandra-to-spanner-proxy .
./cassandra-to-spanner-proxy

מתחברים לשרת ה-proxy באמצעות המעטפת עם הפקודה הבאה:

./cqlsh localhost 9042