Openstack安装知识点 HA 搭建

注意事项:
我们使用到的密码有:
虚拟机root密码:devops
mariadb的root账户的密码:passw0rd
rabbitmq的openstack用户的密码:passw0rd

1.在安装系统之后。

1)关闭防火墙:

systemctl disable firewalld 
systemctl stop firewalld 

2)关闭selinux

vi /etc/sysconfig/selinux

SELINUX=disabled

3)配置网络IP

ip a  #可以查看当前多少网卡,以及他们的IP地址
cd /etc/sysconfig/network-scripts/

配置第一个网卡(Host Only):

图片.png

第二块(Host Only):

图片.png

第三块(是NAT):

图片.png

4)重启网络

systemctl restart network

5)修改hostname

vi /etc/hostname   #  

删掉默认的,然后写入:controller1

6)我们一般使用putty或者Xshell去连接虚拟机

7)安装一些工具(注意,这一步可以放在yum源配置之后做):

yum install vim  net-tools wget -y

安装之后,千万不要:yum update 不要更新,他会升级到 CentOS 7.3

8)我们可以查看下自己的系统

cat /etc/redhat-release

9)配置yum 源为本地yum源:

cd /etc/yum.repos.d/
...

====================

1)主机hosts文件配置

修改/etc/hosts文件在三个controlelr中。

127.0.0.1  localhost  localhost.localdomain  localhost4 localhost4.localdomain4
::1        localhost   localhost.localdomain  localhost4 localhost4.localdomain4
10.1.1.120  controller1   controller1.devops.com
10.1.1.121  controller2   controller2.devops.com
10.1.1.122  controller3   controller3.devops.com
10.1.1.123  compute1   compute1.devops.com
10.1.1.124  compute2   compute1.devops.com
10.1.1.125  nfs-backend   backend.devops.com
10.1.1.126  cinder1   cinder1.devops.com
45.117.42.129   devops.taobao.com

我们只需要修改一个controlelr节点上的hosts文件,我们可以使用scp命令传输到其他的controller中去:

scp /etc/hosts root@controller2:/etc/hosts   # 注意controller2是已经在自己的hosts文件中描述清楚了的,ip地址
scp /etc/hosts root@controller3:/etc/hosts

2)使用scp把yum源配置文件也拷贝到每个controller中。

3)安装每个yum工具按照7)的方式。

=======

给每个节点做ntp服务

1)先安装ntp:

yum install -y ntp

2)修改ntp的配置:

vim /etc/ntp.conf

注释下面三个地址(server),修改第一个,如果本地搭建了ntp服务的话:

图片.png

上图是本地搭建的ntp服务器,如果没有可以网上找找其他方法,注意不能写成:

server cn.pool.ntp.org iburst #这样会报错。

然后重启ntp:

systemctl restart ntpd
systemctl status ntpd

3)同步时间:

# ntpdate cn.pool.ntp.org
然后查看运行date命令查看时间是否同步成功 注意,这个操作很重要,openstack是分布式架构的,每个节点都不能有时间差! 很多同学刚装完centos系统,时间会跟当前北京的时间不一致,所以必须运行下这个命令! 另外,也把这个命令加到开机启动里面去
# echo "ntpdate cn.pool.ntp.org" >> /etc/rc.d/rc.local 
# chmod +x /etc/rc.d/rc.local

如果这里有问题,看看这篇文章的1,2 能否帮到:http://www.jianshu.com/writer#/notebooks/12348975/notes/14123412

或者这个问题的话:https://unix.stackexchange.com/questions/374789/exiting-name-server-cannot-be-used-temporary-failure-in-name-resolution-3-3

就看上面我的简书文章的3。
如果错误不能解决的话(有可能是不能连接外网),就在本地服务器搭建一个NTP服务,Windows都可以搭建,我的ntp的简书文章有提到。

我们可以使用:

lsof -i :123  # 查看ntp服务的状态(端口123)

根据端口杀掉进程:

kill -9 5954   # 端口5954的端口被kill

======

互信
可以做也可以不做,做了只是要方便点在虚拟机之间切换。

我这里列出一个例子:
在controller1和cinder1之间做互信:

在cinder1节点:

ssh-keygen -t rsa  

全部按enter键,
生成一个.pub文件:

图片.png

然后将这个.pub文件使用ssh-copy-id拷贝到controller1节点上。

ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@45.117.42.120

拷贝过去之后就,cinder1使用ssh命令切换到controller1就不用输入密码了。

要想controller1切换cinder1,那么就在controller1也这样做一次。

##这里做快照:ntp-ok##

