1、Rabbitmq集群搭建

每台服务器RabbitMQ部署
1)RabbitMQ是基于Erlang的,所以首先必须配置Erlang环境.
2)解压gz包  tar zxvf  otp_src_19.1.tar.gz
3)cd 进入解压出来的文件夹
4)执行./configure --prefix=/usr/local/erlang   就会开始编译安装
5)make 和 make install
6)修改/etc/profile文件,添加erlang环境变量
ERLANG_HOME=/usr/local/erlang 
export PATH=$PATH:$ERLANG_HOME/bin 
export ERLANG_HOME
7)执行source /etc/profile让环境变量生效
8)输入erl 就进入了erlang的命令行环境了。

注意:
Erlange编译./configure配置的时候,也需要检查java相关内容。比如jdk,可以提前安装部署,不然会提示如下,如果不安装jdk,编译安装完之后,输入erl也能进入erlang的shell界面。不影响单独使用erlang。以后用到java可以重新编译即可。

rabbitmq不存在编译安装,只要解压进入运行目录运行对应的bin文件即可。
1)解压安装
tar zxvf rabbitmq-server-generic-unix-3.5.7.tar.gz 解压移动到/usr/local/rabbitmq中
[root@XXTS-zx rabbitmq]# tar -zxvf rabbitmq-server-generic-unix-3.5.7.tar.gz
[root@XXTS-zx rabbitmq]# mv rabbitmq_server-3.5.7/ /usr/local/rabbitmq
2)启动
进入rabbitmq安装目录中的sbin执行程序目录
[root@XXTS-zx rabbitmq]# cd /usr/local/rabbitmq/sbin/
[root@XXTS-zx sbin]# ./rabbitmq-server -detached
3)停止
[root@XXTS-zx rabbitmq]# cd /usr/local/rabbitmq/sbin/ #进入到程序目录
[root@XXTS-zx sbin]# ./rabbitmqctl stop    #关闭rabbitmq如下图

启用管理方式(用网页方式管理MQ)
[root@XXTS-zx rabbitmq]# cd /usr/local/rabbitmq/sbin/ #进入到程序目录
[root@XXTS-zx sbin]# ./rabbitmq-plugins enable rabbitmq_management
#可以先查看自带plugins。命令./rabbitmq-plugins list。如果rabbitmq_management已经启动,那就不需要再启动了

Rabbitmq集群搭建
1、在所有rabbitmq服务器上修改hosts配置
执行vim /etc/hosts修改hosts配置,如下图,160、161和162是rabbitmq所有节点IP,hadoop1、hadoop2和hadoop3是rabbitmq所有节点主机名
注:要确保所有的节点之间能够通过主机名ping通

2、同步erlang.cookie,选择一个rabbitmq做主节点,杀掉其他节点的rabbitmq进程

进入主节点服务器,将主节点服务器的.erlang.cookie传给其它节点,命令如下:
scp /root/.erlang.cookie 子节点用户名@子节点IP:/root
到所有子节点的rabbitmq安装目录中的sbin下,执行./rabbitmq-server -detached启动rabbitmq

3、将子节点加入到主节点中
对所有子节点执行下列操作:
[root@XXTS-zx rabbitmq]# cd /usr/local/rabbitmq/sbin/
[root@XXTS-zx sbin]# ./rabbitmqctl stop_app
[root@XXTS-zx sbin]# ./rabbitmqctl reset 
[root@XXTS-zx sbin]# ./rabbitmqctl join_cluster --ram rabbit@hadoop1
[root@XXTS-zx sbin]# ./rabbitmqctl start_app
到主节点下查看结果
[root@XXTS-zx rabbitmq]# cd /usr/local/rabbitmq/sbin/
[root@XXTS-zx sbin]# ./rabbitmqctl cluster_status
结果如下图,表示添加成功

Rabbitmq主节点镜像队列配置

作用:镜像队列 rabbitmq的集群创建后,默认消息只存在于队列所在节点,当此节点故障后,消息就丢失了。 为了解决上述消息丢失的问题

主节点进行如下操作:

#cd /usr/local/rabbitmq/sbin/

#./rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'

rabbitmq 容器集群 rabbitmq 集群部署_zookeeper

 

Rabbitmq用户名增加
只需对一个节点的rabbitmq进行用户配置,其他节点会自动同步

#增加用户名和密码
[root@XXTS-zx sbin]# ./rabbitmqctl add_user zyzq_test zyzq_test

#把zyzq_test设置为administrator 才能远程访问
[root@XXTS-zx sbin]# ./rabbitmqctl set_user_tags zyzq_test administrator

