环境准备
主机名
IP
controller1
10.0.0.10
controller2
10.0.0.11
compute1
10.0.0.12
compute2
10.0.0.13
data1
10.0.0.14
data2
10.0.0.15
haproxy1
10.0.0.16
haproxy2
10.0.0.17
客户端系统
虚拟化工具
操作系统
Windows11
VMware15.5pro
Centos7.9
安装基本工具
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config; systemctl disable firewalld
yum install vim iotop bc gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel zip unzip zlib-devel net-tools lrzsz tree ntpdate telnet lsof tcpdump wget libevent libevent-devel bc systemd-devel bash-completion traceroute bridge-utils -y
cat >> /etc/hosts << EOF
10.0.0.10 controller1
10.0.0.11 controller2
10.0.0.12 compute1
10.0.0.13 compute2
10.0.0.14 data1
10.0.0.15 data2
10.0.0.16 haproxy1
10.0.0.17 haproxy2
10.0.0.100 openstack.vip.cn
EOF
Haproxy编译部署
haproxy1与haproxy2机器
解决lua环境
官网下载:http://www.lua.org/ftp/lua-5.4.4.tar.gz
yum install -y gcc readline-devel
mkdir /apps
tar xvf lua-5.4.4.tar.gz -C /apps/
cd /apps/lua-5.4.4/
make linux test
src/lua -v
haproxy1与haproxy2机器
官网下载:http://www.haproxy.org/download/2.5/src/haproxy-2.5.7.tar.gz
yum install -y gcc openssl-devel pcre-devel systemd-devel
tar xvf haproxy-2.5.7.tar.gz
cd haproxy-2.5.7/
ll Makefile
cat README
cat INSTALL
make -j 4 TARGET = linux-glibc USE_OPENSSL = 1 USE_ZLIB = 1 USE_LUA = 1 USE_PCRE = 1 USE_SYSTEMD = 1 LUA_INC = /apps/lua-5.4.4/src LUA_LIB = /apps/lua-5.4.4/src
make install PREFIX = /apps/haproxy
ln -s /apps/haproxy/sbin/haproxy /usr/sbin/
haproxy -v
haproxy启动文件(haproxy1与haproxy2机器)
vim /usr/lib/systemd/system/haproxy.service
[ Unit]
Description = HAProxy Load Balancer
After = syslog.target network.target
[ Service]
ExecStartPre = /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart = /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload = /bin/kill -USR2 $MAINPID
[ Install]
WantedBy = multi-user.target
mkdir /var/lib/haproxy/
mkdir /etc/haproxy/
vim /etc/man_db.conf
MANDATORY_MANPATH /apps/haproxy/share/man/
mandb
vim /etc/haproxy/haproxy.cfg
global
maxconn 100000
chroot /apps/haproxy
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
user haproxy
group haproxy
daemon
pidfile /var/lib/haproxy/haproxy.pid
log 127.0 .0.1 local2 info
defaults
option http-keep-alive
option forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client 300000ms
timeout server 300000ms
listen stats
mode http
bind 0.0 .0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth admin:123456
useradd -r -s /sbin/nologin -d /var/lib/haproxy haproxy
vim /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1
sysctl -p
systemctl daemon-reload
systemctl enable --now haproxy
Haproxy+Keepalived
安装服务
yum install -y keepalived
配置haproxy高可用
haproxy1与haproxy2机器
安装检测工具
yum install -y psmisc
使用非抢占式
效果是当主VIP宕机时VIP飘移过后,重启主VIP也不会将VIP夺回来
haproxy1机器
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
global_defs {
notification_email {
360120854@qq.com
ws3024321237@163.com
}
notification_email_from ws3024321237@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id haprxy1
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_iptables
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_haproxy {
script "killall -0 haproxy || systemctl restart haproxy"
interval 2
}
vrrp_instance HA_openstack {
state BACKUP
interface eth0
virtual_router_id 66
priority 100
advert_int 2 # 调用脚本两次之间的间隔,默认为1秒
nopreempt
track_script {
check_haproxy
}
virtual_ipaddress {
10.0.0.100/24 dev eth0 label eth0:1
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
EOF
vim /etc/keepalived/notify.sh
contact = '360120854@qq.com'
notify ( ) {
mailsubject = "$( hostname ) 切换到 $1 , vip 地址发生漂移"
mailbody = "$( date +'%F %T' ) : vip发生漂移, $( hostname ) 切换到 $1 "
echo "$mailbody " | mail -s "$mailsubject " $contact
}
case $1 in
master)
notify master
; ;
backup)
notify backup
; ;
fault)
notify fault
; ;
*)
echo "Usage: $( basename $0) {master|backup|fault}"
exit 1
; ;
esac
chmod +x /etc/keepalived/notify.sh
yum install -y mailx
vim /etc/mail.rc
'' ''
set from = 360120854 @qq.com
set smtp = smtp.qq.com
set smtp-auth-user= 360120854 @qq.com
set smtp-auth-password= ljroytmuhlkjbgje
systemctl restart keepalived
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
global_defs {
notification_email {
360120854@qq.com
ws3024321237@163.com
}
notification_email_from ws3024321237@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id haprxy1
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_iptables
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_haproxy {
script "killall -0 haproxy || systemctl restart haproxy"
interval 2
}
vrrp_instance HA_openstack {
state BACKUP
interface eth0
virtual_router_id 66
priority 80
advert_int 2
nopreempt
track_script {
check_haproxy
}
virtual_ipaddress {
10.0.0.100/24 dev eth0 label eth0:1
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
EOF
vim /etc/keepalived/notify.sh
contact = '360120854@qq.com'
notify ( ) {
mailsubject = "$( hostname ) 切换到 $1 , vip 地址发生漂移"
mailbody = "$( date +'%F %T' ) : vip发生漂移, $( hostname ) 切换到 $1 "
echo "$mailbody " | mail -s "$mailsubject " $contact
}
case $1 in
master)
notify master
; ;
backup)
notify backup
; ;
fault)
notify fault
; ;
*)
echo "Usage: $( basename $0) {master|backup|fault}"
exit 1
; ;
esac
chmod +x /etc/keepalived/notify.sh
yum install -y mailx
vim /etc/mail.rc
'' ''
set from = 360120854 @qq.com
set smtp = smtp.qq.com
set smtp-auth-user= 360120854 @qq.com
set smtp-auth-password= ljroytmuhlkjbgje
systemctl restart keepalived
OpenStack-data
mysql主主架构
采用二进制源码包部署,下载地址:https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
上传至data1机器,部署mysql
yum install -y libaio-devel
yum remove -y mariadb*
tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
useradd -s /sbin/nologin mysql
mkdir /application/mysql -pv
mkdir /data/mysql/data -pv
mkdir /data/mysql/binlog -pv
echo "PATH=/application/mysql/bin:$PATH " > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
mv mysql-5.7.26-linux-glibc2.12-x86_64/* /application/mysql/
mysqld --initialize-insecure --user= mysql --basedir= /application/mysql --datadir= /data/mysql/data
vim /etc/my.cnf
[ mysqld]
user = mysql
basedir = /application/mysql
datadir = /data/mysql/data
socket = /tmp/mysql.sock
server_id = 6
port = 3306
log_bin = /data/mysql/binlog/mysql-bin
character_set_server = utf8
[ mysql]
socket = /tmp/mysql.sock
chown -R mysql.mysql /data/
cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
service mysqld start
mysql
grant replication slave on *.* to repl@'%' identified by '123' ;
yum install -y libaio-devel
yum remove -y mariadb*
tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
useradd -s /sbin/nologin mysql
mkdir /application/mysql -pv
mkdir /data/mysql/data -pv
mkdir /data/mysql/binlog -pv
echo "PATH=/application/mysql/bin:$PATH " > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
mv mysql-5.7.26-linux-glibc2.12-x86_64/* /application/mysql/
mysqld --initialize-insecure --user= mysql --basedir= /application/mysql --datadir= /data/mysql/data
vim /etc/my.cnf
[ mysqld]
user = mysql
basedir = /application/mysql
datadir = /data/mysql/data
socket = /tmp/mysql.sock
server_id = 12
port = 3306
log_bin = /data/mysql/binlog/mysql-bin
character_set_server = utf8
[ mysql]
socket = /tmp/mysql.sock
chown -R mysql.mysql /data/
cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
service mysqld start
mysql
grant replication slave on *.* to repl@'%' identified by '123' ;
mysql
show master status;
CHANGE MASTER TO
MASTER_HOST = 'data1' ,
MASTER_USER = 'repl' ,
MASTER_PASSWORD = '123' ,
MASTER_PORT = 3306 ,
MASTER_LOG_FILE = 'mysql-bin.000001' ,
MASTER_LOG_POS = 437 ;
start slave;
show slave status\ G
mysql
show master status;
CHANGE MASTER TO
MASTER_HOST = 'data2' ,
MASTER_USER = 'repl' ,
MASTER_PASSWORD = '123' ,
MASTER_PORT = 3306 ,
MASTER_LOG_FILE = 'mysql-bin.000001' ,
MASTER_LOG_POS = 437 ;
start slave;
show slave status\ G
== == == == == == == == == == == == == == == == == == == == == =
如果出现失败或错误,那么执行如下清理
stop slave;
reset slave;
RabbitMQ集群
yum install -y centos-release-openstack-train
yum install -y rabbitmq-server
systemctl enable --now rabbitmq-server
rabbitmqctl add_user openstack 000000
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
rabbitmq-plugins enable rabbitmq_management
scp data1:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/
systemctl restart rabbitmq-server.service
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@data1
rabbitmqctl start_app
memcached
yum install memcached -y
sed -i "s/127.0.0.1/0.0.0.0/g" /etc/sysconfig/memcached
systemctl enable --now memcached
haproxy配置data机器高可用
data1机器配置如下
data2暂时不配置,先将data1配置完成复制即可
haproxy代理检测配置详细如下
check
addr < IP>
port < num>
inter < num>
fall < num>
rise < num>
vim /etc/haproxy/haproxy.cfg
global
maxconn 100000
chroot /apps/haproxy
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
user haproxy
group haproxy
daemon
pidfile /var/lib/haproxy/haproxy.pid
log 127.0 .0.1 local2 info
defaults
option http-keep-alive
option forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client 300000ms
timeout server 300000ms
listen stats
mode http
bind 0.0 .0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth admin:123456
listen mysql
bind 10.0 .0.100:3306
mode tcp
log global
balance leastconn
server data1 10.0 .0.14:3306 check inter 3000 fall 2 rise 5
server data2 10.0 .0.15:3306 check inter 3000 fall 2 rise 5
listen rabbitmq
bind 10.0 .0.100:5672
mode tcp
log global
balance leastconn
server data1 10.0 .0.14:5672 check inter 3000 fall 2 rise 5
server data2 10.0 .0.15:5672 check inter 3000 fall 2 rise 5
listen rabbitmq_web
bind 10.0 .0.100:15672
mode http
log global
balance source
server data1 10.0 .0.14:15672 check inter 3000 fall 2 rise 5
server data2 10.0 .0.15:15672 check inter 3000 fall 2 rise 5
listen memcached
bind 10.0 .0.100:11211
mode tcp
log global
balance source
server data1 10.0 .0.14:11211 check inter 3000 fall 2 rise 5
server data2 10.0 .0.15:11211 check inter 3000 fall 2 rise 5
systemctl reload haproxy.service
chrony部署
yum install -y chrony
vim /etc/chrony.conf
server ntp6.aliyun.com iburst
allow all
local stratum 10
systemctl restart chronyd
clock -w
vim /etc/chrony.conf
server data1 iburst
systemctl restart chronyd
clock -w
keystone部署
mysql
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone' @'%' IDENTIFIED BY 'keystone123' ;
yum install -y centos-release-openstack-train
yum install -y crudini python-openstackclient openstack-selinux
yum install -y openstack-keystone httpd mod_wsgi python2-PyMySQL python-memcached
python3-PyMySQL
python3-mod_wsgi
cp /etc/keystone/keystone.conf{
,.bak}
grep -Ev "^$|#" /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf
crudini --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:keystone123@openstack.vip.cn/keystone
crudini --set /etc/keystone/keystone.conf token provider fernet
su -s /bin/sh -c "keystone-manage db_sync" keystone
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
keystone-manage bootstrap --bootstrap-password 000000 \
--bootstrap-admin-url http://openstack.vip.cn:5000/v3/ \
--bootstrap-internal-url http://openstack.vip.cn:5000/v3/ \
--bootstrap-public-url http://openstack.vip.cn:5000/v3/ \
--bootstrap-region-id RegionOne
echo "ServerName controller1" >> /etc/httpd/conf/httpd.conf
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
systemctl enable --now httpd.service
vim /etc/haproxy/haproxy.cfg
'' ''' '
listen keystone
bind 10.0 .0.100:5000
mode tcp
log global
balance random
server controller1 10.0 .0.10:5000 check inter 3000 fall 2 rise 5
systemctl reload haproxy.service
cat > /etc/keystone/admin-openrc.sh << EOF
#!/bin/bash
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=000000
export OS_AUTH_URL=http://openstack.vip.cn:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF
openstack project create --domain default --description "Service Project" service
openstack token issue
glance部署
mysql
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance' @'%' IDENTIFIED BY 'glance123' ;
openstack user create --domain default --password glance glance