注意:快照回到这里的时候,需要做下ntp同步下。(ntpdate 10.1.1.1

====

安装MariaDB Galera

0)特别提醒:
没有同步时间的话,一定要同步时间:
注意:快照回到这里的时候,需要做下ntp同步下。(ntpdate 10.1.1.1
特别提醒:
内存一定要8G以及以上,快照恢复过来的时候,有可能是4G的。

1)在三个控制节点上面分别执行yum安装如下:

yum install -y MariaDB-server MariaDB-client galera xinetd rsync ntp ntpdate bash-completion percona-xtrabackup socat gcc gcc-c++  #注意: 如果之前有装ntp ntpdate 就不用再装了  
systemctl start mariadb.service
mysql_secure_installation (执行设置mysql密码,注意,此份文档mysql密码为passw0rd)

注意:在上面的yum 安装命令中,除了MariaDB-server MariaDB-client galera这3个是与MariaDB Galera有关的,其余都是其他用处的。

我们在执行mysql_secure_installation这条命令的时候,会有:

Enter current password for root (enter for none):   

因为才装了mariadb,所以没有密码,就按Enter键。
接下来的提示:

Set root password? [Y/n]

我们可以来设置自己的密码:我这里设置的是:passw0rd
接下来的提示,全部输入:y就OK。

2)在三个控制节点上都创建sst用户,目的是给xtrabackup-v2数据同步使用:

mysql -uroot -p   # 这里的密码是上面设置的密码`passw0rd`。然后执行以下的命令
grant all privileges on *.* to 'sst'@'localhost' identified by 'devops';
flush privileges;
exit;

第一句是创建用户,赋予localhost权限。数据库的用户名是sst,密码是devops

上面的三个控制节点的MariaDB安装,但是三个节点还没有关联起来。

3)关联这三个节点。

我们需要配置:/etc/my.cnf.d/下面的client.cnf,mysql-clients.cnfserver.cnf,这个server.cnf特别重要。
这里就不使用手写了,太多的内容,就把百度云上面的配置文件拿过来覆盖下掉:

图片.png

使用FileZilla去上传替换。

我们拷贝之后的server.cnf

图片.png

如果使用FileZilla只拷贝到一个节点上面,那么其余的2个节点也可以使用scp拷贝过去:

cd /etc/my.cnf.d/
scp client.cnf mysql-clients.cnf server.cnf controller2:/etc/my.cnf.d/
scp client.cnf mysql-clients.cnf server.cnf controller3:/etc/my.cnf.d/

拷贝过去之后注意要改变每个server.cnf,其他的(比如:client.cnf注意需要修改节点和IP,这个必须改变。
修改这下面几个地方:

wsrep_node_name=xxx
wsrep_node_address=xxx
...
bind-address=xxx  
....
max_connections=10000

4)修改三个控制节点的mysql最大连接数:

vim /usr/lib/systemd/system/mariadb.service

[Service]添加两行如下参数,(可以在最后一行添加):

LimitNOFILE=10000
LimitNPROC=10000

上面的步骤可以三个控制节点都修改,也可以修改一个,拷贝到其余2个。

修改完毕之后,三个都要执行:

systemctl daemon-reload

5)上面的三个控制节点my.cnf都配置完成后,三个控制节点都要执行:

systemctl status mariadb  # 查看状态
systemctl stop mariadb.service

然后在第一个节点用下面的命令初始化启动mariadb集群服务:

/usr/sbin/mysqld --wsrep-new-cluster --user=root &   # 启动mariadb方式,很重要的一步骤

其他两个节点分别启动mariadb:

systemctl start mariadb.service   # 注意:这里建议一个一个的启动,不要controller2和3一起启动,不然有可能有timeout错误(也可能是因为ntpdate没有同步时间)。这里的节点启动的时候比较慢的,在第一个节点是有交互的,可以看打印在屏幕上的Log。这个是初始化的启动。
systemctl status mariadb.service

注意:我们在controller1中如果看见了:

2017-07-03 16:53:50 140012712617728 [Note] WSREP: Member 2.0 (controller2) synced with group.

就说明controller2加入组成功。

注意:在这里有可能会失败,我们可以执行多次:

systemctl stop mariadb.service
systemctl start mariadb.service  

或者有可能是配置不够,我就加到了8G内存。

最后,其他两个节点启动成功了,再回到第一个节点:

在第一个控制节点按Enter键,回到控制输入台。

6)第一个控制节点执行:

pkill -9 mysql
pkill -9 mysql   # 注意,这里是两次
systemctl start mariadb.service
systemctl status mariadb.service

