wxwidgets下载, 官网: http://www.wxwidgets.org/downloads/html
1: 须要的依赖安装java
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel gtk3-devel binutils-devel mesa* freeglut*node
2: 将下载的 wxwidgets 上传至liunx, 解压命令以下:linux
2.1: bunzip2 wxWidgets-3.1.2.tar.bz2 //解压nginx
2.2: tar -xvf wxWidgets-3.1.2.tar //解压c++
2.3: ./configure --with-opengl -enable-unicode -enable-debuggit
报错:OpenGL libraries not availablegithub
yum install mesa-libGLU-develweb
出现以下界面则正常继续下一步redis
2.4: make && make install //安装, 这个命令须要执行好久 , 安装完成出现以下界面就表明成功了。
2.5: 查看是否安装成功: wx-config --version
以下表示成功
3: 下载 erlang 与 rabbitmq, rabbitmq 使用 erlang开发的, 因此 erlang是必须安装的。
3.7.15的rabbitmq 须要 最少 20.3 或者最大 22.0的erlang版本。
erlang 官网下载地址: http://erlang.org/download/?M=A
erlang 安装版本:https://packagecloud.io/rabbitmq/erlang/
erlang 自动安装命令:
wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/6/erlang-21.3.8.1-1.el6.x86_64.rpm/download.rpm
下载后执行: yum install erlang-21.3.8.1-1.el6.x86_64.rpm
判断是否安装成功: erl -version
出现下图则是安装成功了。
rabbitmq 官网地址:https://www.rabbitmq.com/download.html
将下载的rabbitmq-server 上传至liunx
执行安装命令: yum install rabbitmq-server-3.7.15-1.el7.noarch.rpm
启动服务:systemctl start rabbitmq-server.service
中止服务:systemctl stop rabbitmq-server.service
设置开机启动:systemctl enable rabbitmq-server.service
中止开机启动:systemctl disable rabbitmq-server.service
从新启动服务:systemctl restart rabbitmq-server.service
查看服务当前状态:systemctl status rabbitmq-server.service
查看全部已启动服务:systemctl list-units --type=service
首先加入开机启动: systemctl enable rabbitmq-server.service
启动 rabbitmq:
service rabbitmq-server start
中止:
service rabbitmq-server stop
报错:
解决办法:
尝试下面的操做:
禁用 SELinux ,修改 /etc/selinux/config
SELINUX=disabled
修改后重启系统
重启后查看状态:systemctl status rabbitmq-server.service 正在运行
开放防火墙端口 5672 15672
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --reload
建立管理用户:admin 用户名, admin123 用户密码
rabbitmqctl add_user admin admin123 &&
rabbitmqctl set_user_tags admin administrator &&
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
安装 插件:rabbitmq-plugins enable rabbitmq_management
重启rabbitmq服务
service rabbitmq-server restart
到此,就能够经过http://ip:15672 使用admin ,admin123 进行登录web页面了
rabbitmq 官方文档 配置地址: https://www.rabbitmq.com/management.html
修改端口命令, 注意:版本为3.7以上:
在 /etc/rabbitmq/ 目录下新建 rabbitmq.conf 文件
vim /etc/rabbitmq/rabbitmq.conf
若是须要修改端口则加入以下命令:
listeners.tcp.default = 5672 #tcp监听端口
management.listener.port = 8004 #web访问端口
退出保存, 防火墙记得开放端口 8004;
重启服务:
systemctl restart rabbitmq-server.service
访问新的端口:
集群搭建参考官网: https://www.rabbitmq.com/clustering.html#cluster-formation
rabbitmq命令文档地址:http://www.blogjava.net/qbna350816/archive/2016/07/30/431394.html
两台mq搭建成功后,如今开始集群搭建,。 分为mq1 与 mq2 两台服务器。 mq1 为主节点。
IP地址 | 主机名 | 操做系统 | 防火墙和SELinux | 用途 |
---|---|---|---|---|
192.168.x.128 | mq1 | CentOS7.4(64位) | 开放端口 | 磁盘节点 |
192.168.x.129 | mq2 | CentOS7.4(64位) | 开放端口 | 内存节点 |
rabbitmq集群介绍:
RabbitMQ模式大概分为如下三种:
(1)单一模式。
(2)普通模式(默认的集群模式)。
(3) 镜像模式(把须要的队列作成镜像队列,存在于多个节点,属于RabbiMQ的HA方案,在对业务可靠性要求较高的场合中比较适用)。
要实现镜像模式,须要先搭建一个普通集群模式,在这个模式的基础上再配置镜像模式以实现高可用。
一个节点能够是磁盘类型或是内存类型。内存类型的节点只会在RAM中存储内部数据库,不包括消息、消息存储索引、队列索引及其余节点状态。在大多数状况下,全部节点均是磁盘类型,内存类型只是个别状况,可用于改进具备高队列,交换或绑定流失的性能群集。内存类型节点并不能提升消息速率。
因为内存类型节点只存储内部数据库,所以启动时必须从其余节点同步。这就要求集群中至少有一个磁盘类型节点。
RabbitMQ集群节点具有容错机制。只要这个节点同集群中其余节点的联系正常,这个节点能够被随意启停。
队列镜像机制容许队列内容在集群不一样节点之间同步。非镜像队列的表现,依赖于queue持久化配置。
RabbitMQ集群有几种模式来处理出现网络分区的状况,以保障集群的一致性。不建议跨WAN运行。
Rabbitmq的集群是依附于erlang的集群来工做的,因此必须先构建起erlang的集群景象。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中,文件是400的权限。因此必须保证各节点cookie一致,否则节点之间就没法通讯。
在RabbitMQ集群集群中,必须至少有一个磁盘节点,不然队列元数据没法写入到集群中,当磁盘节点宕掉时,集群将没法写入新的队列元数据信息。 disc 表明磁盘节点, ram表明内存节点。
当节点脱机时,可使用空白数据目录重置或启动其对等节点。在这种状况下,恢复节点也将没法从新加入其对等体,由于内部数据存储集群标识将再也不匹配。若是标识符修改了不能加入节点可使用 rabbitmqctl reset 重置命令后就能够加入节点中了。
1: 配置host文件:vim /etc/hosts
注意: 修改后须要重启系统, 用 hostname 命令查看是否修改为功。
加入两台服务器的地址, 两台机器都须要配置
ping 命令测试一下是否能ping通
ping mq1
ping mq2
能平通就没问题
2: 复制 cookie信息, 将mq1的cookie信息复制到mq2, 多台服务器也同样, 将mq1的cookie复制到其余服务器。
用scp的方式将mq1节点的.erlang.cookie的值复制到其余两个节点中。以root用户登陆, 会提示输入root密码
scp /var/lib/rabbitmq/.erlang.cookie root@192.168.x.129:/var/lib/rabbitmq/.erlang.cookie
输完密码就会出现以下 100%表明成功了。能够查看一下mq2的cookie已经和 mq1的cookie一致了。
3: 将mq2之内存节点加入 mq1节点中。 在mq2中输入以下命令
rabbitmqctl stop_app //中止服务
rabbitmqctl join_cluster --ram rabbit@mq1 //将mq2 之内存节点的形式加入 mq1磁盘节点。 --ram表明内存节点。
rabbitmqctl join_cluster --disc rabbit@mq1 //将mq2 以磁盘节点的形式加入 mq1磁盘节点。 --disc 表明磁盘节点。
rabbitmqctl start_app //启动服务
注意: 当加入失败时: 出现以下错误:
缘由是: 已经加入集群, 可是从集群中退出后, 数据文件日志不一致, 主机认为该节点还在集群中, 该须要加入集群的节点认为不在集群中,致使加入集群失败。
解决方法:
1: 删除 /var/lib/rabbitmq/mnesia
2: 主节点中将该节点移除集群: rabbitmqctl forget_cluster_node rabbit@mq2
3: 将须要加入集群的节点从新加入集群。 须要重复 stop_app, start_app 步骤。
4: 查看节点设置, 在任意一台服务器输入以下命令: 能够看到设置的节点详情
rabbitmqctl cluster_status
disc 磁盘节点 mq1, ram 内存节点 mq2
已加入群集的节点能够随时中止。它们也可能失败或被操做系统终止。在全部状况下,群集的其他部分能够继续运行,而且当节点再次启动时,节点会自动“遇上”(同步)其余群集节点。请注意,某些分区处理策略 可能以不一样方式工做并影响其余节点
测试:
中止一台节点: rabbitmqctl stop
running_nodes 运行的节点由两台变成一台。
再次启动中止的节点:rabbitmq-server -detached
发现运行的节点已是两台了。
节点类型修改; 好比 磁盘节点转为 内存节点, 内存节点转为磁盘节点, 必须先中止服务。
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc 转为磁盘节点
rabbitmqctl change_cluster_node_type ram 转为内存节点
rabbitmqctl start_app
上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些能够复制到集群里的任何一个节点,可是队列内容不会复制。虽然该模式解决一项目组节点压力,但队列节点宕机直接致使该队列没法应用,只能等待重启,因此要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每一个节点,必需要建立镜像队列。
镜像队列是基于普通的集群模式的,而后再添加一些策略,因此你仍是得先配置普通集群,而后才能设置镜像队列,咱们就以上面的集群接着作。
镜像模式设置:
1:网页设置,
2:命令设置 ,参考网站:https://www.rabbitmq.com/ha.html
rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}' //意思表示以ha.开头的queue都会复制到各个节点 ["^"匹配全部]
设置的镜像队列能够经过开启的网页的管理端,也能够经过命令,这里说的是其中的网页设置方式。
添加策略:
点击 add polcy 保存; 能够在两台节点mq上都看到配置的 polcy 策略。
建立一个队列:
往队列中添加消息
添加后mq1服务器 队列中就有消息了
节点mq2中一样也有了
节点停机测试:将mq1停机
rabbitmqctl stop_app
在节点mq2的node中就没有 +1的标识了。 消息还存在。 只不过节点只有一台了。
启动mq1节点:
rabbitmqctl start_app
node恢复了两台, 消息也同步了
持久性测试:
RAM节点仅将其元数据保存在内存中。因为RAM节点没必要像光盘节点那样写入光盘,所以它们能够表现得更好。但请注意,因为持久性队列数据始终存储在磁盘上,所以性能改进将仅影响资源管理(例如,添加/删除队列,交换或虚拟主机),但不会影响发布或消耗速度。
RAM节点是一个高级用例; 设置第一个群集时,您应该不使用它们。您应该有足够的磁盘节点来处理冗余要求,而后在必要时添加额外的RAM节点以进行扩展。
仅包含RAM节点的集群是脆弱的; 若是群集中止,您将没法再次启动它 并将丢失全部数据。在许多状况下,RabbitMQ将阻止建立仅限RAM节点的集群,但它不能彻底阻止它。
此处的示例仅显示具备一个磁盘和一个RAM节点的集群; 这样的集群是一个糟糕的设计选择
将两台节点mq1 和mq2 中止后在启动
当消息选 了持久化后 中止而后启动后 也会恢复消息。 至此, 集群搭建完成。
集群搭建参考:
https://www.rabbitmq.com/clustering.html
http://www.javashuo.com/article/p-ojfaxggh-gb.html
安装 haproxy ,
nginx 适用于 web代理
haproxy 与 LVS
1)二者都是软件负载均衡产品,可是LVS是基于Linux操做系统实现的一种软负载均衡,而HAProxy是基于第三应用实现的软负载均衡。
2)LVS是基于四层的IP负载均衡技术,而HAProxy是基于四层和七层技术、可提供TCP和HTTP应用的负载均衡综合解决方案。
3)LVS工做在ISO模型的第四层,所以其状态监测功能单一,而HAProxy在状态监测 方面功能强大,可支持端口、URL、脚本等多种状态检测方式。
4)HAProxy虽然功能强大,可是总体处理性能低于四层模式的LVS负载均衡,而LVS拥有接近硬件设备的网络吞吐和链接负载能力。
综上所述,HAProxy和LVS各有优缺点,没有好坏之分,要选择哪一个做为负载均衡器,要以实际的应用环境来决定。
1:wget http://download.openpkg.org/components/cache/haproxy/haproxy-1.9.5.tar.gz
2:下载地址:http://download.openpkg.org/components/cache/haproxy/
下载后
解压:
tar -zxvf haproxy-1.9.5.tar.gz
进入解压目录
cd haproxy-1.9.5
查询内核版本:
uname -r
注:此处TARGET=linux26是填写系统内核版本 ,内核版本怎么看. uname -r 。如个人版本是3.10.0-862.el7.x86_64, 直接填写310便可。
根据内核版本安装
make TARGET=linux310 PREFIX=/usr/local/haproxy
安装到指定目录 /usr/local/haproxy
make install
haproxy默认不建立配置文件目录,这里是建立haproxy配置文件目录
mkdir /usr/local/haproxy/conf
复制配置, 在解压目录执行
cp examples/option-http_proxy.cfg /usr/local/haproxy/conf/haproxy.cfg
配置文件的配置:
# # demo config for Proxy mode # global maxconn 20000 #最大链接数 #ulimit-n 16384 #打开的最大文件描述符(不建议设置项) log 127.0.0.1 local0 #定义全局的syslog服务器,接收haproxy启动和中止的日志。最多能够定义两个 uid 200 #以指定的UID或用户名身份运行haproxy进程 gid 200 #以指定的GID或组名运行haproxy,建议使用专用于运行haproxy的GID,以避免因权限问题带来风险 chroot /var/empty #修改haproxy工做目录至指定目录,可提高haproxy安全级别,但要确保必须为空且任何用户均不能有写权限 nbproc 1 #指定启动的haproxy进程个数,只能用于守护进程模式的haproxy;默认只启动一个进程,通常只在单进程仅能打开少数文件描述符的场景>中才使用多进程模式;(官方强烈建议不要设置该选项) daemon #让haproxy以守护进程的方式工做于后台 spread-checks 2 #健康检查下 官方建议2-5之间 defaults mode http #工做模式 option dontlognull log global #记录日志 option http-server-close #启用服务器端关闭 #option forwardfor except 127.0.0.0/8 #传递客户端ip option redispatch #当服务器组中的某台设备故障后,自动将请求重定向到组内其余主机。 retries 3 #请求重试的次数 timeout http-request 10s #http请求超时时间 timeout queue 1m #一个请求在队列里的超时时间· timeout connect 10s #链接服务器超时时间 timeout client 1m #设置客户端侧最大非活动时间 timeout server 1m #设置服务器侧最大非活动时间 timeout http-keep-alive 10s #设置http-keep-alive的超时时间 timeout check 10s #当一个链接创建以后, maxconn 3000 #同时处理的最大链接数 #errorfile 403 /etc/haproxy/errorfiles/403.http #errorfile 500 /etc/haproxy/errorfiles/500.http #errorfile 502 /etc/haproxy/errorfiles/502.http #errorfile 503 /etc/haproxy/errorfiles/503.http #errorfile 504 /etc/haproxy/errorfiles/504.http ### haproxy 监控页面地址是:http://IP:9188/hastatus listen admin_stats bind *:9188 #监听的地址和端口,默认端口1080 mode http #模式 option tcplog stats refresh 5s #页面自动刷新间隔,每隔5s刷新 stats uri /hastatus #访问路径,在域名后面添加/stats能够查看haproxy监控状态,默认为/haproxy?stats stats realm welcome login\ Haproxy #提示信息,空格以前加\ stats auth admin:123456 #登录用户名和密码 stats hide-version #隐藏软件版本号 stats admin if TRUE #当经过认证才可管理 ### rabbitmq 集群配置,转发到 listen rabbitmq_cluster bind *:5672 option tcplog mode tcp balance roundrobin server rabbitnode1 IP:5672 check inter 2000 rise 2 fall 3 weight 1 #节点一 server rabbitnode2 IP:5672 check inter 2000 rise 2 fall 3 weight 1 #节点二
若是 全局变量配置 global 中配置了 log, 那么还须要执行如下命令:加入日志路径
cat <<eof>>/etc/rsyslog.conf local0.* /var/log/haproxy.log eof
重启日志:
systemctl restart rsyslog
检查配置文件是否正确:
haproxy -c -f /usr/local/haproxy/conf/haproxy.cfg
若是出现以下则是参数没有设置:client, connect, server 的timeouts 么有设置。
出现以下则没有问题了。
加入卡机启动:
cat <<eof>>/etc/rc.d/rc.local haproxy -f /usr/local/haproxy/conf/haproxy.cfg eof
将rc.local 赋予执行权限,否则死活都不能开机启动
sudo chmod +x rc.local
启动:
haproxy -f haproxy.cfg
从新启动:
service haproxy restart
启动后输入配置的hastatus就能看到以下的监控页面: http://IP:9188/hastatus
注意开启防火墙端口。
一、HAProxy支持的负载均衡算法
(1)、roundrobin,表示简单的轮询,负载均衡基础算法
(2)、static-rr,表示根据权重
(3)、leastconn,表示最少链接者先处理
(4)、source,表示根据请求源IP
(5)、uri,表示根据请求的URI;
(6)、url_param,表示根据请求的URl参数来进行调度
(7)、hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
(8)、rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
二、经常使用的负载均衡算法
(1)轮询算法:roundrobin
(2)根据请求源IP算法:source
(3)最少链接者先处理算法:lestconn
测试 haproxy 是否成功代理, 使用springboot测试,
1:新建一个maven项目
2: pom引入依赖
<!-- 添加springboot对amqp的支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
3:增长application.yml配置
host为你部署haproxy的服务器的IP;
注意: 防火墙必定要开启5672端口。
spring: rabbitmq: host: IP port: 5672 username: 你的用户名 password: 你的密码 virtual-host: /
4:代码测试:
@SpringBootTest(classes=Main.class) @RunWith(SpringJUnit4ClassRunner.class) public class Tests { @Autowired private SendMsg sendMsg; @Autowired private ReceiveMsg receiveMsg; @Autowired private AmqpTemplate amqpTemplate; private String queue = "test"; @Test public void sendmsg() { for (int i = 0; i < 100; i++) { amqpTemplate.convertAndSend(queue, "消息测试"+i); } }
若是运行成功, 队列中有发送的消息,那么就代理成功,
若是没有成功,则检查防火墙端口是否开放, 端口是否配置错误,ip是否配置错误, 用户名密码权限是否配置错误
剩下keepalive 高可用就没弄了。 有时间在加上
参考文档 http://cbonte.github.io/haproxy-dcon
商业化网站:https://www.haproxy.com