Computer >> Máy Tính >  >> Lập trình >> Cơ sở dữ liệu

Cài đặt OpenStack từ nguồn - phần 2

Trong bài đầu tiên của loạt bài này, chúng tôi đã bắt đầu cài đặt OpenStack từ nguồn. Chúng tôi đã cài đặt keystone và điền vào nó một số thông tin cơ bản bao gồm dự án Dịch vụ và người dùng quản trị cho cài đặt OpenStack mới của chúng tôi. Ngoài ra, trong một tập lệnh ban đầu, chúng tôi thiết lập người dùng và thư mục cho các cài đặt sắp tới của dịch vụ Hình ảnh (nhanh), dịch vụ mạng (neutron), dịch vụ tính toán (nova) và dịch vụ Khối lượng (cinder). Bây giờ, hãy tiếp tục và cài đặt và bắt đầu quá trình xem nhanh trên nút điều khiển.

Trong bài viết đầu tiên, chúng tôi đã thêm một số thông tin vào tệp bashrc của mình để đặt một vài biến shell để sử dụng trong các tập hợp còn lại .. Xác minh rằng ít nhất một trong các biến này đã được đặt:

echo $MY_IP

Để bắt đầu cài đặt dịch vụ Hình ảnh (xem nhanh), chúng ta cần tạo thêm một số thư mục con xem nhanh và đảm bảo rằng chúng có quyền thích hợp (các thư mục xem nhanh cơ bản được tạo bởi một tập lệnh trong bài viết trước):

mkdir -p /var/lib/glance/images
mkdir -p /var/lib/glance/scrubber
mkdir -p /var/lib/glance/image-cache

Tiếp theo, tải xuống (sao chép repo) và cài đặt nhanh chóng:

git clone https://github.com/openstack/glance.git -b stable/kilo

Lưu ý:Hãy nhớ rằng chúng ta có thể thay đổi để cài đặt từ thân cây bằng cách loại bỏ -b ổn định / kilo khỏi lệnh trên.

cp -R glance/etc/* /etc/glance/
cd glance
python setup.py install

Định cấu hình xem nhanh bằng cách đặt một số thông tin cơ bản như thông tin kết nối cơ sở dữ liệu, thông tin hàng đợi tin nhắn và thông tin kết nối keystone:

sed -i "s|#connection = <None>|connection = mysql://glance:glance@$MY_PRIVATE_IP/glance|g" /etc/glance/glance-api.conf
sed -i "s/rabbit_host = localhost/rabbit_host = $MY_PRIVATE_IP/g" /etc/glance/glance-api.conf
sed -i "s/auth_host = 127.0.0.1/auth_host = $MY_PRIVATE_IP/g" /etc/glance/glance-api.conf
sed -i 's/%SERVICE_TENANT_NAME%/service/g' /etc/glance/glance-api.conf
sed -i 's/%SERVICE_USER%/glance/g' /etc/glance/glance-api.conf
sed -i 's/%SERVICE_PASSWORD%/glance/g' /etc/glance/glance-api.conf
sed -i 's/#flavor=/flavor = keystone/g' /etc/glance/glance-api.conf
sed -i 's/#show_image_direct_url = False/show_image_direct_url = True/g' /etc/glance/glance-api.conf

Định cấu hình Glance-Registry với thông tin tương tự như trên:

sed -i "s|#connection = <None>|connection = mysql://glance:glance@$MY_PRIVATE_IP/glance|g" /etc/glance/glance-registry.conf
sed -i "s/auth_host = 127.0.0.1/auth_host = $MY_PRIVATE_IP/g" /etc/glance/glance-registry.conf
sed -i 's/%SERVICE_TENANT_NAME%/service/g' /etc/glance/glance-registry.conf
sed -i 's/%SERVICE_USER%/glance/g' /etc/glance/glance-registry.conf
sed -i 's/%SERVICE_PASSWORD%/glance/g' /etc/glance/glance-registry.conf
sed -i 's/#flavor=/flavor = keystone/g' /etc/glance/glance-registry.conf
sed -i 's|#connection = <None>|connection = mysql://glance:glance@$MY_IP|g' /etc/glance/glance-api.conf
sed -i 's|#connection = <None>|connection = mysql://glance:glance@$MY_IP|g' /etc/glance/glance-registry.conf

Tạo cơ sở dữ liệu MySQL để xem nhanh và điền vào cơ sở dữ liệu mới được tạo bằng các bảng xem nhanh:

mysql -u root -pmysql -e 'CREATE DATABASE glance;'
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';"
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';"
glance-manage db_sync

Mặc dù không cần thiết trong môi trường này, chúng tôi sẽ cài đặt đồng bộ hóa hình ảnh nhanh và đặt nó chạy thường xuyên. Nếu chúng ta có nhiều nút API xem nhanh, điều này sẽ đồng bộ hóa các hình ảnh xem nhanh giữa các nút:

git clone https://github.com/rcbops/glance-image-sync
pushd glance-image-sync
mv glance-image-sync.py /usr/local/bin/glance-image-sync
chmod +x /usr/local/bin/glance-image-sync
popd

cat >> /etc/glance/glance-image-sync << EOF
[DEFAULT]
api_nodes = $MY_IP
rsync_user = glance
lock_file = /var/run/glance-image-sync
EOF

cat >>  /etc/cron.d/glance-image-syn << EOF
*/5 * * * * glance /usr/local/bin/glance-image-sync
EOF

