$30 off During Our Annual Pro Sale. View Details »

CockroachDBって何 / What is CockroachDB

linyows
March 02, 2020

CockroachDBって何 / What is CockroachDB

Mar 2, 2020 Fukuoka.go#15 でお話しした資料です。

linyows

March 02, 2020
Tweet

More Decks by linyows

Other Decks in Programming

Transcript

  1. Fukuoka.go#15 with Kagoshima Gophers
    Tomohisa Oda / Mar 2, 2020
    What isCockroachDB

    View Slide

  2. Fukuoka.go#15 with Kagoshima Gophers
    @linyows
    blog: tomohisaoda.com
    affiliation: GMO pepabo, inc.

    View Slide

  3. Fukuoka.go#15 with Kagoshima Gophers
    Private Projects
    ΞϓϦέʔγϣϯࣗ਎͕ϦϙδτϦ͔Β࠷৽ͷίʔυΛݕ
    ஌ͯࣗ͠ಈͰσϓϩΠͱσϦόϦʔΛߦ͏πʔϧ
    MJOVYͷVTFS໊લղܾΛ(JU)VCͷ5FBNϝϯόʔ΍Ϧϙδτ
    ϦͷΞΫηεݖݶऀ͔Βߦ͏πʔϧ

    View Slide

  4. Fukuoka.go#15 with Kagoshima Gophers
    ͓࿳ͼ"CockroachDBίʔυϦʔσΟϯά"͸
    "CockroachDBͬͯԿ" ʹͳΓ·ͨ͠ɻ

    View Slide

  5. Fukuoka.go#15 with Kagoshima Gophers
    CockroachDBͱ͸

    View Slide

  6. Fukuoka.go#15 with Kagoshima Gophers
    ๏ ஍ཧత෼ࢄ42-σʔλϕʔε
    ๏ 3%#ͱ/P42-ͷਐԽܥͰ͋Δ/FX42-
    ๏ ࣗಈ'BJMPWFSͱࣗಈ3FQBJS
    ๏ .VMUJ"DUJWFͳՄ༻ੑ
    ๏ 1PTUHSF42-ޓ׵ͰطଘͷυϥΠό͕࢖༻Ͱ͖Δ
    CockroachDB

    View Slide

  7. Fukuoka.go#15 with Kagoshima Gophers

    View Slide

  8. Fukuoka.go#15 with Kagoshima Gophers
    Design
    ਫฏͷεέʔϥϏϦςΟ
    ๏ ࿦ཧతʹ͸ແݶʹ૿΍ͤΔ
    ๏ ΫΤϦ෼ࢄͰ୯ҰΫΤϦΛશମత
    εϧʔϓοτ޲্
    ߴ͍ੜଘੑ
    ๏ Ϛγϯ෼ࢄɺϥοΫ෼ࢄɺ஍ཧత
    ෼ࢄ
    ๏ ࣗݾम෮ɺࣗݾෛՙόϥϯγϯά
    ڧ͍Ұ؏ੑ
    ๏ ߹ҙϕʔεͷϨϓϦέʔγϣϯ
    ๏ "$*%ηϚϯςΟΫεΛຬͨ͢෼
    ࢄτϥϯβΫγϣϯ

    View Slide

  9. Fukuoka.go#15 with Kagoshima Gophers
    ๏ 42-*OUFSGBDF͕ͩத਎͸෼ࢄ,74UPSF -FWFM%#ͷϑΥʔΫ3PDLT%#

    ๏ ςʔϒϧΛ3BOHFͱ͍͏.#Ҏ಺ͷαΠζʹͨ͠୯ҐͰ෼ׂ
    ๏ 3BOHF͕ϨϓϦέʔγϣϯͷ୯ҐͰ/PEFؒͰ4IBSEJOH͢Δ
    ๏ ϨϓϦέʔγϣϯ͸3BGUΞϧΰϦζϜͰߦ͍ɺ5SJQMJDBUFEʢ̏ॏʣߦ͑Δ
    ๏ ϨϓϦΧͷ૯਺/'ͱ͢Δͱ࠷େ'ݸͷো֐ʹ଱͑Δ
    Architecture

    View Slide

  10. Fukuoka.go#15 with Kagoshima Gophers
    SQL
    Transactional
    Distribution
    Replication
    Storage
    Client
    Foo : ID = [1, 51] Foo : ID = [51, 103] …
    Table Foo
    Index
    FooIdx
    Table Bar …
    Node1 Node2 Node3 Node4
    64M
    Ranges
    Range
    Index
    64M

    View Slide

  11. Fukuoka.go#15 with Kagoshima Gophers
    CockroachDB͕΍ͬͯ͘ΕΔ͜ͱ

    View Slide

  12. Fukuoka.go#15 with Kagoshima Gophers
    ReplicasͷϦόϥϯγϯάۉҰԽ
    $MVTUFSʹ/PEFΛ৽͘͠௥Ճ͢Δ $PDLSPBDI%#͸3BOHFΛ഑ஔ͢Δ $PDLSPBDI%#͸$MVTUFSΛۉ౳ʹ͢Δ

    View Slide

  13. Fukuoka.go#15 with Kagoshima Gophers
    ReplicasͷϦόϥϯγϯάम෮
    ো֐͕ൃੜ͠/PEFΛফࣦ͢Δ
    $PDLSPBDI%#͸3FQMJDBͷܽམΛೝࣝͯ͠
    "DUJWF/PEF্ʹϨϓϦΧΛஔ͖׵͑Δ
    ো֐͕Ұ࣌తͰ/PEF͕෮ؼͨ͠Β
    -FBTIPMEFSͱݺ͹ΕΔ3BGU-FBEFS͕
    ϨϓϦΧΛΩϟονΞοϓ͢Δ

    View Slide

  14. Fukuoka.go#15 with Kagoshima Gophers
    ๏ 51$$ϕϯνϚʔΫʹ͓͍ͯ"NB[PO"VSPSB
    ͱൺֱ͢Δͱഒͷεϧʔϓοτ͕͋Δ
    ๏ ͜ͷεϧʔϓοτ͸51$$ϥϯΩϯάͰ൪
    ໨ʹେ͖͍
    ๏ ,7 SFBE XSJUF
    Ͱ/PEF਺ͷ૿Ճʹ
    ΑͬͯτϥϯβΫγϣϯͷॲཧೳྗ͕ઢܗʹ
    ޲্͍ͯ͘͜͠ͱ͕Θ͔͍ͬͯΔ
    ๏ $PDLSPBDI%#ʹ͸ཧ࿦্ͷεέʔϦϯά੍
    ݶ͸ͳ͍ͱͷ͜ͱ
    Performance

    View Slide

  15. Fukuoka.go#15 with Kagoshima Gophers
    CockroachDBͷ࣮૷

    View Slide

  16. Fukuoka.go#15 with Kagoshima Gophers
    ๏ (P Ҏ্͸ඇਪ঑

    ๏ $DPNQJMFS͕ඞཁ 3PDLT%#΍$SZQUPɺ,FSCFSPTɺ4OBQQZͳͲʹґଘ

    ๏ (Pͷσ
    ΟϨΫτϦߏ੒͸ࢸͬͯී௨QLHʹ࣮૷͕͋Δ
    ๏ ֎෦QLH͸ఔͳͷͰن໛తʹґଘ͕গͳ͍Α͏ʹݟ͑Δ
    https://github.com/cockroachdb/cockroach
    ࣮૷ʹ͍ͭͯ
    $ tree pkg | grep .go | grep -v test.go | wc -l
    2405 // ͜ͷϑΝΠϧ਺ͰίʔυϦʔσΟϯά͢Δؾ͕ͳ͘ͳͬͨ
    $ grep 'name =' Gopkg.toml | grep -v golang | grep -v cockroach | wc -l
    20

    View Slide

  17. Fukuoka.go#15 with Kagoshima Gophers
    CockroachDBΛ͞ΘͬͯΈΔ

    View Slide

  18. Fukuoka.go#15 with Kagoshima Gophers
    ๏ IFMNͰ$PDLSPBDI%#ΫϥελΛ࡞੒ 4UBUFGVM4FUͷͭͷ1PE͕ىಈ

    helm install my-release --values my-values.yaml stable/cockroachdb
    kubectl get csr
    ๏ $PDLSPBDI%#ϊʔυͷূ໌ॻʹॺ໊͢ΔͨΊͷ$43Λঝೝ
    kubectl certificate approve default.node.my-release-cockroachdb-0
    kubectl certificate approve default.client.root
    kubectl get pv
    ๏ #VJMUJO$MJFOUͷ४උ
    kubectl create -f client-secure.yaml
    kubectl exec -it cockroachdb-client-secure -- ./cockroach sql --certs-dir=/cockroach-certs —host=my-release-cockroachdb-public
    https://www.cockroachlabs.com/docs/stable/orchestrate-a-local-cluster-with-kubernetes.html
    KubernetesΛ࢖ͬͯDemo: ४උ

    View Slide

  19. Fukuoka.go#15 with Kagoshima Gophers
    ๏ 42-ͷ࣮ߦ
    CREATE DATABASE bank;
    CREATE TABLE bank.accounts (id INT PRIMARY KEY, balance DECIMAL);
    INSERT INTO bank.accounts VALUES (1, 1000.50);
    SELECT * FROM bank.accounts;
    CREATE USER roach WITH PASSWORD 'Q7gc8rEdS';
    INSERT INTO system.role_members (role, member, "isAdmin") VALUES ('admin', 'roach', true);
    ๏ ίϯιʔϧϩάΠϯ
    kubectl port-forward my-release-cockroachdb-0 8080
    ๏ /PEF'BJMPWFSɺ/PEFͷ௥Ճɺ࡟আ
    kubectl delete pod my-release-cockroachdb-2
    helm upgrade my-release stable/cockroachdb --set statefulset.replicas=4 —reuse-values
    kubectl certificate approve default.node.my-release-cockroachdb-3
    kubectl exec -it cockroachdb-client-secure -- ./cockroach node status --certs-dir=/cockroach-certs —host=my-release-cockroachdb-public
    kubectl exec -it cockroachdb-client-secure -- ./cockroach node decommission 2 --certs-dir=/cockroach-certs —host=my-release-cockroachdb-public
    helm upgrade my-release stable/cockroachdb --set statefulset.replicas=3 --reuse-values
    https://www.cockroachlabs.com/docs/stable/orchestrate-a-local-cluster-with-kubernetes.html
    KubernetesΛ࢖ͬͯDemo: ૢ࡞

    View Slide

  20. Fukuoka.go#15 with Kagoshima Gophers
    add node to cluster
    delete a pod

    View Slide

  21. Fukuoka.go#15 with Kagoshima Gophers
    ๏ IUUQTHJUIVCDPNDPDLSPBDIECDPDLSPBDICMPCNBTUFSEPDTEFTJHONE
    ๏ IUUQTXXXDPDLSPBDIMBCTDPNEPDTTUBCMFBSDIJUFDUVSFPWFSWJFXIUNM
    ๏ IUUQTXXXDPDLSPBDIMBCTDPNEPDTTUBCMFDPDLSPBDIECJODPNQBSJTPOIUNM
    ๏ IUUQTXXXDPDLSPBDIMBCTDPNEPDTTUBCMFNVMUJBDUJWFBWBJMBCJMJUZIUNM
    ๏ IUUQTXXXDPDLSPBDIMBCTDPNCMPHMJNJUTPGUIFDBQUIFPSFN
    ๏ IUUQTXXXJOGPRDPNQSFTFOUBUJPOTDPDLSPBDIECEJTUSJCVUFETRM
    ๏ IUUQTXXXDPDLSPBDIMBCTDPNCMPHUQDDL
    ๏ IUUQTXXXDPDLSPBDIMBCTDPNEPDTTUBCMFPSDIFTUSBUFBMPDBMDMVTUFSXJUILVCFSOFUFTIUNM
    References

    View Slide

  22. Fukuoka.go#15 with Kagoshima Gophers
    Thank youaʕ⊙౪⚆ʔ

    View Slide