#添加权限
[root@XXTS-zx sbin]# ./rabbitmqctl set_permissions -p / zyzq_test ".* " ".*" ".*"

#删除用户
[root@XXTS-zx sbin]# ./rabbitmqctl delete_user zyzq_test 

#查看当前用户列表
[root@XXTS-zx sbin]# ./rabbitmqctl  list_users

2、mongodb集群部署

mongodb集群部署
Replicate Set节点设置Mongodb集群有三种模式:  Replica Set, Sharding,Master-Slaver。 这里部署的是Replica Set模式。

#解压
cd /usr/local/kernel
tar xvf mongodb-linux-x86_64-rhel70-v4.0-latest.tgz -C /usr/local/mongodb

#mongodb集群单个节点,创建数据存放路径和日志存放路径
mkdir -p /data/mongodb/data1
mkdir -p /data/mongodb/data2
mkdir -p /data/mongodb/data3
mkdir -p /data/mongodb/log

#创建配置文件
touch /data/mongodb/mongodb1.conf
touch /data/mongodb/mongodb2.conf
touch /data/mongodb/mongodb3.conf

#添加配置,对应的修改数据路径,日志,端口,IP,集本名字
dbpath=/data/mongodb/data1
logpath=/data/mongodb/log/mongodb1.log 
logappend=true
port=12700
fork=true
auth=false
bind_ip=127.0.0.1
journal=true
quiet=true
replSet=hxrs

#启动服务
cd /usr/local/mongodb/bin 
./mongod -f /data/mongodb/mongodb1.conf
./mongod -f /data/mongodb/mongodb2.conf
./mongod -f /data/mongodb/mongodb3.conf
注:
dbpath为数据库数据存放路径,具体请按照mongodb实际配置情况配置
Logpath为数据库服务日志存放路径,具体请按照mongodb实际配置情况配置
logappend使用追加的方式写日志
fork启动后台服务,记录日志,日志文件目录需自己创建
port 修改默认端口 ./mongdb --port 12700,使用时,需检查端口号(即12700)是否已被占用,检查方法为:netstat -apn | grep 端口号
bind_ip为mongodb所在服务器IP,多个IP用逗号隔开。除非mongodb集群的所有节点都在同一台服务器上,否则此处不能设置成127.0.0.1,否则后面的集群部署会出现异常
replSet 设置复制集的名称,所有的节点都设置一样

Replica Set模式部署:

进入任意节点安装目录/usr/local/mongodb/bin,按照以下顺序执行:
#cd /usr/local/mongodb/bin
#./mongo 127.0.0.1:12700

>use admin
>cfg={_id:"hxrs", members:[{_id:0, host:'127.0.0.1:12700'}, {_id:1, host:'127.0.0.1:12701'}, {_id:2, host:'127.0.0.1:12702', arbiterOnly:true}]}
注:此处将192.168.216.160:12702设置为仲裁节点
> rs.initiate(cfg)
执行结果:{
	"info" : "Config now saved locally.  Should come online in about a minute.",
	"ok" : 1
}

> rs.status()
执行结果:{
        "set" : "hxrs",
        "date" : ISODate("2018-06-15T06:48:34.823Z"),
        "myState" : 7,
        "term" : NumberLong(4),
        "heartbeatIntervalMillis" : NumberLong(2000),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "127.0.0.1:12700",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 619462,
                        "optime" : {
                                "ts" : Timestamp(1528773769, 1),
                                "t" : NumberLong(4)
                        },
                        "optimeDate" : ISODate("2018-06-12T03:22:49Z"),
                        "lastHeartbeat" : ISODate("2018-06-15T06:48:33.840Z"),
                        "lastHeartbeatRecv" : ISODate("2018-06-15T06:48:34.254Z"),
                        "pingMs" : NumberLong(0),
                        "syncingTo" : "127.0.0.1:12701",
                        "configVersion" : 1
                },
                {
                        "_id" : 1,
                        "name" : "127.0.0.1:12701",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 619462,
                        "optime" : {
                                "ts" : Timestamp(1528773769, 1),
                                "t" : NumberLong(4)
                        },
                        "optimeDate" : ISODate("2018-06-12T03:22:49Z"),
                        "lastHeartbeat" : ISODate("2018-06-15T06:48:32.928Z"),
                        "lastHeartbeatRecv" : ISODate("2018-06-15T06:48:33.247Z"),
                        "pingMs" : NumberLong(0),
                        "electionTime" : Timestamp(1528710506, 1),
                        "electionDate" : ISODate("2018-06-11T09:48:26Z"),
                        "configVersion" : 1
                },
                {
                        "_id" : 2,
                        "name" : "127.0.0.1:12702",
                        "health" : 1,
                        "state" : 7,
                        "stateStr" : "ARBITER",
                        "uptime" : 619463,
                        "configVersion" : 1,
                        "self" : true
                }
        ],
        "ok" : 1
}

