Puppet là một hệ thống quản lý cấu hình giúp đơn giản hóa việc sử dụng và triển khai các loại phần mềm khác nhau, giúp quản trị hệ thống đáng tin cậy và có thể sao chép được hơn. Trong hướng dẫn này, chúng tôi sử dụng Puppet để quản lý cài đặt MySQL , một cơ sở dữ liệu quan hệ phổ biến được sử dụng cho các ứng dụng như WordPress, Ruby on Rails và các ứng dụng khác. Hiera là phương pháp xác định giá trị cấu hình mà Puppet sẽ sử dụng để đơn giản hóa cấu hình MySQL.
Trong hướng dẫn này, bạn sẽ sử dụng Puppet để triển khai các mô-đun trên máy chủ của mình. Cuối cùng, bạn sẽ cài đặt, cấu hình và sẵn sàng sử dụng MySQL cho nhiều ứng dụng khác nhau yêu cầu cơ sở dữ liệu phụ trợ.
Ghi chú: Hướng dẫn này được viết cho người dùng không phải root. Các lệnh yêu cầu quyền nâng cao được thêm tiền tố sudo
. Nếu bạn không quen với sudo
lệnh này, hãy xem hướng dẫn Người dùng và Nhóm .
Trước khi bạn bắt đầu
- Nếu bạn chưa thực hiện, hãy tạo một tài khoản Linode và Compute Instance. Xem hướng dẫn Bắt đầu với Linode và Tạo Compute Instance của chúng tôi .
- Làm theo hướng dẫn Thiết lập và Bảo mật Phiên bản Compute của chúng tôi để cập nhật hệ thống của bạn. Bạn cũng có thể muốn đặt múi giờ, cấu hình tên máy chủ, tạo tài khoản người dùng giới hạn và tăng cường quyền truy cập SSH.
Cài đặt và cấu hình Puppet
Thực hiện theo các bước sau để thiết lập Puppet cho triển khai cục bộ, chỉ trên một máy chủ. Nếu bạn cần cấu hình nhiều hơn một máy chủ hoặc triển khai Puppet master, hãy làm theo hướng dẫn Puppet đa máy chủ của chúng tôi .
Cài đặt gói Puppet
1.Cài đặt puppetlabs-release-bionic
kho lưu trữ để thêm các gói Puppet:
wget https://apt.puppet.com/puppet-release-bionic.deb sudo dpkg -i puppet-release-bionic.deb
2.Cập nhật chỉ mục gói apt để làm cho các gói kho lưu trữ Puppet Labs khả dụng, sau đó cài đặt Puppet. Thao tác này sẽ cài đặt gói puppet-agent
, cung cấp puppet
tệp thực thi bên trong trong môi trường Ruby tương thích:
sudo apt update && sudo apt install puppet-agent
3.Xác nhận phiên bản Puppet đã cài đặt:
puppet --version
Tại thời điểm viết bài này, phiên bản Puppet là 6.1.0
.
Cài đặt Mô-đun Puppet MySQL
Puppet Forge là một tập hợp các mô-đun hỗ trợ cài đặt các loại phần mềm khác nhau. Mô-đun MySQL xử lý việc cài đặt và cấu hình MySQL mà không cần bạn phải quản lý thủ công nhiều tệp cấu hình và dịch vụ.
Cài đặt mô-đun MySQL:
sudo puppet module install puppetlabs-mysql --version 7.0.0
Thao tác này sẽ cài đặt mysql
mô-đun vào đường dẫn mặc định: /etc/puppetlabs/code/environments/production/modules/
.
Bản kê khai MySQL của Puppet
Hướng dẫn này sử dụng Puppet manifest để cung cấp cho Puppet hướng dẫn cài đặt và cấu hình. Ngoài ra, bạn có thể cấu hình Puppet master .
Trong khi toàn bộ bản kê khai Puppet có thể chứa cấu hình mong muốn cho máy chủ, các giá trị cho các lớp hoặc kiểu Puppet cũng có thể được định nghĩa trong tệp cấu hình Hiera để đơn giản hóa việc viết bản kê khai Puppet trong hầu hết các trường hợp. Trong ví dụ này, mysql::server
các tham số lớp sẽ được định nghĩa trong Hiera, nhưng lớp trước tiên phải được áp dụng cho máy chủ.
Để áp dụng mysql::server
lớp này cho tất cả máy chủ theo mặc định, hãy tạo tệp kê khai Puppet sau:
include ::mysql::server
Lưu ý rằng đây site.pp
là tệp manifest mặc định. Không có node { .. }
dòng đủ điều kiện, điều này áp dụng lớp cho bất kỳ máy chủ nào áp dụng manifest. Puppet hiện biết cách áp dụng lớp mysql::server
, nhưng vẫn cần các giá trị cho các tài nguyên như cơ sở dữ liệu, người dùng và các thiết lập khác. Cấu hình Hiera để cung cấp các giá trị này trong phần tiếp theo.
Cài đặt và cấu hình Puppet Hiera
Để hiểu cách Hiera hoạt động, hãy xem đoạn trích sau từ hiera.yaml
tệp mặc định:
---
version: 5
hierarchy:
- name: "Per-node data"
path: "nodes/%{::trusted.certname}.yaml"
- name: "Common data"
path: "common.yaml"
Cấu hình Hiera này hướng dẫn Puppet chấp nhận các giá trị biến từ nodes/%{::trusted.certname}.yaml
. Nếu tên máy chủ Linode của bạn là examplehostname
, hãy định nghĩa một tệp có tên là nodes/examplehostname.yaml
). Bất kỳ biến nào được tìm thấy trong các tệp YAML cao hơn trong hệ thống phân cấp đều được ưu tiên, trong khi bất kỳ tên biến nào không tồn tại trong các tệp đó sẽ chuyển sang các tệp thấp hơn trong hệ thống phân cấp (trong ví dụ này là common.yaml
).
Cấu hình sau sẽ định nghĩa các biến Puppet để common.yaml
đưa biến vào mysql::server
lớp.
Cấu hình Hiera ban đầu
Các tệp cấu hình Hiera được định dạng dưới dạng yaml, với các khóa xác định các tham số Puppet để đưa các giá trị liên quan của chúng vào. Để bắt đầu, hãy đặt mật khẩu gốc MySQL. Ví dụ sau đây về bản kê khai Puppet là một cách để kiểm soát mật khẩu này:
class { '::mysql::server':
root_password => 'examplepassword',
}
Chúng ta cũng có thể định nghĩa mật khẩu gốc bằng tệp cấu hình Hiera sau. Tạo tệp YAML sau và lưu ý cách tham root_password
số được định nghĩa là Hiera yaml:
mysql::server::root_password: examplepassword
Thay thế examplepassword
bằng mật khẩu an toàn mà bạn chọn. Chạy Puppet để thiết lập MySQL với cài đặt mặc định và mật khẩu gốc đã chọn:
sudo -i puppet apply /etc/puppetlabs/code/environments/production/manifests/site.pp
Puppet sẽ xuất tiến trình trước khi hoàn tất. Để xác nhận MySQL đã được cấu hình đúng, hãy chạy lệnh:
mysql -u root -p -e 'select version();'
Nhập mật khẩu và MySQL trả về phiên bản của nó:
+-------------------------+
| version() |
+-------------------------+
| 5.7.24-0ubuntu0.18.04.1 |
+-------------------------+
Xác định tài nguyên MySQL
Sử dụng Hiera, chúng ta có thể định nghĩa phần còn lại của cấu hình MySQL hoàn toàn trong yaml. Các bước sau sẽ tạo cơ sở dữ liệu và người dùng để sử dụng trong cài đặt WordPress.
1.Tạo mật khẩu MySQL đã băm trước. Thay thế mật khẩu wordpresspassword
trong ví dụ này và khi được nhắc nhập mật khẩu MySQL gốc, hãy sử dụng mật khẩu gốc đầu tiên đã chọn trong phần trước để xác thực. Lưu ý chuỗi bắt đầu bằng a *
mà lệnh trả về cho Bước 2:
mysql -u root -p -NBe 'select password("wordpresspassword")'
*E62D3F829F44A91CC231C76347712772B3B9DABC
2.Với băm mật khẩu MySQL đã sẵn sàng, chúng ta có thể định nghĩa các giá trị Hiera. YAML sau đây định nghĩa các tham số để tạo một cơ sở dữ liệu được gọi wordpress
và một người dùng được đặt tên wpuser
có quyền kết nối từ localhost
. YAML cũng định nghĩa một GRANT
cho phép wpuser
hoạt động trên wordpress
cơ sở dữ liệu với ALL
các quyền:
mysql::server::root_password: examplepassword
mysql::server::databases:
wordpress:
ensure: present
mysql::server::users:
wpuser@localhost:
ensure: present
password_hash: '*E62D3F829F44A91CC231C76347712772B3B9DABC'
mysql::server::grants:
wpuser@localhost/wordpress.*:
ensure: present
privileges: ALL
table: wordpress.*
user: wpuser@localhost
3.Chạy lại Puppet:
sudo -i puppet apply /etc/puppetlabs/code/environments/production/manifests/site.pp
4.Bây wpuser
giờ có thể kết nối với wordpress
cơ sở dữ liệu. Để xác minh, hãy kết nối với daemon MySQL với tư cách là người dùng wpuser
với wordpress
cơ sở dữ liệu:
mysql -u wpuser -p wordpress
Sau khi bạn nhập mật khẩu cho wpuser
, hãy thoát khỏi dấu nhắc MySQL:
exit
Thêm phân cấp cho các môi trường cụ thể
Có thể thêm các cấu hình bổ sung chỉ áp dụng cho các môi trường cụ thể. Ví dụ, các tác vụ sao lưu chỉ có thể áp dụng cho các máy chủ trong một vùng nhất định hoặc các cơ sở dữ liệu cụ thể có thể được tạo trong một triển khai cụ thể.
Trong ví dụ sau, Puppet sẽ cấu hình máy chủ MySQL với một cơ sở dữ liệu bổ sung, nhưng chỉ khi bản phân phối của máy chủ đó dựa trên Debian.
1.Sửa đổi hiera.yaml
để chứa nội dung sau:
---
version: 5
hierarchy:
- name: "Per OS Family"
path: "os/%{facts.os.family}.yaml"
- name: "Other YAML hierarchy levels"
paths:
- "common.yaml"
Thay đổi này hướng dẫn Hiera tìm kiếm các tham số Puppet trước tiên trong "os/%{facts.os.family}.yaml"
và sau đó trong common.yaml
. Phần tử đầu tiên dựa trên thực tế của hệ thống phân cấp là động và phụ thuộc vào máy chủ mà Puppet và Hiera kiểm soát. Trong ví dụ dựa trên Ubuntu này, Hiera sẽ tìm kiếm Debian.yaml
trong os
thư mục, trong khi trên bản phân phối như CentOS, tệp RedHat.yaml
sẽ tự động được tham chiếu thay thế.
2.Tạo tệp YAML sau:
lookup_options:
mysql::server::databases:
merge: deep
mysql::server::databases:
ubuntu-backup:
ensure: present
Mặc dù tương tự như common.yaml
tệp được xác định trong các bước trước, tệp này sẽ chỉubuntu-backup
thêm cơ sở dữ liệu trên các máy chủ dựa trên Debian (như Ubuntu). Ngoài ra, cài đặt đảm bảo rằng tham số được hợp nhất giữa và để tất cả các cơ sở dữ liệu được quản lý. Nếu không đặt để hợp nhất sâu các hàm băm này, chỉ tệp phân cấp cụ thể nhất sẽ được áp dụng cho máy chủ, trong trường hợp này là .lookup_options
mysql::server:databases
Debian.yaml
common.yaml
lookup_options
Debian.yaml
- Ngoài ra, vì tệp kê khai Puppet của chúng ta ngắn nên chúng ta có thể kiểm tra lệnh tương tự bằng cách sử dụng cờ
-e
để áp dụng tệp kê khai nội tuyến:
sudo -i puppet apply -e 'include ::mysql::server'
3.Chạy Puppet và quan sát những thay đổi:
sudo -i puppet apply /etc/puppetlabs/code/environments/production/manifests/site.pp
4.Xác minh xem cơ sở dữ liệu mới có tồn tại không:
mysql -u root -p -e 'show databases;'
Bao gồm ubuntu-backup
cơ sở dữ liệu mới:
+---------------------+
| Database |
+---------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| ubuntu-backup |
| wordpress |
+---------------------+
Xin chúc mừng! Bây giờ bạn có thể kiểm soát cấu hình Puppet của mình thông qua các định nghĩa Hiera có khả năng cấu hình cao.
Thông tin thêm
Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.
Nguồn: https://www.linode.com/docs/guides/install-and-manage-mysql-databases-with-puppet-hiera-on-ubuntu-18-04/