注意:如果遇到启动不了服务的情况,看下具体的错误:如果是[ERROR] Can‘t init tc log错误可以通过以下的方式解决:

cd /var/lib/mysql
chown mysql:mysql * 

然后再重启服务即可,这是因为/var/lib/mysql/tc.log用户组和用户名不是mysql,更改下权限就行了。

7)验证,查看mariadb数据库集群状态

随便找一个控制节点:

mysql -uroot -p
mysql> show status like 'wsrep_cluster_size%';
mysql> show variables like 'wsrep_sst_meth%';   # 我们也可以查看集群方法是什么,这些都是随意查看的。
mysql> show variables like 'max_connections';  # 查看最大连接数,我们在3)和XX的时候修改的

图片.png

我们看到集群的大小有3个。

查看数据库的库的个数:

图片.png

默认有三个数据库。
我们随意在哪个控制节点创建一个测试数据库,那么在其余的控制节点也可以直接看到。

====

RabbitMQ Cluster集群

从下面几个方面来讲解:

RabbitMQ介绍
安装RabbitMQ集群
配置RabbitMQ插件
优化rabbit集群

1)RabbitMQ介绍:

如果安装的话,可以不看1)和2)。

简介
RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一个Advanced Message Queuing Protocol(AMQP)的开源实现,由以高性能,健壮以及可伸缩性出名的Erlang语言写成。
特点:可伸缩性;消息持久化,从内存持久化消息到硬盘,再从硬盘加载到内存。

基本概念和架构
核心原理:发送消息,接受消息。
作用:主要用于组件之间的解耦,消息发送者无需知道消息使用者的存在。

图片.png
Producer  #生产者
Consumer  #消费者
Broker  #衬托消息队列的服务器实例(rabbitmq)
Exchange  #交换机,决定消息往哪里发送
Bindings  #绑定,也就是定义好的路由规则
Queue  #队列,消息的容器,一个消息可投入一个或者多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走
Connection、Channel  #通道,生产者和消费者需要和RabbitMQ建立TCP连接。一些应用需要多个connection,为了节省TCP连接,可以使用Channel,它可以被认为是一种轻型的共享的TCP连接的连接。
message  #RabbitMQ转发的二进制对象。组成有:Headers(头)、Properties(属性)、和Data(数据),其中数据部分不是必要的。
图片.png

exchange:
交换机,空字符串名字的exchange为默认的exchange。
Type类型:Direct,Fanout,Topic,Headers。类型决定exchange的消息转发能力。
durable:值为True/False。值为true的exchange在rabbitmq重启后会被自动创建。OpenStack使用的exchange的该值都为false。
auto_delete:值为True/False。设置为true的话,当所有消费者的连接都关闭后,该exchange会被自动删除。OpenStacke使用的exchange的该值都为Flase。
exclusive: 值为True/False。设置为true的话,该exchange只允许被创建的connection使用,并且在该connection关闭后它会被自动删除。

Direct:
转发消息到routingKey指定队列(完全匹配,单播)

Topic:
按规则转发消息(最灵活,组播)
符号#和符号*匹配0个或者多个单词,*匹配不多不少一个单词。

Fanout:
转发消息到所有绑定组件,广播模式。

2)RabbitMQ集群优化

  • 尽可能的吧RabbitMQ部署在单独的服务器中
  • 开启HiPE模式,能够提高性能20-50%
  • 增加socket和最大文件打开数
  • 不要私用队列镜像
  • 控制发送的指标数量或者频率

3)部署RabbitMQ

三个控制节点上面都装:

先把erlang语言装了。

yum install -y erlang

再装rabbitmq:

yum install -y rabbitmq-server

每个控制节点都启动rabbitmq及设置开机启动:

systemctl enable rabbitmq-server.service  # 设置开机启动
systemctl restart rabbitmq-server.service  # 启动rabbitmq
systemctl status rabbitmq-server.service  # 查看状态
systemctl list-unit-files | grep rabbitmq-server.service  # 查看rabbitmq是否在已启动的服务列表中

我们给三个控制节点创建openstack用户给rabbitmq:

rabbitmqctl add_user openstack passw0rd   # 创建openstack用户,密码为passw0rd
rabbitmqctl set_permissions openstack ".*" ".*" ".*"  # 对openstack用户赋予权限
rabbitmqctl set_user_tags openstack administrator   
rabbitmqctl list_users  # 列出用户

打开rabbitmq的一些插件:

/usr/lib/rabbitmq/bin/rabbitmq-plugins list   # 查看rabbitmq插件,展示的[ ]如果里面没有E,说明没有开,如果有,就是开了的
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management mochiweb webmachine rabbitmq_web_dispatch amqp_client rabbitmq_management_agent   # 开启rabbitmq插件
/usr/lib/rabbitmq/bin/rabbitmq-plugins list  # 再查看列表,看看开没有
systemctl restart rabbitmq-server  # 重启rabbitmq

然后我们在浏览器中,查看是否web可以访问:

在浏览器中去输入controller1的地址+端口:

45.117.42.120:15672   # 这个IP地址是controller1的NAT网卡的地址

集群rabbitmq:
在controller1上面:

[root@controller1 my.cnf.d]# cat /var/lib/rabbitmq/.erlang.cookie 
ZABMJQWDVVYNSFPPEKUA   # 我们看到这一串字符串

使用scp拷贝到controller2和controller3:

scp /var/lib/rabbitmq/.erlang.cookie controller2:/var/lib/rabbitmq/.erlang.cookie  # 拷贝到controller2
scp /var/lib/rabbitmq/.erlang.cookie controller3:/var/lib/rabbitmq/.erlang.cookie  # 拷贝到controller3

拷贝完成之后,在controller2和controller3上重启rabbitmq和其他操作:

systemctl restart rabbitmq-server  # 重启
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@controller1   # 如果rabbitmq的web网页是打开的,可以看到新加的节点
rabbitmqctl start_app

在任意控制节点,我们使用命令可以查看下集群:

rabbitmqctl cluster_status

优化rabbitmq:

我们从rabbitmq的web界面可以看出:


图片.png

当前每个节点可以用的File 和 Socket数目都是1000左右,我们可以调节大一些。

我们打开三个控制节点的rabbitmq.config:

vim /etc/rabbitmq/rabbitmq.config  # 

每个controller都打开:{hipe_compile, true} ,前面的注释符号(%%)去掉。
我们可以三个一个一个的编辑,也可以scp命令拷贝:

scp /etc/rabbitmq/rabbitmq.config controller2:/etc/rabbitmq/rabbitmq.config
scp /etc/rabbitmq/rabbitmq.config controller3:/etc/rabbitmq/rabbitmq.config

每个controller节点配置系统文件/etc/sysctl.conf,可以每个编辑也可以使用scp拷贝:

vim /etc/sysctl.conf   

sysctl.conf文件中添加:

fs.file-max = 1000000

然后执行(注意,每个节点都要哈,不要少写了):

sysctl -p   # 让其生效

每个控制节点都配置/etc/security/limits.conf文件:
打开:

vim /etc/security/limits.conf

在打开的limits.conf文件的末尾添加:

* soft nofile 655350
* hard nofile 655350

这个编辑后的文件拷贝到其他两个控制节点。

scp /etc/security/limits.conf controller2:/etc/security/limits.conf
scp /etc/security/limits.conf controller3:/etc/security/limits.conf

每个控制节点配置/etc/systemd/system.conf文件:

vim /etc/systemd/system.conf

末尾添加:

DefaultLimitNOFILE=1024000
DefaultLimitNPROC=1024000

如果拷贝,使用scp

scp /etc/systemd/system.conf controller2:/etc/systemd/system.conf
scp /etc/systemd/system.conf controller3:/etc/systemd/system.conf

我们将三个控制节点都重启一下:

reboot   # 重启

注意:如果重启有问题(我出了问题,是因为controller3的/etc/rc.d/rc.local这个文件之前加了ntpdate cn.pool.ntp.org,没有设置执行权限:chmod +x /etc/rc.d/rc.local),

我们先看数据库:mariadb有没有问题:

systemctl status mariadb   # 查看mariadb状态

如果是有问题,就是没有启动的意思,那么将三个控制节点的每一个mariadb都关闭:

 systemctl stop mariadb.service

在controller1中重启:

/usr/sbin/mysqld --wsrep-new-cluster --user=root & 

在另外两个重启:


比如rabbitmq没有运行着,那么就需要手动启动下rabbitmq:
查看状态:

rabbitmqctl cluster_status  # 查看状态
systemctl status rabbitmq-server.service  # 查看服务状态

列出rabbitmq的插件:

 /usr/lib/rabbitmq/bin/rabbitmq-plugins list  # 可能插件没有问题,但是服务有问题。开始我以为是rabbitmq的问题,

后来发现是mariadb集群的配置没有做好,也就是说重启后,mariadb没有开开:


图片.png

我们可以在任意控制节点上:

ulimit -Hn  # 查看我们修改的配置

我们进入rabbitmq的web界面看下我们的加大后的配置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355

推荐阅读更多精彩内容