Chúng ta phải nhớ xoay các tệp nhật ký nhanh:

cat >> /etc/logrotate.d/glance << EOF
/var/log/glance/*.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        nocreate
}
EOF

Nếu bạn không nhận được chứng chỉ ký dịch vụ Identity cho dịch vụ Hình ảnh, thì các yêu cầu API Hình ảnh sẽ không thành công. Ngăn chặn điều này bằng cách xem nhanh các chứng chỉ ký kết keystone:

cp /etc/keystone/ssl/certs/ca.pem /var/lib/glance/cacert.pem
cp /etc/keystone/ssl/certs/signing_cert.pem /var/lib/glance/
chown glance:glance /var/lib/glance/*
chmod 600 /var/lib/glance/cacert.pem
chmod 600 /var/lib/glance/signing_cert.pem

Chúng tôi gần như đã sẵn sàng để bắt đầu xem qua, nhưng trước tiên chúng tôi phải tạo các tập lệnh mới bắt đầu:

Lưu ý:Các tập lệnh này chỉ được sao chép từ các tập lệnh mà phiên bản cài đặt nhanh của hệ điều hành Ubuntu đã đóng gói.

cat >> /etc/init/glance-api.conf << EOF
description "Glance API server"
author "Soren Hansen <soren@linux2go.dk>"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec start-stop-daemon --start --chuid glance --exec /usr/local/bin/glance-api -- --config-file=/etc/glance/glance-api.conf --config-file=/etc/glance/glance-api-paste.ini
EOF

cat >> /etc/init/glance-registry.conf << EOF
description "Glance registry server"
author "Soren Hansen <soren@linux2go.dk>"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec start-stop-daemon --start --chuid glance --exec /usr/local/bin/glance-registry -- --config-file=/etc/glance/glance-registry.conf --config-file=/etc/glance/glance-registry-paste.ini

EOF

Bắt đầu xem qua và xác minh rằng nó đang chạy:

start glance
start glance-registry

Chờ khoảng 15 giây và chạy phần sau để xác minh xem có đang chạy:

ps aux|grep glance

Nếu bắt đầu lướt qua, chúng ta sẽ thấy một dòng từ lệnh cuối cùng hiển thị thông tin về quá trình đang chạy. Nếu điều đó không xảy ra và liếc không bắt đầu hoặc vẫn chạy, hãy sử dụng cách sau để bắt đầu xem qua theo cách thủ công để khắc phục sự cố:

sudo -u glance glance-api --config-file=/etc/glance/glance-api.conf --config-file=/etc/glance/glance-api-paste.ini > /dev/null 2>&1 &

sudo -u glance glance-registry --config-file=/etc/glance/glance-registry.conf --config-file=/etc/glance/glance-registry-paste.ini > /dev/null 2>&1 &

Lưu ý: Đặt giá trị debug = True trong tệp /etc/glance/glance.conf sẽ tăng kết quả ghi nhật ký, để được trợ giúp trong việc gỡ lỗi các lỗi.

Tiếp theo, cài đặt nhanh một hình ảnh để sử dụng sau khi chúng tôi đã cài đặt đầy đủ OpenStack làm cơ sở cho máy ảo. Có một hình ảnh đám mây nhỏ dựa trên hệ điều hành Ubuntu có sẵn, được đặt tên là các vòng tròn. Chỉ cần chạy nhanh, hãy tải xuống hình ảnh vòng tròn và tải nó trong nháy mắt:

wget https://cdn.download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img

glance image-create --name=cirros-qcow2 \
                    --disk-format=qcow2 \
                    --container-format=bare \
                    --is-public=true < cirros-0.3.3-x86_64-disk.img

Quy trình thứ hai của chúng tôi hiện đang chạy và bây giờ chúng tôi có thể chuyển sự chú ý sang việc cài đặt dịch vụ Mạng (neutron). Đây là lần cài đặt nơtron đầu tiên mà chúng ta sẽ phải thực hiện, máy chủ nơtron trên nút điều khiển và các tác nhân nơtron trên mạng và các nút tính toán.

Vì các quy trình nova, neutron và lướt qua cần có đặc quyền root hoặc sudo để hoàn thành các tác vụ khác nhau, chúng tôi cần tạo các quyền sudo đặc biệt cho những người dùng quy trình này. OpenStack cũng giới hạn phạm vi của các đặc quyền này thông qua việc sử dụng cấu hình rootwrap. Chạy tập lệnh sau để thiết lập quyền sudo:

for SERVICE in neutron nova cinder
do
echo $SERVICE
cat > '/etc/sudoers.d/'$SERVICE'_sudoers' << EOF
Defaults:$SERVICE !requiretty

$SERVICE ALL = (root) NOPASSWD: /usr/local/bin/$SERVICE-rootwrap  /etc/$SERVICE/rootwrap.conf *
EOF

chmod 440 /etc/sudoers.d/$SERVICE_sudoers
done
chmod 750 /etc/sudoers.d

Một số điều kiện tiên quyết của pip có một vài điều kiện tiên quyết của gói không được cài đặt tự động. Cài đặt các gói này ngay bây giờ:

apt-get -y install git mysql-client python-dev libxml2-dev libffi-dev

Sao chép đại diện neutron:

git clone https://github.com/openstack/neutron.git -b stable/kilo

Sao chép các tệp cấu hình được cung cấp:

cp neutron/etc/* /etc/neutron/

Sao chép một số thư mục con cấu hình cần thiết:

cp -R neutron/etc/neutron/plugins/ml2/* /etc/neutron/plugins/ml2
cp -R neutron/etc/neutron/rootwrap.d/* /etc/neutron/rootwrap.d

Bây giờ hãy cài đặt neutron:

cd neutron
python setup.py install
cd ~

Tạo cơ sở dữ liệu MySQL cho neutron:

mysql -u root -pmysql -e 'CREATE DATABASE neutron;'
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'neutron';"
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron';"

Tập lệnh dữ liệu mẫu được chạy trong bài viết trước không chèn dữ liệu cho dịch vụ nơtron. Tạo người dùng dịch vụ Neutron trong keystone:

keystone user-create --tenant service --name neutron --pass neutron

Cấp vai trò 'quản trị viên' cho người dùng dịch vụ Neutron mới được tạo:

keystone user-role-add --user neutron --tenant service --role admin

Và xác minh rằng việc tạo người dùng đã hoạt động. Liệt kê vai trò và người dùng dịch vụ và xác minh rằng người dùng neutron tồn tại và có vai trò quản trị viên:

keystone user-list --tenant Services
keystone user-role-list --tenant service --user neutron

Bạn sẽ thấy trong đầu ra của hai lệnh trước rằng người dùng neutron đã được tạo và có các quyền thích hợp. Bây giờ điền một dịch vụ neutron vào danh mục dịch vụ keystone:

keystone service-create --name=neutron --type=network --description="Neutron Network Service"

Đặt thông tin điểm cuối neutron vào danh mục dịch vụ keystone:

keystone endpoint-create --region RegionOne --service neutron --publicurl=https://$MY_PUBLIC_IP:9696 --internalurl=https://$MY_PRIVATE_IP:9696 --adminurl=https://$MY_PRIVATE_IP:9696

SERVICE_TENANT_ID=`keystone tenant-get service | awk '/ id / { print $4 }'`

Cuối cùng, chúng ta phải cấu hình neutron. Nếu tệp cấu hình cơ bản được cung cấp trong quá trình đóng gói, hãy xóa tệp đó đi, vì tệp này rất dài và khó chỉnh sửa. Tiếp theo, trình tự sau sẽ thay thế nó bằng một trình tự đơn giản hơn (bản gốc vẫn nằm trong thư mục neutron nhân bản nếu chúng ta cần xem xét nó trong tương lai):

rm /etc/neutron/neutron.conf

cat > /etc/neutron/neutron.conf << EOF
[DEFAULT]
verbose = True
debug = True
core_plugin = ml2
service_plugins = router
auth_strategy = keystone
allow_overlapping_ips = True
dhcp_agents_per_network = 1
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = https://$MY_PRIVATE_IP:8774/v2
nova_admin_username = nova
nova_admin_tenant_id = $SERVICE_TENANT_ID
#nova_admin_tenant_name = service
nova_admin_password = nova
nova_admin_auth_url = https://$MY_PRIVATE_IP:35357/v2.0

[agent]
root_helper=sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
[keystone_authtoken]
auth_uri = https://$MY_PRIVATE_IP:35357/v2.0/
identity_uri = https://$MY_PRIVATE_IP:5000
admin_tenant_name = service
admin_user = neutron
admin_password = neutron
[database]
connection = mysql://neutron:neutron@$MY_PRIVATE_IP/neutron

[oslo_concurrency]
lock_path = /var/lock/neutron

[oslo_messaging_rabbit]
rabbit_host = $MY_PRIVATE_IP
EOF

Xoay các tệp nhật ký neutron:

cat >> /etc/logrotate.d/neutron << EOF
/var/log/neutron/*.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        nocreate
}
EOF

Neutron hỗ trợ nhiều công nghệ mạng lớp 2 thông qua plugin ML2. Định cấu hình tác nhân plugin neutron ML2 để sử dụng các đường hầm GRE để cô lập mạng dự án. Mặc dù tác nhân này không chạy trên nút điều khiển, nhưng máy chủ neutron cần biết về plugin:

rm /etc/neutron/plugins/ml2/ml2_conf.ini
cat > /etc/neutron/plugins/ml2/ml2_conf.ini  << EOF

[ml2]
type_drivers = gre
tenant_network_types = gre
mechanism_drivers = openvswitch

[ml2_type_gre]
tunnel_id_ranges = 1:1000

[securitygroup]
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
EOF

chown neutron:neutron /etc/neutron/*.{conf,json,ini}
chown -R neutron:neutron /etc/neutron/plugins

cat > /etc/default/neutron << EOF
--config-file=/etc/neutron/plugins/ml2/ml2_conf.ini
EOF

Như chúng ta đã làm trong nháy mắt, hãy xây dựng các bảng cơ sở dữ liệu neutron:

neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head

Trước khi bắt đầu quá trình neutron, chúng ta cần cung cấp cho tập lệnh khởi động một số thông tin tùy chọn để nó sẽ đọc tệp cấu hình ml2:

cat > /etc/default/neutron-server << EOF
NEUTRON_PLUGIN_CONFIG="/etc/neutron/plugins/ml2/ml2_conf.ini"
EOF

Và cuối cùng, hãy tạo các tập lệnh khởi động được sử dụng để bắt đầu quy trình máy chủ neutron:

cat > /etc/init/neutron-server.conf << EOF
# vim:set ft=upstart ts=2 et:

start on runlevel [2345]
stop on runlevel [!2345]

script
  [ -r /etc/default/neutron-server ] && . /etc/default/neutron-server
  [ -r "\$NEUTRON_PLUGIN_CONFIG" ] && CONF_ARG="--config-file \$NEUTRON_PLUGIN_CONFIG"
  exec start-stop-daemon --start --chuid neutron --exec /usr/local/bin/neutron-server -- \
    --config-file /etc/neutron/neutron.conf \
    --log-file /var/log/neutron/server.log \$CONF_ARG
end script

EOF

Bắt đầu chạy máy chủ neutron và xác minh rằng nó vẫn chạy. Dòng thứ hai cung cấp thông tin về quá trình neutron đang chạy (một lần nữa đợi khoảng 15 giây trước khi chạy lệnh thứ hai):

start neutron
ps aux|grep neutron

Nếu neutron không bắt đầu, hãy sử dụng dòng sau để khởi động neutron theo cách thủ công. Nếu quá trình neutron có lỗi khi khởi động, nó sẽ cung cấp cho bạn đầu ra để hỗ trợ khắc phục sự cố.

sudo -u neutron neutron-server --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/plugins/ml2/ml2_conf.ini --log-file /var/log/neutron/server.log

Trong phần tiếp theo của loạt bài này, chúng tôi cài đặt một số quy trình nova vào nút điều khiển.