注:
stateStr等于PRIMARY的节点为主节点,可读可写
stateStr等于SECONDARY的节点为副节点,mongodb默认SECONDARY不可读也不可写,不过可以在进入mongodb之后,通过执行rs.slaveOk(),来获得查询权限
stateStr等于ARBITER的节点为仲裁节点,仲裁节点不会同步主节点的数据,也不能成为活跃节点

mongodb集群启动权限认证

1、进入到mongodb文件夹的bin目录下,按照以下顺序执行:
使用kill -2 PID杀掉所有节点的mongodb进程(注:使用kill -9会损坏数据库)
2、在任一节点生成一个主键文件,命令如下:
#openssl rand -base64 741 > /usr/local/mongodb/bin/mongo-keyfile
3、对主键文件权限进行限制,进入/usr/local/mongodb/bin目录,执行如下命令:
#chmod 600 mongo-keyfile
将主键文件复制到其他节点的/usr/local/mongodb/bin/目录下

4、修改配置文件添加证书路径
keyFile=/usr/local/mongodb2/bin/mongo-keyfile

rabbitmq 容器集群 rabbitmq 集群部署_mongodb_02


5、在启动命令后面加上--auth --keyFile=/usr/local/mongodb/bin/mongo-keyfile,启动权限认证

 

创建root用户以及ganzhi数据库

进入到mongodb主节点部署路径的bin目录下,按照以下顺序执行:
#./mongo 127.0.0.1:12700

hxrs:PRIMARY> use admin
hxrs:PRIMARY> db.createUser({user:"root",pwd:"10jqka",roles:["root"]})
执行结果:Successfully added user: { "user" : "root", "roles" : [ "root" ] }
hxrs:PRIMARY> db.auth("root","10jqka")
执行结果:1
hxrs:PRIMARY> exit


hxrs:PRIMARY> use admin
hxrs:PRIMARY> db.auth("root","10jqka")
执行结果:
1
创建数据库(use ganzhi)和数据库管理员
hxrs:PRIMARY> use ganzhi
hxrs:PRIMARY> db.test.insert({_id:1,name:"test"})
hxrs:PRIMARY> db.createUser({user:"myhexin",pwd:"10jqka",roles:["dbOwner"]})
执行结果:
Successfully added user: { "user" : "myhexin", "roles" : [ "dbOwner" ] }
hxrs:PRIMARY> db.auth("myhexin","10jqka")
执行结果:
1
hxrs:PRIMARY> exit

mongodb相关使用:
导出数据库
./mongodump -h 127.0.0.1:12700 -d ganzhi -u myhexin -p 10jqka -o /root/mongobak

mongodb部署遇到疑

rabbitmq 容器集群 rabbitmq 集群部署_rabbitmq 容器集群_03

问:

 

 

3、zookeeper集群部署

#zookeeper安装

tar xvf apache-zookeeper-3.6.1-bin.tar.gz -c /usr/local/

mv apache-zookeeper-3.6.1-bin zookeeper

cd /usr/local/zookeeper/conf

cp zoo_sample.cfg zoo.cfg
 

#修改配置端口、数据日志存放路径、集群地址

dataLogDir=/opt/zookeeper/logs

dataDir=/opt/zookeeper/data

clientPort=2181

#创建相关目录,三台节点都需要

mkdir -p /opt/zookeeper/{logs,data}

#其余zookeeper节点安装完成之后,同步配置文件zoo.cfg

server.1= 192.168.1.148:2888:3888

server.2= 192.168.1.149:2888:3888

server.3= 192.168.1.150:2888:3888

#除了修改zoo.cfg配置文件外,zookeeper集群模式下还要配置一个myid文件,这个文件需要放在dataDir目录下,分别在三台机器上创建写入分别对应zoo.cfg配置的的server.1、server.2、server.3中的1,2,3

echo "1" > /opt/zookeeper/data/myid

echo "2" > /opt/zookeeper/data/myid

echo "3" > /opt/zookeeper/data/myid
 

#每个zookeeper都执行

/usr/local/zookeeper/bin/

  1. ./zkServer.sh start