- Mariadb Galera Cluster集群介绍
Mariadb Galera Cluster是MySQL高可用性和可扩展性的解决方案
官网:http://galeracluster.com/products/
MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步的系统架构,业务层面无需做读写分
离工作,数据库读写压力都能按照既定的规则分发到 各个节点上去。在数据方面完全兼容 MariaDB 和 MySQL。
特性:
(1).同步复制 Synchronous replication
(2).Active-active multi-master 拓扑逻辑
(3).可对集群中任一节点进行数据读写
(4).自动成员控制,故障节点自动从集群中移除
(5).自动节点加入
(6).真正并行的复制,基于行级
(7).直接客户端连接,原生的 MySQL 接口
(8).每个节点都包含完整的数据副本
(9).多台数据库中数据同步由 wsrep 接口实现
缺点:
(1).目前的复制仅仅支持InnoDB存储引擎,任何写入其他引擎的表,包括mysql.*表将不会复制,但是DDL语句会被复制的,因此创建用户将会
被复制,但是insert into mysql.user…将不会被复制的.
(2).DELETE操作不支持没有主键的表,没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集.
(3).在多主环境下LOCK/UNLOCK TABLES不支持,以及锁函数GET_LOCK(), RELEASE_LOCK()…
(4).查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。
(5).允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。
(6).由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节
点将中止。对 于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
(7).XA事务不支持,由于在提交上可能回滚。
(8).整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的
节点应使用统一的硬件。
(9).集群节点建议最少3个。
(10).如果DDL语句有问题将破坏集群。
架构图:
- 配置Mariadb Galera官方源地址
在三个node上分别执行下面的操作,目的是安装Galera。
在/etc/yum.repos.d下创建一个repo文件
vim /etc/yum.repos.d/mariadb.repo
添加:
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
enabled=1
gpgcheck=0
- 安装Mariadb Galera
在三个node上分别执行:
yum install -y MariaDB-server MariaDB-client galera xinetd rsync ntpdate
systemctl start mariadb.service
.......
- 配置 MariaDB Cluster集群
第一个节点上,添加内容如下:
vim /etc/my.cnf.d/client.cnf
添加内容:
[client]
port = 3306
.......
vim /etc/my.cnf.d/server.cnf
添加内容:
[isamchk]
key_buffer_size = 16M # key_buffer_size这个参数是用来设置索引块(index blocks)缓存的大小,它被所有线程共享,严格说是
它决定了数据库索引处理的速度,尤其是索引读的速度
[mysqld]
binlog_format=ROW #该参数可以有三种设置值:row、statement和mixed。row代表二进制日志中记录数据表每一行经过写操作
后被修改的最终值。各个参与同步的Salve节点,也会参照这个最终值,将自己数据表上的数据进行修改;statement形式是在日志中记录
数据操作过程,而非最终的执行结果。各个参与同步的Salve节点会解析这个过程,并形成最终记录;mixed设置值,是以上两种记录方
式的混合体,MySQL服务会自动选择当前运行状态下最适合的日志记录方式。
character-set-server = utf8 #设置数据库的字符集
collation-server = utf8_general_ci
max_allowed_packet = 256M # 设置mysql接收数据包最大值,比如你执行的sql语句过大,可能会执行失败,这个参数就是让能
执行的sql语句大小调高
max_connections = 10000 # 设置mysql集群最大的connection连接数,这个在openstack环境里非常重要
ignore-db-dirs = lost+found # 设置忽略把lost+found当做数据目录
init-connect = SET NAMES utf8 # 设置初始化字符集编码(仅对非超级用户有效)
innodb_autoinc_lock_mode = 2 #这种模式下任何类型的inserts都不会采用AUTO-INC锁,性能最好,但是在同一条语句内部产生
auto_increment值间隙。
innodb_buffer_pool_size = 2000M #设置缓冲池字节大小,InnoDB缓存表和索引数据的内存区域;这个值设置的越大,在不止一次
的访问相同的数据表数据时,消耗的磁盘I / O就越少。在一个专用的数据库服务器,则可能将其设置为高达80%的机器物理内存大小。不
过在实际的测试中,发现无限的增大这个值,带来的性能提升也并不显著,对CPU的压力反而增大,设置合理的值才是最优。
innodb_doublewrite = 0 #设置0是禁用doublewrite,一般在不关心数据一致性(比如使用了RAID0)或文件系统可以保证不会出现
部分写失效,你可以通过将innodb_doublewrite参数设置为0还禁用doublewrite。
innodb_file_format = Barracuda #设置文件格式为Barracuda,Barracude是innodb-plugin后引入的文件格式,同时
Barracude也支持Antelope文件格式,Barracude在数据压缩上优于Antelope,配合下面的innodb_file_per_table=1使用
innodb_file_per_table = 1 #开启独立的表空间,使每个 Innodb的表,有自已独立的表空间。如删除文件后可以回收那部分空间。
.......
[galera]
bind-address=10.1.1.120 # mysql服务绑定的IP
wsrep_provider = /usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address = "gcomm://10.1.1.120,10.1.1.121,10.1.1.122" #gcomm是特殊的地址,仅仅是Galera cluster初始化启动时
候使用
.......
[mysqld_safe]
nice = 0 # 调用系统的nice命令设置进程优先级,linux系统的普通用户只能在0-19中设置,mysql用户为普通用户,设置为0 应该就是
让mysql进程优先级最高了。
.......
[mysqldump]
max_allowed_packet = 16M # MySQL根据配置文件会限制Server接受的数据包大小。有时候大的插入和更新会受
max_allowed_packet 参数限制,导致写入或者更新失败。
quick # 强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中
quote-names #使用()引起表和列名。默认为打开状态,使用--skip-quote-names取消该选项。
第二个和第三个节点的my.cnf配置如下,注意改下相关IP和节点名称:
vim /etc/my.cnf.d/client.cnf
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
.......
[mysqld]
binlog_format=ROW
character-set-server = utf8
collation-server = utf8_general_ci
max_allowed_packet = 256M
max_connections = 10000
.......
innodb_autoinc_lock_mode = 2
innodb_buffer_pool_size = 2000M
innodb_doublewrite = 0
.......
[galera]
bind-address = 10.1.1.121
wsrep_provider = /usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address = "gcomm://10.1.1.120,10.1.1.121,10.1.1.122"
.......
[mysqld_safe]
nice = 0
.......
vim mysql-clients.cnf:
[mysqldump]
max_allowed_packet = 16M
.......
- 设置mysql最大连接数
修改完server.cnf,然后后修改下mysql.service文件,让数据库最大支持连接数调整到10000(这样做是很有用的,笔者在维护
openstack环境中,在VM数量比较大负载较高的时候,经常出现因为数据库连接数不够导致访问界面出现各种内容刷不出的情况)
.......
都修改完毕后,执行systemctl daemon-reload
最等启动了mariadb服务就能通过show variables like ‘max_connections‘; 可查看当前连接数值
- 关于mysql服务的启动顺序
三个节点my.cnf都配置完成后,全部执行systemctl stop mariadb.service && systemctl disable mariadb.service
然后在第一个节点用下面的命令初始化启动mariadb集群服务
/usr/sbin/mysqld --wsrep-new-cluster --user=root &
.......
- 查看mariadb数据库集群状态
mysql -uroot -p
.......
二、安装RabbitMQ Cluster集群
- 每个节点都安装erlang
yum install -y erlang
.......
- 每个节点都启动rabbitmq及设置开机启动
systemctl enable rabbitmq-server.service
systemctl restart rabbitmq-server.service
systemctl status rabbitmq-server.service
systemctl list-unit-files |grep rabbitmq-server.service
.......
7 .查看RabbitMQ插件
/usr/lib/rabbitmq/bin/rabbitmq-plugins list
.......
- 查看rabbitmq状态
rabbitmqctl cluster_status
- 集群配置
.......
在controller1上操作:
scp /var/lib/rabbitmq/.erlang.cookie controller2:/var/lib/rabbitmq/.erlang.cookie
.......
在controller2上操作:
systemctl restart rabbitmq-server
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@controller1
rabbitmqctl start_app
.......
查看集群状态:
rabbitmqctl cluster_status
- 集群管理
如果遇到rabbitmq脑裂情况,按以下步骤操作,重新设置集群:
登录没加入集群的节点:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
.......
删除后执行systemctl restart rabbitmq-server rabbitmq服务一般能起来。
- RabbitMQ优化
.......
三、 安装Pacemaker
三个ctr节点需要安装以下包:
pacemaker
pcs (CentOS or RHEL) or crmsh
corosync
fence-agents (CentOS or RHEL) or cluster-glue
resource-agents
添加一个network_ha-clustering_Stable的源:
cd /etc/yum.repos.d
vim ha-clustering.repo
添加以下内容:
[network_ha-clustering_Stable]
name=Stable High Availability/Clustering packages (CentOS_CentOS-7)
type=rpm-md
.......
gpgkey=http://download.opensuse.org/repositories/network:/haclustering:/
Stable/CentOS_CentOS//repodata/repomd.xml.key
yum install -y lvm2 cifs-utils quota psmisc
yum install -y pcs pacemaker corosync fence-agents-all resource-agents
.......
- 三个ctr节点都设置PCS服务开机启动
systemctl enable pcsd
systemctl enable corosync
.......
- 设置密码,每个节点就需要设置,而且密码必须一样
passwd hacluster
- 配置编写corosync.conf 文件
vim /etc/corosync/corosync.conf
添加以下内容:
totem {
version: 2
secauth: off
cluster_name: openstack-cluster
transport: udpu
}
.......
quorum {
provider: corosync_votequorum
}
logging {
to_logfile: yes
logfile: /var/log/cluster/corosync.log
to_syslog: yes
}
在ctr1节点上生成密钥:
cd /etc/corosync/
ssh-keygen -t rsa
corosync-keygen
chmod 400 authkey
.......
- 设置集群相互验证, 在controller1上操作即可
pcs cluster auth controller1 controller2 controller3 -u hacluster -p passw0rd --force
- 在controller1上创建并启动名为openstack-cluster的集群,其中controller1 controller2 controller3为集群成员:
pcs cluster setup --force --name openstack-cluster controller1 controller2 controller3
- 设置集群自启动
pcs cluster enable --all
.......
- 通过crm设置VIP
crm
crm(live)# config
crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 params ip=9.110.187.128 cidr_netmask=24 nic=eno16777736 op .......
四、 安装HAProxy
- 安装Haproxy
在三个节点上分别安装HAProxy
.......
- 跟rsyslog结合配置haproxy日志,在三个节点上都操作
cd /etc/rsyslog.d/
vim haproxy.conf
添加:
$ModLoad imudp
$UDPServerRun 514
$template Haproxy,"%rawmsg% \n"
local0.=info -/var/log/haproxy.log;Haproxy
local0.notice -/var/log/haproxy-status.log;Haproxy
systemctl restart rsyslog.service
systemctl status rsyslog.service
- 在三个节点上配置haproxy.cfg
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig
vim haproxy.cfg
添加下面内容:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
chroot /usr/share/haproxy
user haproxy
group haproxy
daemon
.......
frontend stats-front
bind *:8088
mode http
default_backend stats-back
backend stats-back
mode http
balance source
stats uri /haproxy/stats
stats auth admin:passw0rd
listen RabbitMQ-Server-Cluster
bind 9.110.187.128:56720
mode tcp
balance roundrobin
option tcpka
server controller1 controller1:5672 check inter 5s rise 2 fall 3
server controller2 controller2:5672 check inter 5s rise 2 fall 3
server controller3 controller3:5672 check inter 5s rise 2 fall 3
listen RabbitMQ-Web
bind 9.110.187.128:15673
mode tcp
balance roundrobin
option tcpka
server controller1 controller1:15672 check inter 5s rise 2 fall 3
server controller2 controller2:15672 check inter 5s rise 2 fall 3
server controller3 controller3:15672 check inter 5s rise 2 fall 3
.......
listen nova_compute_api_cluster
bind 9.110.187.128:8774
balance source
option tcpka
option httpchk
option tcplog
server controller1 controller1:9774 check inter 2000 rise 2 fall 5
server controller2 controller2:9774 check inter 2000 rise 2 fall 5
server controller3 controller3:9774 check inter 2000 rise 2 fall 5
listen nova_vncproxy_cluster
bind 9.110.187.128:6080
balance source
option tcpka
option tcplog
server controller1 controller1:6080 check inter 2000 rise 2 fall 5
server controller2 controller2:6080 check inter 2000 rise 2 fall 5
server controller3 controller3:6080 check inter 2000 rise 2 fall 5
.......
重启下haproxy,如果发现服务状态不对,先不管,后面改系统内核参数可以解决
systemctl start haproxy.service
systemctl status haproxy.service
- 配置Haproxy能监控Galera数据库集群
在controller1上进入mysql,创建clustercheck
MariaDB [(none)]> grant process on . to ‘clustercheckuser‘@‘localhost‘ identified by ‘clustercheckpassword!‘;
.......
三个节点分别创建clustercheck文本,里面是clustercheckuser用户和密码
vim /etc/sysconfig/clustercheck
添加:
MYSQL_USERNAME=clustercheckuser
.......
确认下是否存在/usr/bin/clustercheck 脚本,如果没有从网上下载一个,然后放到/usr/bin目录下面,记得chmod +x
/usr/bin/clustercheck 赋予权限
.......
在controller1上检查haproxy服务状态
clustercheck (存在/user/bin/clustercheck可以直接运行clustercheck命令)
结合xinetd监控Galera服务(三个节点都安装xinetd)
yum -y install xinetd
vim /etc/xinetd.d/mysqlchk
添加以下内容:
default: on
.......
.......
scp /etc/xinetd.d/mysqlchk controller3:/etc/xinetd.d/mysqlchk
vim /etc/services
最后一行添加:mysqlchk 9200/tcp # mysqlchk
重启xinetd服务
systemctl restart xinetd.service
systemctl status xinetd.service
- 三个节点修改内核参数
修改内核参数的作用是让haproxy正常启动
.......
- 三个节点启动haproxy服务
systemctl restart haproxy.service
systemctl status haproxy.service
- 访问haproxy 前端web平台
http://9.110.187.128:8088/haproxy/stats admin/passw0rd
Galera集群服务已经监控成功
五、安装配置Keystone
- 配置openstack Mitaka yum源
cd /etc/yum.repos.d
vim openstack-mitaka.repo
添加:
.......
2、在controller1上创建keystone数据库
mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE keystone;
3、在controller1上创建数据库用户及赋予权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone. TO ‘keystone‘@‘localhost‘ IDENTIFIED BY ‘passw0rd‘;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone. TO ‘keystone‘@‘%‘ IDENTIFIED BY ‘passw0rd‘;
注意将passw0rd 替换为自己的数据库密码
- 在三个节点上分别安装keystone
yum -y install openstack-keystone httpd mod_wsgi python-openstackclient memcached python-memcached openstackutils
5.在三个节点上分别启动memcache服务并设置开机自启动
systemctl enable memcached.service
systemctl start memcached.service
systemctl status memcached.service
6、配置/etc/keystone/keystone.conf文件
.......
- 配置httpd.conf文件
vim /etc/httpd/conf/httpd.conf
ServerName controller1 (如果是controller2那就写controller2)
Listen 8080 (80->8080 haproxy里用了80,不修改启动不了)
- 配置keystone与httpd结合
vim /etc/httpd/conf.d/wsgi-keystone.conf
.......
- 在controller1上设置数据库同步
su -s /bin/sh -c "keystone-manage db_sync" keystone
- 三个节点都要启动httpd,并设置httpd开机启动
systemctl enable httpd.service
systemctl start httpd.service
systemctl status httpd.service
systemctl list-unit-files |grep httpd.service
- 在controller1上创建 admin 用户角色
keystone-manage bootstrap \
--bootstrap-password passw0rd \
--bootstrap-username admin \
--bootstrap-project-name admin \
.......
这样,就可以在 openstack 命令行里使用 admin 账号登录了。
验证,测试是否已配置合理:
openstack project list --os-username admin --os-project-name admin --os-user-domain-id default --os-project-domain-id
default --os-identity-api-version 3 --os-auth-url http://demo.openstack.com:5000 --os-password passw0rd
- 在controller1上创建admin用户环境变量,创建/root/admin-openrc 文件并写入如下内容:
vim /root/admin-openrc
添加以下内容:
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_DOMAIN_ID=default
export OS_USERNAME=admin
.......
- 在controller1上创建endpoint
source /root/admin-openrc
openstack endpoint create --.......
- 在controller1上创建service项目
openstack project create --domain default --description "Service Project" service
.......
- 在controller1上创建demo用户环境变量,创建/root/demo-openrc 文件并写入下列内容:
vim /root/demo-openrc
添加:
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_DOMAIN_ID=default
export OS_USERNAME=demo
export OS_PROJECT_NAME=demo
.......
- 另外两个节点Keystone的安装
另外两个controller节点只需要从第三点开始安装即可
具体要操作的步骤点列表: 4、 5、6 、7、8、 10、11、12
六、安装配置glance
1、在controller1上创建glance数据库
MariaDB [(none)]> CREATE DATABASE glance;
2、在controller1上创建数据库用户并赋予权限
.......
3、在controller1上创建glance用户及赋予admin权限
source /root/admin-openrc
.......
4、在controller1上创建image服务
openstack service create --name glance --description "OpenStack Image service" image
5、在controller1上创建glance的endpoint
.......
6、在controller1、2、3上安装glance相关rpm包
yum install openstack-glance python-glance python-glanceclient -y
7、在controller1、2、3上修改glance配置文件/etc/glance/glance-api.conf
注意红色的密码设置成你自己的
>/etc/glance/glance-api.conf
openstack-config --set /etc/glance/glance-api.conf DEFAULT debug False
openstack-config --set /etc/glance/glance-api.conf DEFAULT verbose True
openstack-config --set /etc/glance/glance-api.conf DEFAULT bind_host controller1
openstack-config --set /etc/glance/glance-api.conf DEFAULT bind_port 9393
openstack-config --set /etc/glance/glance-api.conf DEFAULT registry_host controller1
openstack-config --set /etc/glance/glance-api.conf DEFAULT registry_port 9191
openstack-config --set /etc/glance/glance-api.conf DEFAULT auth_region RegionOne
openstack-config --set /etc/glance/glance-api.conf DEFAULT registry_client_protocol http
.......
8、在controller1、2、3上修改glance配置文件/etc/glance/glance-registry.conf:
>/etc/glance/glance-registry.conf
openstack-config --set /etc/glance/glance-registry.conf DEFAULT debug False
openstack-config --set /etc/glance/glance-registry.conf DEFAULT verbose True
openstack-config --set /etc/glance/glance-registry.conf DEFAULT bind_host controller1
openstack-config --set /etc/glance/glance-registry.conf DEFAULT bind_port 9191
openstack-config --set /etc/glance/glance-registry.conf DEFAULT workers 4
openstack-config --set /etc/glance/glance-registry.conf oslo_messaging_rabbit rabbit_hosts 10.1.1.120:5672, 10.1.1.121:5672,
10.1.1.122:5672
.......
9、controller1同步glance数据库
su -s /bin/sh -c "glance-manage db_sync" glance
10、在controller1、2、3上启动glance及设置开机启动
systemctl enable openstack-glance-api.service openstack-glance-registry.service
.......
11、在controller1、2、3上将glance版本号写入环境变量中
echo " " >> /root/admin-openrc && \
echo " " >> /root/demo-openrc && \
.......
- 搭建glance后端存储
因为是HA环境,3个控制节点必须要有一个共享的后端存储,不然request发起请求的时候不确定会去调用哪个控制节点的glance服务,
如果没有共享存储池存镜像,那么会遇到创建VM时候image找不到的问题。
这里我们采用NFS的方式把glance的后端存储建立起来,当然在实际的生产环境当中,一般会用ceph、GlusterFS等方式,这里我们以
NFS为例子来讲诉后端存储的搭建。
首先准备一台物理机或者虚拟机,要求空间要大,网络最好是在万兆
这里我们用10.1.1.134这台虚拟机
首先在这台机器上安装glance组件:
.......
systemctl start nfs-server
让NFS共享目录生效:
showmount -e
接着在3个controller节点上做如下操作:
mount -t nfs 10.1.1.134:/var/lib/glance/images /var/lib/glance/images
echo "/usr/bin/mount -t nfs 10.1.1.134:/var/lib/glance/ /var/lib/glance/" >> /etc/rc.d/rc.local
.......
13、在controller1上下载测试镜像文件
14、在controller1上传镜像到glance
source /root/admin-openrc
glance image-create --name "cirros-0.3.4-x86_64" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --containerformat
bare --visibility public --progress
如果你做好了一个CentOS6.7系统的镜像,也可以用这命令操作,例:
.......
查看镜像列表:
glance image-list
15、 其他两个节点重复6、7、8、10、11步骤
七、安装配置nova
1、在controller1上创建nova数据库
MariaDB [(none)]> CREATE DATABASE nova;
.......
2、在controller1上创建数据库用户并赋予权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO ‘nova‘@‘localhost‘ IDENTIFIED BY ‘passw0rd‘;
.......
3、在controller1上创建nova用户及赋予admin权限
source /root/admin-openrc
openstack user create --domain default nova --password passw0rd
.......
4、在controller1上创建computer服务
openstack service create --name nova --description "OpenStack Compute" compute
5、在controller1上创建nova的endpoint
.......
6、在controller1、2、3上安装nova相关软件
yum install -y openstack-nova-api openstack-nova-cert openstack-nova-conductor openstack-nova-console openstacknova-
novncproxy openstack-nova-scheduler
7、在controller1、2、3上配置nova的配置文件/etc/nova/nova.conf
>/etc/nova/nova.conf
openstack-config --set /etc/nova/nova.conf DEFAULT debug False
openstack-config --set /etc/nova/nova.conf DEFAULT verbose True
openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf DEFAULT osapi_compute_listen_port 9774
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 10.1.1.120
openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron True
openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
.......
注意:其他节点上记得替换IP,还有密码,文档红色以及绿色的地方。
8、在controller1上同步nova数据
su -s /bin/sh -c "nova-manage api_db sync" nova
.......
9、在controller1上设置开机启动
systemctl enable openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstacknova-
scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
.......
.......
systemctl list-unit-files |grep openstack-nova-*
10、随便一个节点上验证nova服务
unset OS_TOKEN OS_URL
source /root/admin-openrc
.......
openstack endpoint list 查看endpoint list命令
- controller2 & controller3 节点分别重复6、7、9、10
注意第7步的绿色IP记得换成本机的IP
八、安装配置neutron
1、在controller1上创建neutron数据库
MariaDB [(none)]> CREATE DATABASE neutron;
2、在controller1上创建数据库用户并赋予权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron. TO ‘neutron‘@‘localhost‘ IDENTIFIED BY ‘passw0rd‘;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron. TO ‘neutron‘@‘%‘ IDENTIFIED BY ‘passw0rd‘;
3、在controller1上创建neutron用户及赋予admin权限
source /root/admin-openrc
.......
4、在controller1上创建network服务
openstack service create --name neutron --description "OpenStack Networking" network
5、在controller1上创建endpoint
.......
6、在controller1、2、3上安装neutron相关软件
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y
7、在controller1、2、3上配置neutron配置文件/etc/neutron/neutron.conf
>/etc/neutron/neutron.conf
openstack-config --set /etc/neutron/neutron.conf DEFAULT debug False
openstack-config --set /etc/neutron/neutron.conf DEFAULT verbose true
openstack-config --set /etc/neutron/neutron.conf DEFAULT bind_host controller1
openstack-config --set /etc/neutron/neutron.conf DEFAULT bind_port 9797
openstack-config --set /etc/neutron/neutron.conf DEFAULT core_plugin neutron.plugins.ml2.plugin.Ml2Plugin
openstack-config --set /etc/neutron/neutron.conf DEFAULT service_plugins
neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,neutron.services.metering.metering_plugin.MeteringPlugin
openstack-config --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit
.......
openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_max_retries 0
openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit amqp_durable_queues False
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_uri http://demo.openstack.com:5000
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://demo.openstack.com:35357
.......
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_vxlan vni_ranges 1:1000
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset True
9、在controller1、2、3上配置/etc/neutron/plugins/ml2/linuxbridge_agent.ini
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini DEFAULT debug false
openstack-config --
.......
注意eno67109408是public网卡,一般这里写的网卡名都是能访问外网的,如果不是外网网卡,那么VM就会与外界网络隔离。
10、在controller1、2、3上配置 /etc/neutron/l3_agent.ini
openstack-config --set /etc/neutron/l3_agent.ini DEFAULT interface_driver
neutron.agent.linux.interface.BridgeInterfaceDriver
.......
11、在controller1、2、3上配置/etc/neutron/dhcp_agent.ini
openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver
neutron.agent.linux.interface.BridgeInterfaceDriver
.......
12、在controller1、2、3上重新配置/etc/nova/nova.conf,配置这步的目的是让compute节点能使用上neutron网络
openstack-config --set /etc/nova/nova.conf neutron auth_plugin password
.......
13、在controller1、2、3上将dhcp-option-force=26,1450写入/etc/neutron/dnsmasq-neutron.conf
echo "dhcp-option-force=26,1450" >/etc/neutron/dnsmasq-neutron.conf
14、在controller1、2、3上配置/etc/neutron/metadata_agent.ini
openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_ip demo.openstack.com
.......
15、在controller1、2、3上创建软链接
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
16、在controller1上同步数据库
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file
/etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
17、在controller1、2、3上重启nova服务,因为刚才改了nova.conf
systemctl restart openstack-nova-api.service
systemctl status openstack-nova-api.service
18、在controller1、2、3上重启neutron服务并设置开机启动
systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutronmetadata-
agent.service
.......
19、在controller1、2、3上启动neutron-l3-agent.service并设置开机启动
systemctl enable neutron-l3-agent.service
systemctl start neutron-l3-agent.service
systemctl status neutron-l3-agent.service
20、随便一节点上执行验证
source /root/admin-openrc
.......
neutron agent-list
21、创建vxLan模式网络,让虚拟机能外出
a. 首先先执行环境变量
source /root/admin-openrc
b. 创建flat模式的public网络,注意这个public是外出网络,必须是flat模式的
.......
f. 创建路由,我们在界面上操作
点击项目-->网络-->路由-->新建路由
路由名称随便命名,我这里写"router", 管理员状态,选择"上"(up),外部网络选择"provider"
点击"新建路由"后,提示创建router创建成功!
.......
22、检查网络服务
neutron agent-list
看服务是否是笑脸
九、安装Dashboard
1、安装dashboard相关软件包
yum install openstack-dashboard -y
2、修改配置文件/etc/openstack-dashboard/local_settings
vim /etc/openstack-dashboard/local_settings
直接覆盖我给的local_settings文件也行(为了减少出错,大家还是用我提供的local_settings文件替换覆盖)
3、启动dashboard服务并设置开机启动
systemctl enable httpd.service memcached.service
systemctl restart httpd.service memcached.service
systemctl status httpd.service memcached.service
到此,Controller HA节点搭建完毕,打开firefox浏览器即可访问http://9.110.187.128/dashboard/ 可进入openstack界面!
十、安装配置cinder
1、在controller1上创建数据库用户并赋予权限
MariaDB [(none)]> CREATE DATABASE cinder;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder. TO ‘cinder‘@‘localhost‘ IDENTIFIED BY ‘passw0rd‘;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder. TO ‘cinder‘@‘%‘ IDENTIFIED BY ‘passw0rd‘;
2、在controller1上创建cinder用户并赋予admin权限
source /root/admin-openrc
openstack user create --domain default cinder --password passw0rd
openstack role add --project service --user cinder admin
3、在controller1上创建volume服务
openstack service create --name cinder --description "OpenStack Block Storage" volume
openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
4、在controller1上创建endpoint
.......
5、在controller1、2、3上安装cinder相关服务
yum install openstack-cinder -y
6、在controller1、2、3上配置cinder配置文件
>/etc/cinder/cinder.conf
openstack-config --set /etc/cinder/cinder.conf DEFAULT debug False
openstack-config --set /etc/cinder/cinder.conf DEFAULT verbose True
openstack-config --set /etc/cinder/cinder.conf DEFAULT my_ip 10.1.1.120
openstack-config --set /etc/cinder/cinder.conf DEFAULT rpc_backend rabbit
openstack-config --set /etc/cinder/cinder.conf DEFAULT osapi_volume_listen_port 8778
openstack-config --set /etc/cinder/cinder.conf DEFAULT auth_strategy keystone
.......
openstack-config --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_retry_backoff 2
openstack-config --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_max_retries 0
openstack-config --set /etc/cinder/cinder.conf oslo_messaging_rabbit amqp_durable_queues False
openstack-config --set /etc/cinder/cinder.conf keystone_authtoken auth_uri http://demo.openstack.com:5000
openstack-config --set /etc/cinder/cinder.conf keystone_authtoken auth_url http://demo.openstack.com:35357
.......
openstack-config --set /etc/cinder/cinder.conf oslo_concurrency lock_path /var/lib/cinder/tmp
7、在controller1上同步数据库
su -s /bin/sh -c "cinder-manage db sync" cinder
8、在controller1、2、3上启动cinder服务,并设置开机启动
systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
.......
注意!其他controller2和controller3 重复做5、6、8步即可!
11、安装Cinder节点,Cinder节点这里我们需要额外的添加一个硬盘(/dev/sdb)用作cinder的存储服务(注意!这一步是在cinder节点
操作的)
yum install lvm2 -y
.......
- 编辑存储节点lvm.conf文件(注意!这一步是在cinder节点操作的)
vim /etc/lvm/lvm.conf
在devices 下面添加 filter = [ "a/sda/", "a/sdb/", "r/.*/"] ,如图:
然后重启下lvm2服务:
systemctl restart lvm2-lvmetad.service
systemctl status lvm2-lvmetad.service
15、安装openstack-cinder、targetcli (注意!这一步是在cinder节点操作的)
yum install openstack-cinder targetcli python-keystone ntpdate -y
16、配置cinder配置文件(注意!这一步是在cinder节点操作的)
>/etc/cinder/cinder.conf
openstack-config --set /etc/cinder/cinder.conf DEFAULT debug False
openstack-config --set /etc/cinder/cinder.conf DEFAULT verbose True
.......
openstack-config --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_ha_queues True
openstack-config --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_use_ssl False
openstack-config --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_retry_interval 1
.......
openstack-config --set /etc/cinder/cinder.conf keystone_authtoken auth_uri http://demo.openstack.com:5000
openstack-config --set /etc/cinder/cinder.conf keystone_authtoken auth_url http://demo.openstack.com:35357
openstack-config --set /etc/cinder/cinder.conf keystone_authtoken memcached_servers
controller1:11211,controller2:11211,controller3:11211
openstack-config --set /etc/cinder/cinder.conf keystone_authtoken auth_type password
openstack-config --set /etc/cinder/cinder.conf keystone_authtoken project_domain_name default
openstack-config --set /etc/cinder/cinder.conf keystone_authtoken user_domain_name default
.......
openstack-config --set /etc/cinder/cinder.conf lvm iscsi_protocol iscsi
openstack-config --set /etc/cinder/cinder.conf lvm iscsi_helper lioadm
openstack-config --set /etc/cinder/cinder.conf oslo_concurrency lock_path /var/lib/cinder/tmp
17、启动openstack-cinder-volume和target并设置开机启动(注意!这一步是在cinder节点操作的)
systemctl enable openstack-cinder-volume.service target.service
.......
18、在任意一个节点上验证cinder服务是否正常
source /root/admin-openrc
cinder service-list
十一、把相关服务和资源添加到Pacermaker
- Pacermaker参数说明
primitive添加格式:
primitive 唯一ID 资源代理类型:资源代理的提供程序:资源代理名称
params attr_list
meta attr_list
op op_type [<attribute>=<value>...] ...]
primitive 参数说明:
资源代理类型: lsb, ocf, stonith, service
资源代理的提供程序: heartbeat , pacemaker
资源代理名称:即resource agent, 如:IPaddr2,httpd, mysql
params:实例属性,是特定资源类的参数,用于确定资源类的行为方式及其控制的服务实例。
meta:元属性, 是可以为资源添加的选项。它们告诉 CRM 如何处理特定资源。
op:操作,默认情况下,群集不会确保您的资源一直正常。要指示群集确保资源状况依然正常,需要向资源的定义中添加一个监视操作
monitor。可为所有类或资源代理添加monitor。
op_type :包括 start,stop,monitor
interval :执行操作的频率。单位:秒。
timeout : 需要等待多久才声明操作失败。
requires :需要满足什么条件才能发生此操作。允许的值:nothing、quorum 和 fencing。默认值取决于是否启用屏障和资源的类是否
为 stonith。对于 STONITH 资源,默认值为 nothing。
on-fail :此操作失败时执行的操作。允许的值:
ignore:假装资源没有失败。
block:不对资源执行任何进一步操作。
stop:停止资源并且不在其他位置启动该资源。
restart:停止资源并(可能在不同的节点上)重启动。
fence:关闭资源失败的节点 (STONITH)。
standby:将所有资源从资源失败的节点上移走。
enabled 如果值为 false,将操作视为不存在。允许的值:true、false。
例:
primitive r0 ocf:linbit:drbd \
params drbd_resource=r0 \
op monitor role=Master interval=60s \
op monitor role=Slave interval=300s
meta元属性参数说明:
priority:如果不允许所有的资源都处于活动状态,群集会停止优先级较低的资源以便保持较高优先级资源处于活动状态。
target-role: 此资源试图保持的状态,包括started和stopped
is-managed:是否允许群集启动和停止资源,包括true和 false。
migration-threshold:用来定义资源的故障次数,假设已经为资源配制了一个首选在节点上运行的位置约束。如果那里失败了,系统会检
查 migration-threshold 并与故障计数进行比较。如果故障计数 >= migration-threshold,会将资源迁移到下一个自选节点。
默认情况下,一旦达到阈值,就只有在管理员手动重置资源的故障计数后(在修复故障原因后),才允许在该节点上运行有故障的资源。
但是,可以通过设置资源的 failure-timeout 选项使故障计数失效。如果设置migration-threshold=2 和 failure-timeout=60s ,将会导
致资源在两次故障后迁移到新的节点,并且可能允许在一分钟后移回(取决于黏性和约束分数)。
迁移阈值概念有两个例外,在资源启动失败或停止失败时出现:启动故障会使故障计数设置为 INFINITY,因此总是导致立即迁移。停止故障会
导致屏障(stonith-enabled 设置为 true 时,这是默认设置)。如果不定义 STONITH资源(或 stonith-enabled 设置为 false),则该资源根本
不会迁移。
failure-timeout:在恢复为如同未发生故障一样正常工作(并允许资源返回它发生故障的节点)之前,需要等待几秒钟,,默认值0
(disabled)
resource-stickiness:资源留在所处位置的自愿程度如何,即黏性,默认为0。
multiple-active:如果发现资源在多个节点上活动,群集该如何操作,包括:
block(将资源标记为未受管),stop_only(停止所有活动实例),stop_start(默认值,停止所有活动实例,并在某个节点启动资源)
requires:定义某种条件下资源会被启动。默认资源会被fencing,为以下这几种值时除外
- nothing - 集群总能启动资源;
- quorum - 集群只有在大多数节点在线时能启动资源,当stonith-enabled为false 或资源为stonith时,其为默认值;
- fencing - 集群只有在大多数节点在线,或在任何失败或未知节点被关闭电源时,才能启动资源;
- unfencing - 集群只有在大多数节点在线,或在任何失败或未知节点被关闭电源时并且只有当节点没被fencing时,才能启动资源。当为
某一fencing设备,而将stonith的meta参数设置为provides=unfencing时,其为默认值。
- 添加RabbitMQ 服务到PCS
rabbitmq的PCS资源在/usr/lib/ocf/resource.d/rabbitmq 下
在每个控制节点上操作:
systemctl disable rabbitmq-server
在controller1上操作:
cat /var/lib/rabbitmq/.erlang.cookie 查看本机rabbitmq cookie值,下面红色部分就是erlang cookie值
crm configure
primitive p_rabbitmq-server ocf:rabbitmq:rabbitmq-server-ha \
params erlang_cookie=OBXLKSWFQVGZLAUBLIKX node_port=5672 \
op monitor interval=30 timeout=60 \
op monitor interval=27 role=Master timeout=60 \
op start interval=0 timeout=360 \
op stop interval=0 timeout=120 \
op promote interval=0 timeout=120 \
op demote interval=0 timeout=120 \
op notify interval=0 timeout=180 \
meta migration-threshold=10 failure-timeout=30s resource-stickiness=100
.......
做完资源添加操作大概过4-5分钟后,服务才能接管起来:
crm status
- 添加haproxy到PCS
在每个控制节点上操作:
systemctl disable haproxy
.......
- 添加glance相关服务到PCS
在每个控制节点上操作:
systemctl disable openstack-glance-api openstack-glance-registry
在controller1上操作:
crm configure
primitive openstack-glance-api systemd:openstack-glance-api \
op start interval=0s timeout=30 \
op stop interval=0s timeout=30 \
op monitor interval=30 timeout=30
.......
commit
- 添加nova相关服务到PCS
在每个控制节点上操作:
#systemctl disable openstack-nova-api openstack-nova-cert openstack-nova-consoleauth openstack-nova-scheduler
openstack-nova-conductor openstack-nova-novncproxy
在controller1上操作:
crm configure
primitive openstack-nova-api systemd:openstack-nova-api \
op start interval=0s timeout=45 \
op stop interval=0s timeout=45 \
op monitor interval=30 timeout=30
primitive openstack-nova-cert systemd:openstack-nova-cert \
op start interval=0s timeout=45 \
op stop interval=0s timeout=45 \
op monitor interval=30 timeout=30
.......
commit
clone openstack-nova-api-clone openstack-nova-api \
meta target-role=Started
clone openstack-nova-cert-clone openstack-nova-cert \
meta target-role=Started
clone openstack-nova-conductor-clone openstack-nova-conductor \
meta target-role=Started
clone openstack-nova-novncproxy-clone openstack-nova-novncproxy \
meta target-role=Started
clone openstack-nova-scheduler-clone openstack-nova-scheduler \
meta target-role=Started
commit
- 添加cinder相关服务到PCS
在每个控制节点上操作:
systemctl disable openstack-cinder-api openstack-cinder-scheduler
在controller1上操作:
crm configure
primitive openstack-cinder-api systemd:openstack-cinder-api \
op start interval=0s timeout=45 \
op stop interval=0s timeout=45 \
op monitor interval=30 timeout=30
.......
commit
- 添加neutron相关服务到PCS
在每个控制节点上操作:
systemctl disable neutron-server neutron-l3-agent neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadataagent
在controller1上操作:
crm configure
primitive openstack-neutron-server systemd:neutron-server \
op start interval=0s timeout=45 \
.......
primitive openstack-neutron-dhcp-agent systemd:neutron-dhcp-agent \
op start interval=0s timeout=45 \
op stop interval=0s timeout=45 \
op monitor interval=30 timeout=30
primitive openstack-neutron-metadata-agent systemd:neutron-metadata-agent \
op start interval=0s timeout=45 \
op stop interval=0s timeout=45 \
op monitor interval=30 timeout=30
.......
clone openstack-neutron-metadata-agent-clone openstack-neutron-metadata-agent \
meta target-role=Started
commit
- 排错
如果有服务起不来,对照下面列表cleanup下(视频里有详解)
crm resource cleanup rabbitmq-server-clone
crm resource cleanup openstack-memcached-clone
crm resource cleanup openstack-glance-api-clone
.......
Compute节点部署
一、安装相关依赖包
yum install openstack-selinux python-openstackclient yum-plugin-priorities openstack-nova-compute openstack-utils
ntpdate -y
- 配置nova.conf
>/etc/nova/nova.conf
openstack-config --set /etc/nova/nova.conf DEFAULT debug False
openstack-config --set /etc/nova/nova.conf DEFAULT verbose True
openstack-config --set /etc/nova/nova.conf DEFAULT force_raw_images True
openstack-config --set /etc/nova/nova.conf DEFAULT remove_unused_original_minimum_age_seconds 86400
.......
openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid openstack
openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_password passw0rd
openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_use_ssl False
openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_ha_queues True
openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_retry_interval 1
openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_retry_backoff 2
.......
openstack-config --set /etc/nova/nova.conf libvirt cpu_mode host-model
- 在线热迁移配置
在线热迁移需要的前提条件:
a. 需要有共享存储,NFS、 Ceph、 GPFS 或者直接连接EMC等存储设备都可以提供共享存储。
b. 源和目标节点的 CPU 类型要一致。
c. 源和目标节点的 Libvirt 版本要一致。
d. 源和目标节点能相互识别对方的主机名称,可以在 /etc/hosts 中加入对方的主机名
配置方法:
.......
b. 配置libvirtd.conf和libvirtd
sed -i ‘s/#listen_tls = 0/listen_tls = 0/g‘ /etc/libvirt/libvirtd.conf
sed -i ‘s/#listen_tcp = 1/listen_tcp = 1/g‘ /etc/libvirt/libvirtd.conf
.......
d. 设置libvirtd.service 和openstack-nova-compute.service开机启动,并且重启libvirtd &openstack-nova-compute
systemctl enable libvirtd.service openstack-nova-compute.service
.......
e. 热迁移虚拟机操作
命令:nova live-migration instance_id node_name
nova live-migration 990b077d-663c-4a61-bd64-0e5ebeab2554 compute2
nova show 990b077d-663c-4a61-bd64-0e5ebeab2554 查看是否确实迁移成功
- 添加环境变量
cat <<END >/root/admin-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=passw0rd
export OS_AUTH_URL=http://demo.openstack.com:35357/v3
export OS_IDENTITY_API_VERSION=3
END
cat <<END >/root/demo-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
.......
- 验证
source /root/admin-openrc
openstack compute service list
二、安装Neutron
- 安装相关软件包
yum install openstack-neutron-linuxbridge ebtables ipset -y
- 配置neutron.conf
>/etc/neutron/neutron.conf
sed -i ‘/^connection/d‘ /etc/neutron/neutron.conf
openstack-config --set /etc/neutron/neutron.conf DEFAULT debug False
openstack-config --set /etc/neutron/neutron.conf DEFAULT verbose True
openstack-config --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit
.......
- 配置/etc/neutron/plugins/ml2/linuxbridge_agent.ini
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings
provider:eno50332184
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan True
.......
注意provider后面那个网卡名是第二块网卡的名称。
- 配置nova.conf
openstack-config --set /etc/nova/nova.conf neutron auth_type password
.......
- 重启和enable相关服务
systemctl restart libvirtd.service openstack-nova-compute.service
.......
三、配置Cinder
- 计算节点要是想用cinder,那么需要配置nova配置文件(注意!这一步是在计算节点操作的)
openstack-config --set /etc/nova/nova.conf cinder os_region_name RegionOne
.......
- 然后在controller1、2、3上重启nova服务
systemctl restart openstack-nova-api.service
.......
四. 验证
source /root/admin-openrc
neutron ext-list
neutron agent-list
到此,Computer节点搭建完毕,运行nova host-list可以查看新加入的computer1节点
如果需要再添加另外一个computer节点,只要重复下第二大步即可!记得把计算机名和IP地址改下。_