Jira DataCenter - apa itu? Bagaimana cara kerjanya? Bagaimana cara menggunakan?

Pendahuluan


Dengan penyebaran filosofi Agile, spesialis IT Rusia setiap tahun mendapatkan semakin banyak keahlian dan kompetensi di bidang kustomisasi produk dan manajemen untuk tim pengembangan, yang paling populer di antaranya masih Jira. Namun, bekerja dengan versi tertua, paling produktif dan sangat mudah diakses - Pusat Data Jira - masih menimbulkan banyak pertanyaan. Dalam posting ini saya akan berbicara tentang beberapa prinsip dan mekanisme Jira DataCenter yang kami terapkan dalam praktik. Saya akan mulai dengan cerita tentang struktur cluster Jira.

Apa itu Jira DataCenter?


Jira DataCenter pada dasarnya adalah versi server, tetapi dengan kemampuan untuk menggunakan database umum dan indeks bersama.

Penting untuk dipahami bahwa Jira DataCenter itu sendiri, sebagai produk dan sebagai aplikasi, TIDAK memberikan toleransi kesalahan dan penyeimbangan muatan. Modul dan sistem bertanggung jawab untuk ini, di mana produk Atlassian tidak memiliki hubungan.

Dengan kata lain, Atlassian memberikan dukungan untuk bekerja dalam sebuah cluster, tetapi clustering itu sendiri diimplementasikan dengan cara eksternal, pilihan yang cukup kaya.

Deskripsi produk terperinci tersedia di situs web Atlassian .

Ada beberapa opsi konstruksi:

1. Pada infrastruktur sendiri
2. Di Amazon Cloud (AWS)
3. Di awan MS (Azure)

Artikel ini akan menjelaskan solusi untuk infrastruktur Anda sendiri.

Masalah apa yang dipecahkan oleh Jira DataCenter?


Jira Data Center membantu Anda mencapai tujuan berikut:

  1. Penerapan toleransi kesalahan.
  2. Memastikan operasi yang stabil di bawah beban tinggi. Beban tinggi mengacu pada contoh skala besar / perusahaan, menurut Panduan Ukuran Jira .
  3. Memastikan pengoperasian terus menerus saat pemeliharaan diperlukan. Pada titik ini saya akan tinggal secara terpisah. Aplikasi sering kali perlu diperbarui dan tidak semua perusahaan memiliki kemampuan untuk melakukan ini dengan cepat dan tidak terlihat oleh pengguna. Masalah ini diselesaikan dengan mengelompokkan dan menggunakan skema pembaruan Downtime Nol yang disebut.

Masalah-masalah ini ditangani melalui pengelompokan dan arsitektur yang dapat diskalakan.

Apa saja komponen dari Jira DataCenter?


Seperti yang Anda lihat pada gambar di bawah ini, Jira DataCenter cluster adalah kumpulan dari beberapa mesin khusus.

gambar
Gambar 1. Arsitektur Pusat Data Jira

  1. Node aplikasi (Node aplikasi atau node cluster). Mereka menerima dan memproses semua beban kerja dan permintaan. Peran node dimainkan oleh server biasa, dengan konten yang identik dan aplikasi yang diinstal, serta sistem file bersama yang dipasang.
  2. Sistem file (sistem file bersama) dengan fitur standar untuk mengimpor / mengekspor file, plugin, caching, dan sebagainya. Server file juga merupakan server terpisah tempat folder atau sumber daya bersama dibuat, yang dipasang ke node dan digunakan untuk file bersama.
  3. Basis data bersama Server database juga, dalam hal ini, server terpisah dan dapat dibangun di atas MS SQL, PostgreSQL, MySQL, Oracle.
  4. Load balancer Ini mendistribusikan permintaan pengguna dan mengirimkannya ke node, dan jika salah satu dari mereka gagal, penyeimbang mengalihkan permintaannya ke node lain hampir secara instan. Berkat kerjanya, pengguna bahkan tidak melihat kegagalan satu simpul. Kami akan berbicara di bawah tentang pekerjaan penyeimbang secara terpisah.

Topologi Klaster Data Center Jira


