Openstack之一:环境准备及基础服务
一、配置基础环境:
环境准备:
两台或以上服务器,操作系统Centos 7.2,最小化安装,安装完成之后进行基础配置如下:
1、在mysql数据库服务器修改hosts文件,或公司内部有DNS解析主机名:
[root@mysql1 ~]#vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.7.106 mysql1 192.168.7.107 mysql2
2、各mysql服务器更改主机名
[root@mysql1 ~]# hostnamectl set-hostname mysql1 [root@mysql2 ~]# hostnamectl set-hostname mysql2 [root@computer-1 ~]# hostnamectl set-hostname computer1 [root@computer-2 ~]# hostnamectl set-hostname computer2 [root@openstack-1 ~]# hostnamectl set-hostname openstack-1 [root@openstack-1 ~]# hostnamectl set-hostname openstack-2
3、各服务器的selinux和防火墙都关闭
[root@localhost ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service. [root@localhost ~]# systemctl disable NetworkManager Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service. Removed symlink /etc/systemd/system/dbus-org.freedesktop.NetworkManager.service. Removed symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service [root@localhost ~]# vim /etc/sysconfig/selinux SELINUX=disabled
4、各服务器同步时间,时间必须保持一致,否则可能导致无法创建虚拟机等问题。
[root@linux-host1 ~]# yum install ntpdate -y [root@linux-host1 ~]# ntpdate time3.aliyun.com #可设置为任务计划定时更新 [root@linux-host1 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
可以制定一个计划任务,来对时间进行同步,此方法在服务器比较多时,就同步比较慢。
[root@openstack-2 ~]# which hwclock /usr/sbin/hwclock [root@openstack-2 ~]# which ntpdate /usr/sbin/ntpdate [root@openstack-2 ~]# crontab -e * * * * * /usr/sbin/ntpdate time3.aliyun.com && /usr/sbin/hwclock -w [root@openstack-2 ~]# systemctl start crond
我们可以将同步时间创建一个脚本存放到指定的目录下,然后将此目录下的文件都复制到其他服务器上,就会实现同步时间。
[root@openstack-2 ~]# echo "*/5 * * * * /usr/sbin/ntpdate time3.aliyun.com && /usr/sbin/hwclock -w" > /var/spool/cron/root
5、更新系统并重启
[root@linux-host1 ~]# yum update && reboot
二、openstack基础:
1、openstack介绍:
openstack是(infrastructure as a service,基础设置即服务)IAAS架构的实现,OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。
OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作。OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成。
OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目。它的社区拥有超过130家企业及1350位开发者,这些机构与个人都将OpenStack作为基础设施即服务(IaaS)资源的通用前端。OpenStack项目的首要任务是简化云的部署过程并为其带来良好的可扩展性。本文希望通过提供必要的指导信息,帮助大家利用OpenStack前端来设置及管理自己的公共云或私有云。
OpenStack云计算平台,帮助服务商和企业内部实现类似于 Amazon EC2 和 S3 的云基础架构服务(Infrastructure as a Service, IaaS)。OpenStack 包含两个主要模块:Nova 和 Swift,前者是 NASA 开发的虚拟服务器部署和业务计算模块;后者是 Rackspace开发的分布式云存储模块,两者可以一起用,也可以分开单独用。OpenStack除了有 Rackspace 和 NASA 的大力支持外,还有包括 Dell、Citrix、 Cisco、 Canonical等重量级公司的贡献和支持,发展速度非常快,有取代另一个业界领先开源云平台 Eucalyptus 的态势。
2、历史版本信息:
openstack的核心组件是计算、网络和存储,是为了简化资源的管理和分配,把资源划分为三个比较大的资源池,对外通过API进行交互,openstack类似于一个开源的AWS,有很多功能和API和AWS是相同的,因此AWS底层也是使用的KVM虚拟化,当前最新的是N版,每半年更新一次新版本,已经从A-N,从G版以后国内的使用用户越来越多,一下是历史版本更新时间:
3、各组件的功能:
服务名称 | 项目名称 | 详细描述 |
dashboard | Horizon | 基予openstack API接口使用django开发的web管理服务 |
compute | Nova | 通过虚拟化技术提供虚拟机计算资源池 |
networking | Neutron | 实现了虚拟机的网络资源管理,即虚拟机网络 |
storage(存储)部分 | ||
object storage | Swift | 对象存储,适用于一次写入多次读取。如图片/ISO镜像 |
block strong | Cinder | 块存储,提供存储资源池,保存虚拟机的磁盘镜像等信息 |
shared service 共享服务 | ||
identity service | Keystone | 提供账户登录安全认证 |
image servicre | Glance | 提供虚拟镜像的注册和存储管理 |
telemetry | Ceilometer | 提供监控和数据采集、计量服务 |
higher-level-service 高层服务 | ||
orchestraorchestration | Heat | 自动化组件的部署 |
database service | Trove | 提供数据库应用服务 |
openstack通过Nova调用KVM/XEN/VMWARE等虚拟机化技术创建虚拟机,即openstack是一个管理平台框架,支持众多的虚拟化管理,cinder存储支持GlusterFS、ISCSI、MFS等存储技术给虚拟机使用,即openstack不会绑定某一个应用,而是兼容众多的相关技术,因此火的一塌糊涂!
三、安装openstack基础环境:
ocata参考官方文档:https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/index.html
1、在控制端服务器上安装openstack对应ocata版本的仓库
# yum install centos-release-openstack-ocata
2、在openstack监控端和计算节点安装
# yum install python-openstackclient # yum install openstack-selinux
四、SQL数据库安装及配置:
参考文档:https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/environment-sql-database.html
在SQL数据库服务器上安装mariadb,并配置组件
1、安装软件包:
# yum install mariadb mariadb-server -y
2、创建并编辑 vim /etc/my.cnf.d/openstack.cnf
,然后完成如下动作:
在[mysqld]中,设置“bind-address”值为控制节点的管理网络IP地址以是的其他节点可以通过管理网络访问访问数据库。设置其他关键字来设置一些有用的选项和UTF-8编码:
[mysqld] bind-address = 0.0.0.0 default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8
完成安装启动数据库服务
1、启动数据库服务,并将其配置为开机自启:
# systemctl enable mariadb.service # systemctl start mariadb.service
2、数据库初始化设置
# mysql_secure_installation
五、在SQL数据库服务器上安装Rabbitmq-server服务
参考文档:https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/environment-messaging.html
1、安装rabbitmq-server,并配置组件
1、安装包:
# yum install rabbitmq-server -y
2、安装完成后先不要启动rabbitmq-server服务,需要先将hosts文件修改,再启动,否则无法启动。
[root@mysql2 yum.repos.d]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.7.106 mysql1 mysql1.blog.net #只需要解析前面部分,不需要全部解析域名 192.168.7.107 mysql2 mysql2.blog.net
3、启动消息队列服务并将其配置为随系统启动:
# systemctl enable rabbitmq-server.service # systemctl start rabbitmq-server.service # rabbitmq-plugins enable rabbitmq_management #开启web管理界面插件 # systemctl restart rabbitmq-server #重启rabbitMQ服务
4、访问web界面:默认用户名为guest密码为guest。
2、部署rabbitMQ集群:
Rabbitmq的集群是依赖于erlang的集群来工作的,所以必须先构建起erlang的集群环境。而Erlang的集群中各节点是通过一个magic cookie来实现的,这个cookie存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是400的权限。
所以必须保证各节点cookie保持一致,否则节点之间就无法通信。
1、将mysql1服务器的cookie文件复制到mysql2的服务器上
[root@mysql1 ~]# scp /var/lib/rabbitmq/.erlang.cookie 192.168.7.107:/var/lib/rabbitmq/ # 保证两遍的cookie文件一致
2、各节点重启rabbitMQ服务并验证端口:
[root@rabbitmq-mysql1 ~]# systemctl restart rabbitmq-server [root@rabbitmq-mysql2 ~]# systemctl restart rabbitmq-server
3、验证端口号:
5672:消费者访问的端口 15672:web管理端口 25672:集群状态通信端口
4、停止所有节点RabbitMq服务,然后使用detached参数独立运行,这步很关键,尤其增加节点停止节点后再次启动遇到无法启动都可以参照这个顺序。
[root@rabbitmq-server1 ~]# systemctl stop rabbitmq-server [root@rabbitmq-server2 ~]# systemctl stop rabbitmq-server [root@rabbitmq-server3 ~]# systemctl stop rabbitmq-server [root@rabbitmq-server1 ~]# rabbitmq-server -detached [root@rabbitmq-server2 ~]# rabbitmq-server -detached [root@rabbitmq-server3 ~]# rabbitmq-server -detached
5、查看各rabbitMQ服务的集群状态:
[root@mysql1 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@mysql1 [{nodes,[{disc,[rabbit@mysql1]}]}, {running_nodes,[rabbit@mysql1]}, {cluster_name,<<"rabbit@mysql1">>}, {partitions,[]}, {alarms,[{rabbit@mysql1,[]}]}]
[root@mysql2 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@mysql2 [{nodes,[{disc,[rabbit@mysql2]}]}, {running_nodes,[rabbit@mysql2]}, {cluster_name,<<"rabbit@mysql2">>}, {partitions,[]}, {alarms,[{rabbit@mysql2,[]}]}]
6、在rabbitmq-mysql1作为内存节点连接起来,并作为内存节点,在rabbitmq-mysql1执行以下命令:
[root@rabbitmq-server1 ~]# rabbitmqctl stop_app #停止应程序 [root@rabbitmq-server1 ~]# rabbitmqctl reset #清空元数据 [root@mysql1 ~]# rabbitmqctl join_cluster rabbit@mysql2 --ram #将rabbitmq-server1添加到集群当中,并成为内存节点,不加--ram默认是磁盘节点 Clustering node rabbit@mysql1 with rabbit@mysql2 [root@mysql1 ~]# rabbitmqctl cluster_status #查询集群添加后的状态 Cluster status of node rabbit@mysql1 [{nodes,[{disc,[rabbit@mysql2]},{ram,[rabbit@mysql1]}]}, {alarms,[{rabbit@mysql2,[]}]}] [root@mysql1 ~]# rabbitmqctl start_app #添加完集群之后不要忘记启动app应用程序
7、更改镜像模式,同步rabbitmq两边集群的一致性。
[root@mysql1 ~]# rabbitmqctl set_policy ha-all "#" '{"ha-mode":"all"}' Setting policy "ha-all" for pattern "#" to "{\"ha-mode\":\"all\"}" with priority "0" #"#"为任意0个或多个即为所有,也可以使用"^test"匹配开头,还可以使用其他正则匹配
8、创建rabbitmq账号,并授予读写权限。
[root@mysql1 ~]# rabbitmqctl add_user openstack openstack123 #创建openstack账号,密码为openstack123 Creating user "openstack" [root@mysql1 ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*" #授予openstack用户账号读写权限 Setting permissions for user "openstack" in vhost "/"
可以看到此时两边的rabbitmq服务器都会同步有一个openstack账号,访问网页:192.168.7.107:15627
五、安装并配置memcached服务
1、安装memcached服务,做实验用了yum安装,生产环境中需要源码编译,需要有高可用。
[root@mysql1 ~]# yum install memcached -y
2、配置memcached文件:vim /etc/sysconfig/memcached
PORT="11211" USER="memcached" MAXCONN="4096" #最大连接数改为4096 CACHESIZE="1024" #内存改为1G OPTIONS="-l 0.0.0.0,::1" #监听端口改为0.0.0.0
3、将memcached配置文件复制到另一个节点上,并启动服务且设置为开机启动
[root@mysql1 ~]# scp /etc/sysconfig/memcached 192.168.7.107:/etc/sysconfig/ [root@mysql1 ~]# systemctl start memcached [root@mysql1 ~]# systemctl enable memcached
在两台控制端安装控制msyql和memcached组件
[root@openstack-1 ~]# yum install python2-PyMySQL -y [root@openstack-1 ~]# yum install python-memcached -y
六、安装并配置haproxy和keepalived服务
1、单独找一个机器,安装配置keepalived文件
1、安装keepalived文件
[root@mysql1 ~]# yum install haproxy keepalived -y
2、配置keepalived文件
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_iptables #添加此项,就不会出现iptables防火墙规则 vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state MASTER #默认为MASTER角色 interface eth0 virtual_router_id 51 priority 100 #优先级改为100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.7.248 dev eth0 label eth0:0 #添加VIP地址 } }
3、启动keepalived服务
[root@mysql1 ~]# systemctl start keepalived
2、安装配置haproxy文件
1、安装haproxy文件
[root@mysql1 ~]# yum install haproxy keepalived -y
2、配置haproxy,并监听mysql数据库和rabbit端口 :vim /etc/haproxy/haproxy.cfg
global maxconn 100000 #chroot /usr/local/haproxy #不是源码编译,暂时注释掉 #stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin user haproxy group haproxy daemon nbproc 2 绑定两个cpu就开启下面两个,绑定四个就开启四个 cpu-map 1 0 cpu-map 2 1 #cpu-map 3 2 #cpu-map 4 3 pidfile /usr/local/haproxy/run/haproxy.pid log 127.0.0.1 local3 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 haadmin:q1w2e3r4ys listen openstack_web_port bind 192.168.7.248:3306 #监听后端数据库服务 mode tcp log global server 192.168.7.106 192.168.7.106:3306 check inter 3000 fall 3 rise 5 listen openstack_rabbitmq_port bind 192.168.7.248:5672 #监听后端rabbitmq服务 mode tcp log global server 192.168.7.106 192.168.7.106:5672 check inter 3000 fall 3 rise 5 server 192.168.7.107 192.168.7.107:5672 check inter 3000 fall 3 rise 5 backup listen openstack_rabbitmq_port bind 192.168.7.248:11211 #监听后端memcached服务 mode tcp log global server 192.168.7.106 192.168.7.106:11211 check inter 3000 fall 3 rise 5 server 192.168.7.107 192.168.7.107:11211 check inter 3000 fall 3 rise 5 backup
3、启动haproxy服务
[root@mysql1 ~]# systemctl start haproxy
七、在控制端测试连接效果
1、测试数据库,此时已经可以连接
[root@openstack-1 ~]# telnet 192.168.7.248 3306 Trying 192.168.7.248... Connected to 192.168.7.248. Escape character is '^]'. HHost '192.168.7.100' is not allowed to connect to this MariaDB serverConnection closed by foreign host. #由于没有授权,暂时不能连接
2、测试rabbitmq,此时已经可以连接
[root@openstack-1 ~]# telnet 192.168.7.248 5672 Trying 192.168.7.248... Connected to 192.168.7.248. Escape character is '^]'.
3、测试memcached服务,此时都可以连接
[root@openstack-1 ~]# telnet 192.168.7.248 11211 Trying 192.168.7.248... Connected to 192.168.7.248. Escape character is '^]'.
到此,openstack基础的环境搭建准备已经完成,后续更精彩!!!