Saya akan memberikan prinsip-prinsip dasar dimana sebuah cluster dibangun di JDC:

  • Contoh Jira berbagi database umum;
  • Indeks Lucene direplikasi secara real time dan disimpan secara lokal per instance;
  • lampiran disimpan di repositori umum;
  • Contoh Jira memantau konsistensi cache;
  • kapan saja beberapa contoh dapat aktif pada saat yang sama;
  • kunci kluster tersedia;
  • balancer dikonfigurasikan untuk mengarahkan permintaan hanya ke node aktif, sementara itu seharusnya tidak meneruskan permintaan ke node tidak aktif, dan juga tidak bisa menangani semua sesi ke satu node.

Semua node dibagi menjadi aktif dan pasif. Node aktif berbeda dalam hal:

  • Memproses permintaan
  • Lakukan proses dan tugas latar belakang
  • Tugas yang dijadwalkan dapat dikonfigurasi pada satu atau lebih dari itu.
  • Dalam semua skenario praktis, situasinya akan terlihat seperti menggunakan Server Jira standar. Dengan demikian, node pasif tidak memproses permintaan dan tidak melakukan tugas, tetapi melayani untuk mengambil beban kerja jangka pendek (misalnya, saat startup sistem, memuat plugin dan / atau pengindeksan).

Gambar di bawah ini menunjukkan operasi cluster Jira

gambar
Gambar 2. Diagram disederhanakan dari arsitektur

Tentang load balancers


Penyeimbang dapat berupa server apa pun dengan proxy terbalik diinstal atau perangkat fisik. Saya akan memberikan contoh penyeimbang yang paling terkenal.

1. Penyeimbang perangkat keras:

• Cisco
• Juniper
• F5

2. Penyeimbang perangkat lunak:

• mod_proxy (Apache) - server proxy untuk HTTP Server Apache yang mendukung protokol paling populer dan beberapa algoritma load balancing yang berbeda.

• Varnish adalah server proksi HTTP terbalik dan akselerator, ia dirancang untuk situs dengan lalu lintas tinggi. Tidak seperti yang lain, itu hanya server proxy dan penyeimbang beban lalu lintas HTTP. Secara khusus, Varnish menggunakan Wikipedia, NY Times, The Guardian dan banyak proyek besar lainnya.

• Nginx - server web nomor 1 yang populer di antara load balancers dan solusi proxy untuk situs dengan traffic tinggi. Secara aktif berkembang, pabrikan menawarkan versi gratis dan korporat. Digunakan di banyak situs yang paling banyak dikunjungi di dunia, misalnya, WordPress.com, Zynga, Airbnb, Hulu, MaxCDN.

• Nginx Plus - pada kenyataannya, versi perusahaan Nginx berbayar yang disebutkan di atas.

• HAProxy adalah alat open source gratis yang menyediakan load balancing dan kemampuan proxy untuk protokol TCP / HTTP. Cepat dan menghabiskan sedikit sumber daya sistem, kompatibel dengan Linux, Solaris, FreeBSD dan Windows.

Perbandingan yang baik dari server proxy dapat ditemukan di sini di tautan ini .

Maju dan mundur proxy


Load balancers dapat bekerja sebagai proksi langsung maupun terbalik. Perbedaannya dijelaskan dengan baik oleh penulis komentar ini di stackoverflow:

1. "Forward proxy" (Forward proxy). Acara proxy dalam kasus ini adalah bahwa "proxy langsung" mengambil data dari situs web lain atas nama pemohon asli. Sebagai contoh, saya akan memberikan daftar tiga komputer yang terhubung ke Internet.

X = komputer atau komputer klien di Internet
Y = situs web proxy, proxy.example.org
Z = situs web yang ingin Anda kunjungi adalah www.example.net
Anda biasanya dapat terhubung langsung dari X -> Z. Namun, dalam beberapa skenario lebih baik Y -> Z atas nama X, yang terlihat seperti ini dalam sebuah rantai: X -> Y -> Z.

2. "Reverse proxy" (Reverse proxy). Bayangkan situasi yang sama, hanya situs Y yang dikonfigurasi dengan proxy terbalik. Anda biasanya dapat terhubung langsung dari X -> Z. Namun, dalam beberapa skenario, administrator Z lebih baik untuk membatasi atau melarang akses langsung dan memaksa pengunjung untuk melewati Y terlebih dahulu. Dengan demikian, seperti sebelumnya, kami mendapatkan data yang diterima oleh Y -> Z atas nama X, yaitu sebagai berikut: X -> Y -> Z.
Kasus ini berbeda dari "proxy langsung" pada pengguna X yang tidak tahu bahwa ia mengakses Z, karena pengguna X melihat bahwa ia bertukar data dengan Y. Server Z tidak terlihat oleh klien, dan hanya server proxy eksternal Y yang terlihat secara eksternal. . Proksi terbalik tidak memerlukan konfigurasi sisi klien. Klien X percaya bahwa ia hanya berinteraksi dengan Y (X -> Y), tetapi kenyataannya adalah bahwa Y mengalihkan seluruh koneksi (X -> Y -> Z lagi).

Selanjutnya, kami akan mempertimbangkan untuk bekerja dengan penyeimbang perangkat lunak.

Perangkat lunak penyeimbang mana yang harus dipilih?


Dalam pengalaman kami, Nginx adalah pilihan terbaik di antara penyeimbang perangkat lunak karena mendukung mode sesi Sticky dan juga salah satu server web yang paling umum digunakan, yang menyiratkan dokumentasi yang baik dan popularitas yang cukup di antara para spesialis TI.

Sesi lengket adalah metode penyeimbangan beban di mana permintaan klien dikirim ke server grup yang sama. Nginx memiliki metode lengket yang menggunakan cookie untuk menyeimbangkan, tetapi hanya dalam versi komersial. Tetapi ada cara gratis - penggunaan modul eksternal.

Modul ini membuat cookie, dan dengan demikian membuat setiap browser unik. Selanjutnya, cookie digunakan untuk mengarahkan permintaan ke server yang sama. Jika tidak ada cookie (misalnya, pada permintaan pertama), server dipilih secara acak.
Anda dapat membaca lebih lanjut tentang metode tempel di tautan ini , serta di Habrapost ini .

Dan sekarang, mari kita beralih ke bagian praktis ...

Petunjuk untuk membuat cluster Jira DataCenter


Untuk pengelompokan, Anda dapat menggunakan instance yang sudah ada dengan Jira diinstal, atau yang baru. Dalam contoh kami, instalasi instance baru pada OS yang berbeda akan dijelaskan (untuk menunjukkan keserbagunaan sistem).

1. Mari kita mulai dengan server database. Anda dapat menggunakan keduanya yang sudah ada dan membuat yang baru. Sekali lagi, untuk ilustrasi, Windows Server 2016 + PostgreSQL 9.4 dipilih. Instal OS, instal server PG, instal PG Admin, tambahkan pengguna dan basis data.

2. Buat simpul pertama pada OS Ubuntu 16.04 LTS. Instal paket yang diperlukan, pembaruan repositori.

3. Unduh dan pasang Jira DataCenter, luncurkan, konfigurasikan basis data (untuk berjaga-jaga, Atlassian memiliki panduan terperinci).

4. Matikan Jira, matikan node.
berhenti layanan jira

5. Untuk manipulasi lebih lanjut, lebih baik menonaktifkan sementara autorun Jira:
perbarui-rc.d -f jira hapus

6. Kami mengkloning node yang dimatikan.

7. Mulai node pertama, matikan Jira (secara default, Jira setelah instalasi diatur ke autorun).

8. Jalankan node kedua, matikan Jira.

9. Buat contoh terpisah untuk penyeimbang. Saya memilih Ubuntu 16.04 karena itu cukup cepat, sederhana dan tidak memerlukan biaya tambahan dalam bentuk lisensi.

10. Instal nginx (contoh yang digunakan versi 1.13.4).

11. Unduh dan buka paket nginx-sticky-module-ng:
git clone bitbucket.org/nginx-goodies/nginx-sticky-module-ng.git

12. Siapkan nginx untuk mengkompilasi ulang dan menambahkan modul.

13. Kompilasi nginx dengan modul nginx-sticky-module-ng. Dalam kasus saya, baris kompilasi ternyata seperti ini:
./configure --prefix = / etc / nginx --sbin-path = / usr / sbin / nginx --modules-path = / usr / lib / nginx / modules --conf-path = / etc / nginx / nginx. conf --error-log-path = / var / log / nginx / error.log --http-log-path = / var / log / nginx / access.log --pid-path = / var / run / nginx. pid --lock-path = / var / run / nginx.lock --http-client-body-temp-path = / var / cache / nginx / client_temp --http-proxy-temp-path = / var / cache / nginx / proxy_temp --http-fastcgi-temp-path = / var / cache / nginx / fastcgi_temp --http-uwsgi-temp-path = / var / cache / nginx / uwsgi_temp --http-scgi-temp-path = / var / cache / nginx / scgi_temp --user = nginx --group = nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module - -with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_module_wodmodulewith -with-http_sub_module --with-ht tp_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt = '- g -O2 -fstack-protector - pelindung param = ssp-buffer-size = 4 -Wformat -Werror = format-security -Wp, -D_FORTIFY_SOURCE = 2 -fPIC '--dengan-ld-opt =' - Wl, -Bsymbolic-functions -Wl, -z, relro -Wl, -z, sekarang -Wl, - sesuai kebutuhan -pie '--add-module = / usr / local / src / nginx-sticky-module-ng

14. Temukan file /etc/nginx/nginx.conf, salin ke .bak, konfigurasikan nginx untuk membalikkan mode proxy.

15. Selanjutnya, kita membutuhkan server file (lebih disukai juga toleran terhadap kesalahan). Misalnya, saya memilih server Windows, tempat saya membuat bola NFS.

16. Pada setiap node kami menginstal paket untuk dukungan NFS:
apt-get install nfs-common

17. Buat folder / media / jira dan jalankan:
chmod -R 0777 / media / Jira

18. Pasang bola NFS sebagai yang dibagikan (perlu untuk memasangnya bukan di folder root, tetapi, misalnya, di / media / jira) - SETIAP NODE

19.1. Selanjutnya, dimungkinkan untuk melakukan pemasangan manual (tunggal):
sudo mount -t nfs -Oid = 1000, iocharset = utf-8 xx.xx.xx.xx: / jira / media / jira
di mana xx.xx.xx.xx adalah alamat ip server dengan bola NFS

19.2. Atau pemasangan otomatis segera (saat startup OS):
mcedit / etc / fstab
Pada akhirnya Anda perlu menambahkan baris:
192.168.7.239:/jira / media / jira nfs pengguna, rw 0 0
Kemudian simpan dan keluar.

20. Tetapkan ID: node1 node1 pertama, pada node2 node2 kedua, dan sebagainya.
# ID ini harus unik di seluruh cluster
jira.node.id = node1
# Lokasi direktori home bersama untuk semua node Jira
jira.share.home = / media / jira

21. Jalankan jira pada node pertama
layanan jira mulai
periksa:
buka sistem -> info sistem -> cari cluster ON dan nomor simpul.

22. Atur keseimbangan nginx

23. Sejak sebelumnya kita menonaktifkan autostart Jira pada node, maka kita dapat mengaktifkannya dengan perintah:
perbarui-rc.d -f jira aktifkan

24. Kami memeriksa operasi cluster dan menambahkan node yang diperlukan.

Cluster Start Order


1. Aktifkan server sistem file bersama
2. Aktifkan Load balancer
3. Aktifkan node1
4. Aktifkan node2
5. ...

Cluster Stop Order


1. Hentikan Jira di kedua node dengan layanan berhenti perintah Jira
2. Matikan simpul 2
3. Matikan simpul 1
4. Matikan penyeimbang beban
5. Matikan server sistem file

Itu saja ...


Tentu saja, metode yang dijelaskan bukan satu-satunya yang benar. Ini hanyalah salah satu cara implementasi.

Saya mengucapkan terima kasih kepada kolega saya atas bantuan mereka dalam mempersiapkan materi.
Beri komentar, ajukan pertanyaan, dan terima kasih atas perhatian Anda.

Source: https://habr.com/ru/post/id433904/


All Articles