南京网站设计外包,优秀网站设计案例中国,wordpress维护页面,中国电商平台有哪些接上篇#xff1a;《RabbitMQ 从入门到精通#xff1a;从工作模式到集群部署实战#xff08;一#xff09;》 链接 文章目录 4.安装RabbitMQ Messaging Topology Operator 裸金属环境部署RabbitMQ部署单实例部署集群 4.安装RabbitMQ Messaging Topology Operator
使用 cer…接上篇《RabbitMQ 从入门到精通从工作模式到集群部署实战一》 链接 文章目录 4.安装RabbitMQ Messaging Topology Operator 裸金属环境部署RabbitMQ部署单实例部署集群 4.安装RabbitMQ Messaging Topology Operator
使用 cert-manager 安装Messaging Topology Operator 在k8s集群上安装 cert-manager 版本 1.2.0。例如对于版本 1.3.1请运行
wget https://github.com/jetstack/cert-manager/releases/download/v1.3.1/cert-manager.yamlkubectl apply -f cert-manager.yaml要安装 Operator请运行以下命令
wget https://github.com/rabbitmq/messaging-topology-operator/releases/latest/download/messaging-topology-operator-with-certmanager.yamlkubectl apply –f messaging-topology-operator-with-certmanager.yaml使用生成的自有证书安装Messaging Topology Operator
此方式因涉及自建私有证书具体步骤可以参考官方文档 https://www.rabbitmq.com/kubernetes/operator/install-topology-operator#install-with-generated-certificates
使用Kubernetes 内部非默认域名
默认情况下Kubernetes 内部域名为.cluster.local。kubeadm可以将其配置为其他名称例如my.cluster.domain。在这种情况下Messaging Topology Operator可以将自定义域名附加到用于与 RabbitMQ 交互的连接字符串中。
要配置消息传递拓扑操作员以在连接字符串中附加域名请将环境变量设置MESSAGING_DOMAIN_NAME为您的域名例如.my.cluster.domain。
修改Messaging Topology Operator部署清单文件在Deployment配置段中向spec. template… spec. container. Command增加一个env名称MESSAGING_DOMAIN_NAME和值为您的域名如messaging-topology-operator-with-certmanager.yaml
apiVersion: apps/v1
kind: Deployment
metadata:[...]name: messaging-topology-operatornamespace: rabbitmq-system
spec:template:[...]spec:containers:- command:- /managerenv:- name: OPERATOR_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: MESSAGING_DOMAIN_NAMEvalue: my.cluster.domainMessaging Topology Operator使用 创建queue和Policy 以下清单将在namepace名为rabbitmq-test下默认虚拟主机中创建一个名为“queue-t1-rabbitmq-test”的队列
cat queue-t1-rabbitmq-test.yamlapiVersion: rabbitmq.com/v1beta1
kind: Queue
metadata:name: queue-t1namespace: rabbitmq-test
spec:name: queue-t1-rabbitmq-testautoDelete: falsedurable: truerabbitmqClusterReference:name: rabbitmq-cluster01namespace: rabbitmq-test
kubectl apply -f queue-t1-rabbitmq-test.yaml
queue.rabbitmq.com/queue-t1 createdkubectl get queue -n rabbitmq-test
NAME AGE
queue-t1 17s以下清单将在namepace名为rabbitmq-test下创建名为“policy-example”的policy
cat policy.yamlapiVersion: rabbitmq.com/v1beta1
kind: Policy
metadata:name: policy-examplenamespace: rabbitmq-test
spec:name: lazy-queuepattern: ^lazy-queue- # matches any queue begins with lazy-queue-applyTo: queuesdefinition:queue-mode: lazyrabbitmqClusterReference:name: rabbitmq-cluster01namespace: rabbitmq-testkubectl apply -f policy.yaml
policy.rabbitmq.com/policy-example createdkubectl get policy -n rabbitmq-test
NAME AGE
policy-example 54s创建exchange和binding 以下清单将在namepace名为rabbitmq-test下创建名为“rabbitmq-test”的exchange cat exchange.yaml
cat exchange.yamlapiVersion: rabbitmq.com/v1beta1
kind: Exchange
metadata:name: fanoutnamespace: rabbitmq-test
spec:name: fanout-exchange # name of the exchangetype: fanout # default to direct if not provided; can be set to direct, fanout, headers, and topicautoDelete: falsedurable: truerabbitmqClusterReference:name: rabbitmq-cluster01namespace: rabbitmq-testkubectl apply -f exchange.yaml
exchange.rabbitmq.com/fanout createdkubectl get exchange -n rabbitmq-test
NAME AGE
fanout 13s以下清单将在namepace名为rabbitmq-test下将名为“rabbitmq-test”的exchange与名为“queue-t1-rabbitmq-test”的queue 进行绑定
cat binding.yamlapiVersion: rabbitmq.com/v1beta1
kind: Binding
metadata:name: bindingnamespace: rabbitmq-test
spec:source: fanout-exchange # an existing exchangedestination: queue-t1-rabbitmq-test # an existing queuedestinationType: queue # can be queue or exchangeroutingKey: queue-t1-rabbitmq-testrabbitmqClusterReference:name: rabbitmq-cluster01namespace: rabbitmq-testkubectl apply -f binding.yaml
binding.rabbitmq.com/binding created创建的binding无法通过kubectl 命令列出但通过RabbitMQ的管理UI可以看到。 创建用户及授权 可以使用 Messaging Topology Operator 创建 RabbitMQ 用户并分配用户权限
对账号(admin-user01)、密码(123123.com)进行base64加密
echo -n admin-user01 | base64
YWRtaW4tdXNlcjAxecho -n 123123.com | base64
MTIzMTIzLmNvbQ创建secret
vim secret-admin-user01.yamlapiVersion: v1
kind: Secret
metadata:name: admin-user-secretnamespace: rabbitmq-test # 指定rabbitmq-cluster01的namespace
type: Opaque
data:username: YWRtaW4tdXNlcjAx # base64 编码后的用户名password: MTIzMTIzLmNvbQ # base64 编码后的密码kubectl apply -f secret-admin-user01.yaml
secret/admin-user01-secret created创建Rabbitmq 账号资源需要引用上面步骤创建的secret
vim my-admin-user01.yamlapiVersion: rabbitmq.com/v1beta1
kind: User
metadata:name: my-admin-user01namespace: rabbitmq-test
spec:tags:- administratorrabbitmqClusterReference:name: rabbitmq-cluster01 # rabbitmqCluster must exist in the same namespace as this resourcenamespace: rabbitmq-testimportCredentialsSecret:name: admin-user01-secret # must match the name of the Secretkubectl apply -f my-admin-user01.yaml
user.rabbitmq.com/my-admin-user01 created创建Rabbitmq 账号授权资源
vim permission-admin-user10.yamlapiVersion: rabbitmq.com/v1beta1
kind: Permission
metadata:name: admin-user01-permissionnamespace: rabbitmq-test
spec:vhost: /user: admin-user01 # name of the RabbitMQ userpermissions:write: .*configure: .*read: .*rabbitmqClusterReference:name: rabbitmq-cluster01namespace: rabbitmq-testkubectl apply -f permission-admin-user10.yaml
permission.rabbitmq.com/admin-user01-permission created创建虚拟主机 以下YAML将在名为“rabbitmq-cluster01”的 RabbitmqCluster 中创建名为“test”的虚拟主机
vim vhost01.yamlapiVersion: rabbitmq.com/v1beta1
kind: Vhost
metadata:name: test-vhost01 # name of this custom resourcenamespace: rabbitmq-test
spec:name: test01 # name of the vhostrabbitmqClusterReference:name: rabbitmq-cluster01namespace: rabbitmq-testkubectl apply -f vhost01.yaml
vhost.rabbitmq.com/test-vhost01 createdkubectl get vhost -n rabbitmq-test
NAME AGE
test-vhost01 2s更新 一些自定义资源属性是不可变的Messaging Topology Operator 实现了验证 webhook 来阻止对不可变字段的更新。禁止的更新将被拒绝。例如
kubectl apply -f test-queue.yaml
Error from server (Forbidden):
...
Resource: rabbitmq.com/v1beta1, Resourcequeues, GroupVersionKind: rabbitmq.com/v1beta1, KindQueue
Name: example, Namespace: rabbitmq-system
for: test-queue.yaml: admission webhook vqueue.kb.io denied the request: Queue.rabbitmq.com example is forbidden: spec.name: Forbidden: updates on name, vhost, and rabbitmqClusterReference are all forbidden无法更新的属性已记录在Messaging Topology Operator API 文档中URLhttps://github.com/rabbitmq/messaging-topology-operator/blob/main/docs/api/rabbitmq.com.ref.asciidoc
删除 删除自定义资源会删除 RabbitMQ 集群中相应的资源。Messaging Topology Operator 会在所有自定义资源上设置 kubernetes finalizers。如果对象已在 RabbitMQ 集群中删除或者 RabbitMQ 集群已删除Messaging Topology Operator 会删除自定义资源而不会尝试删除 RabbitMQ 对象。
跨命名空间 默认情况下Messaging Topology Operator 只协调使用RabbitMQ Cluster Kubernetes Operator 创建的RabbitMQ集群所在namespace下的创建消息拓扑资源请求。如果需要创建的建消息拓扑资源在其他的namesapce需要在namespace 下添加相关注解annotations.rabbitmq.com/topology-allowed-namespaces
如下图RabbitMQ集群所在的的namespace为rabbitmq-test如果需要Messaging Topology Operator 额外协调rabbitmq-01和rabbitmq-02 两个namespace下消息拓扑资源需要进行如下配置多个namespace使用逗号分隔中间不能有空格。可以设置为“*”则为协调所有namesapce
apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:name: rabbitmq-cluster01namespace: rabbitmq-testannotations:rabbitmq.com/topology-allowed-namespaces: rabbitmq-01,rabbitmq-02如果在没有允许的namespace中创建消息拓扑资源如下图中为“my-app2”Topology Operator 的pod会有相关日志提示 示例如下 在namespace为my-app2下创建名称为queue-t1的queue, 在rabbitmq中的名称为queue-t1-my-app2
apiVersion: rabbitmq.com/v1beta1
kind: Queue
metadata:name: queue-t1 # name of this custom resource; does not have to the same as the actual queue namenamespace: my-app2
spec:name: queue-t1-my-app2 # name of the queuerabbitmqClusterReference:name: rabbitmq-cluster01namespace: rabbitmq-test虽然使用kuberct 命令在namespace可以获取到列表 但在rabbitmq中没有创建名字为queue-t1-my-app2的queue 故障排查 如果无法创建某些 RabbitMQ 拓扑对象可通过Messaging Topology Operator 的pod日志进行排查。
kubectl -n rabbitmq-system logs -l app.kubernetes.io/namemessaging-topology-operator另外还可以使用kubectl desribe命令查看资源的详细信息
kubectl describe queue queue-t1 -n rabbitmq-testName: queue-t1
Namespace: rabbitmq-test
Labels: none
Annotations: none
API Version: rabbitmq.com/v1beta1
Kind: Queue
Metadata:Creation Timestamp: 2024-10-25T09:46:27ZFinalizers:deletion.finalizers.queues.rabbitmq.com
…Vhost: /
Status:Conditions:Last Transition Time: 2024-10-25T09:46:27ZReason: SuccessfulCreateOrUpdateStatus: TrueType: ReadyObserved Generation: 2
Events:Type Reason Age From Message- - - -Normal SuccessfulDeclare 7h2m (x6 over 47h) queue-controller Successfully declare queue裸金属环境部署RabbitMQ
OS及内核
[rootrbt01 ~]# cat /etc/redhat-release
BigCloud Enterprise Linux For Euler release 21.10 (LTS-SP2)[rootrbt01 ~]# uname -a
Linux rbt01 4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64 #1 SMP Tue Jul 18 10:06:28 CST 2023 x86_64 x86_64 x86_64 GNU/LinuxErlang和RabbitMQ版本匹配关系参考官方文档 https://www.rabbitmq.com/docs/3.13/which-erlang#redhat 本文档选用Erlangv26.2.5.4和RabbitMQ: v3.13.7
部署单实例
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld安装Erlang Erlang官方推荐使用各系统平台预安装包进行安装Euler 21.10使用以下rmp包进行安装下载地址https://github.com/rabbitmq/erlang-rpm/releases/download/v26.2.5.4/erlang-26.2.5.4-1.el7.x86_64.rpm
执行安装及通过验证版本号测试是否安装成功
# 安装
yum install erlang-26.2.5.4-1.el7.x86_64.rpm# 查看版本
erl -version
Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version 14.2.5.4部署RabbitMQ 二进制包下载地址 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz
创建rabbitmq普通用户并设置密码用于管理rabbitmq
useradd rabbitmq
passwd rabbitmq解压下载好的二进制安装包到/opt目录下并做软连接
tar xf rabbitmq-server-generic-unix-3.13.7.tar.xz -C /opt/
cd /opt/
ln -s /opt/rabbitmq_server-3.13.7/ /opt/rabbitmq
ln -s /opt/rabbitmq/sbin/* /usr/local/sbin/安装完成后默认没有配置文件可以从官网下载示例放到/opt/rabbitmq/etc/rabbitmq下 https://github.com/rabbitmq/rabbitmq-server/blob/main/deps/rabbit/docs/rabbitmq.conf.example
可以根据实际需要参考下面的官方文档进行参数配置 https://www.rabbitmq.com/docs/3.13/configure#config-items
修改rabbitmq 目录权限
chown –R rabbitmq:rabbitmq /opt/rabbitmq*使用rabbitmq账号并启动服务
su – rabbitmq
rabbitmq-server -detached查看服务进程及监听端口号默认会监听567225672 两个端口 5672用于接受rabbitmq 客户端连接请求 25672 用于集群模式下集群间通信 关闭服务命令
rabbitmqctl shutdown启动web管理插件实现web 浏览器图形界面管理。
rabbitmq-plugins enable rabbitmq_management启动web管理插件插件后RabbitMQ会另外启动15672端口用户web服务。 使用服务器IP和15672端口访问web管理页面。 创建账号密码并设置权限 以下命令创建了admin账号并设置密码为Admin.123将其标记为administrator并设置了对/ 有所有权限
rabbitmqctl add_user admin Admin.123
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin .* .* .*使用admin账号登录web管理页面 解决web管理界面提示 ⚠ All stable feature flags must be enabled after completing an upgrade. [Learn more]
导航到特性标志页面 在RabbitMQ管理界面的左侧菜单中找到并点击“Admin”选项。 在“Admin”页面中找到并点击“Feature Flags”选项。启用特性标志 在“Feature Flags”页面中你会看到一个列表其中包含了所有可用的特性标志。 检查每个特性标志的状态确保所有标记为“stable”稳定的特性标志都被启用。如果发现有未启用的稳定特性标志请将其启用。 列出功能标志
rabbitmqctl list_feature_flags要启用功能标志或所有当前禁用的标志 rabbitmqctl enable_feature_flag all | name 开启detailed_queues_endpoint 功能标志
rabbitmqctl enable_feature_flag detailed_queues_endpointFeature Flags介绍 官方文档https://www.rabbitmq.com/docs/3.13/feature-flags 功能标记是一种机制用于控制哪些功能在所有集群节点上被视为已启用或可用。如果启用了功能标记则其相关功能或行为也会启用。如果没有启用则集群中的所有节点都将禁用该功能行为。
功能标志子系统允许不同版本的 RabbitMQ 节点确定它们是否兼容然后相互通信尽管它们具有不同的版本因此可能具有不同的功能集或实现细节。
引入此子系统是为了允许在不关闭整个集群的情况下对集群成员进行滚动升级。
至此RabbitMQ单实例部署完成。
部署集群
服务器列表 3个节点保持一致
[rootrbt01 ~]# tail -n 3 /etc/hosts
192.168.18.11 rbt01
192.168.18.12 rbt02
192.168.18.13 rbt03分别在3个节点按照“单实例部署”步骤部署完成 参考上面章节 所有节点配置主机域名解析
vim /etc/hosts
192.168.18.11 rbt01
192.168.18.12 rbt02
192.168.18.13 rbt03节点间同步cookie文件 Erlang cookie 是用于RabbitMQ 节点和CLI 工具之间身份验证的共享密钥。该值存储在通常称为 Erlang cookie 文件的文件中。 服务帐户和运行用户使用的 Cookie 文件rabbitmqctl必须同步CLI 工具才能rabbitmqctl正常运行。集群中的所有节点必须具有相同的 Cookie 值Cookie 文件内容。
同步cooker前确保rabbitmq进程是关闭状态。
[rootrbt01 ~]# rabbitmqctl shutdown[rootrbt02 ~]# rabbitmqctl shutdown[rootrbt03 ~]# rabbitmqctl shutdown
在 UNIX 系统上cookie 通常位于$HOME/.erlang.cookie 如果使用rabbitmq普通用户启动rabbitmq服务.erlang.cookie文件的路径为/home/rabbitmq/.erlang.cookie .erlang.cookie 文件内容可以是自定义的字符串
将rbt01节点上/home/rabbitmq/.erlang.cookie 文件复制到rbt02,rbt03
[rootrbt01 ~]# scp .erlang.cookie rbt02:$PWD
.erlang.cookie [rootrbt01 ~]# scp .erlang.cookie rbt03:$PWD
.erlang.cookie 并确保所有节点/home/rabbitmq/.erlang.cookie的属主属组是rabbitmq 权限是400
chown –R rabbit:rabbit /home/rabbitmq/.erlang.cookie
chmod 400 /home/rabbitmq/.erlang.cookie配置集群方式一在配置文件中增加如下配置 /opt/rabbitmq/etc/rabbitmq/rabbitmq.conf
cluster_name rbt-cluster01
cluster_formation.peer_discovery_backend rabbit_peer_discovery_classic_configcluster_formation.classic_config.nodes.1 rabbitrbt01
cluster_formation.classic_config.nodes.2 rabbitrbt02
cluster_formation.classic_config.nodes.3 rabbitrbt03在所有节点启动服务集群将自动形成
[rabbitmqrbt01 ~]$ rabbitmq-server –detached[rabbitmqrbt02 ~]$ rabbitmq-server –detached[rabbitmqrbt03 ~]$ rabbitmq-server –detached在rbt01节点日志中查看有相关日志
2024-11-05 11:23:41.79389708:00 [info] 0.734.0 node rabbitrbt02 up
2024-11-05 11:23:43.06648008:00 [info] 0.734.0 rabbit on node rabbitrbt02 up
2024-11-05 11:24:01.29492708:00 [info] 0.734.0 node rabbitrbt03 up
2024-11-05 11:24:02.70585008:00 [info] 0.734.0 rabbit on node rabbitrbt03 up配置集群方式二不需在rabbitmq.conf配置文件定义使用以下命令配置集群 将rbt02节点加入集群
[rabbitmqrbt02 ~]$ rabbitmqctl stop_app
Stopping rabbit application on node rabbitrbt02 ...[rabbitmqrbt02 ~]$ rabbitmqctl join_cluster rabbitrbt01
Clustering node rabbitrbt02 with rabbitrbt01[rabbitmqrbt02 ~]$ rabbitmqctl start_app
Starting node rabbitrbt02 ...将rbt03节点加入集群
[rabbitmqrbt03 ~]$ rabbitmqctl stop_app
Stopping rabbit application on node rabbitrbt03 ...[rabbitmqrbt03 ~]$ rabbitmqctl join_cluster rabbitrbt01
Clustering node rabbitrbt03 with rabbitrbt01[rabbitmqrbt03 ~]$ rabbitmqctl start_app
Starting node rabbitrbt03 ...
查看集群状态
[rabbitmqrbt01 ~]$ rabbitmqctl cluster_status
Cluster status of node rabbitrbt01 ...
BasicsCluster name: rabbitrbt01
Total CPU cores available cluster-wide: 12Disk Nodesrabbitrbt01
rabbitrbt02
rabbitrbt03Running Nodesrabbitrbt01
rabbitrbt02
rabbitrbt03Versionsrabbitrbt01: RabbitMQ 3.13.7 on Erlang 26.2.5.4
rabbitrbt02: RabbitMQ 3.13.7 on Erlang 26.2.5.4
rabbitrbt03: RabbitMQ 3.13.7 on Erlang 26.2.5.4
… 文章转载自: http://www.morning.rmpfh.cn.gov.cn.rmpfh.cn http://www.morning.kztts.cn.gov.cn.kztts.cn http://www.morning.jyjqh.cn.gov.cn.jyjqh.cn http://www.morning.dyxzn.cn.gov.cn.dyxzn.cn http://www.morning.ffptd.cn.gov.cn.ffptd.cn http://www.morning.beijingzy.com.cn.gov.cn.beijingzy.com.cn http://www.morning.lsnbx.cn.gov.cn.lsnbx.cn http://www.morning.mqxrx.cn.gov.cn.mqxrx.cn http://www.morning.rkmsm.cn.gov.cn.rkmsm.cn http://www.morning.dxrbp.cn.gov.cn.dxrbp.cn http://www.morning.nqbs.cn.gov.cn.nqbs.cn http://www.morning.nmfwm.cn.gov.cn.nmfwm.cn http://www.morning.rnnq.cn.gov.cn.rnnq.cn http://www.morning.kkgbs.cn.gov.cn.kkgbs.cn http://www.morning.tqfnf.cn.gov.cn.tqfnf.cn http://www.morning.rsjf.cn.gov.cn.rsjf.cn http://www.morning.jpzcq.cn.gov.cn.jpzcq.cn http://www.morning.crsqs.cn.gov.cn.crsqs.cn http://www.morning.nkyqh.cn.gov.cn.nkyqh.cn http://www.morning.cnxpm.cn.gov.cn.cnxpm.cn http://www.morning.nnpwg.cn.gov.cn.nnpwg.cn http://www.morning.lxlzm.cn.gov.cn.lxlzm.cn http://www.morning.mpgfk.cn.gov.cn.mpgfk.cn http://www.morning.tsyny.cn.gov.cn.tsyny.cn http://www.morning.lqypx.cn.gov.cn.lqypx.cn http://www.morning.nzklw.cn.gov.cn.nzklw.cn http://www.morning.gcrlb.cn.gov.cn.gcrlb.cn http://www.morning.nqgjn.cn.gov.cn.nqgjn.cn http://www.morning.zjrnq.cn.gov.cn.zjrnq.cn http://www.morning.qcfcz.cn.gov.cn.qcfcz.cn http://www.morning.splcc.cn.gov.cn.splcc.cn http://www.morning.zjrnq.cn.gov.cn.zjrnq.cn http://www.morning.rxkq.cn.gov.cn.rxkq.cn http://www.morning.rgpsq.cn.gov.cn.rgpsq.cn http://www.morning.mmhyx.cn.gov.cn.mmhyx.cn http://www.morning.mmkrd.cn.gov.cn.mmkrd.cn http://www.morning.qgqck.cn.gov.cn.qgqck.cn http://www.morning.phtqr.cn.gov.cn.phtqr.cn http://www.morning.ggnrt.cn.gov.cn.ggnrt.cn http://www.morning.yqrfn.cn.gov.cn.yqrfn.cn http://www.morning.knryp.cn.gov.cn.knryp.cn http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn http://www.morning.hnk25076he.cn.gov.cn.hnk25076he.cn http://www.morning.xrwbc.cn.gov.cn.xrwbc.cn http://www.morning.htrzp.cn.gov.cn.htrzp.cn http://www.morning.ppdr.cn.gov.cn.ppdr.cn http://www.morning.sfcfy.cn.gov.cn.sfcfy.cn http://www.morning.jpnfm.cn.gov.cn.jpnfm.cn http://www.morning.lzbut.cn.gov.cn.lzbut.cn http://www.morning.bxhch.cn.gov.cn.bxhch.cn http://www.morning.cxnyg.cn.gov.cn.cxnyg.cn http://www.morning.dfqmy.cn.gov.cn.dfqmy.cn http://www.morning.saastob.com.gov.cn.saastob.com http://www.morning.kkrnm.cn.gov.cn.kkrnm.cn http://www.morning.fjscr.cn.gov.cn.fjscr.cn http://www.morning.skwwj.cn.gov.cn.skwwj.cn http://www.morning.mcwgn.cn.gov.cn.mcwgn.cn http://www.morning.qmwzr.cn.gov.cn.qmwzr.cn http://www.morning.kmqlf.cn.gov.cn.kmqlf.cn http://www.morning.hpkgm.cn.gov.cn.hpkgm.cn http://www.morning.xqspn.cn.gov.cn.xqspn.cn http://www.morning.psxwc.cn.gov.cn.psxwc.cn http://www.morning.lhzqn.cn.gov.cn.lhzqn.cn http://www.morning.rnzgf.cn.gov.cn.rnzgf.cn http://www.morning.lpsjs.com.gov.cn.lpsjs.com http://www.morning.zdsdn.cn.gov.cn.zdsdn.cn http://www.morning.fglyb.cn.gov.cn.fglyb.cn http://www.morning.ndmbz.cn.gov.cn.ndmbz.cn http://www.morning.fgkwh.cn.gov.cn.fgkwh.cn http://www.morning.rfbt.cn.gov.cn.rfbt.cn http://www.morning.gpkjx.cn.gov.cn.gpkjx.cn http://www.morning.kgnnc.cn.gov.cn.kgnnc.cn http://www.morning.qbdsx.cn.gov.cn.qbdsx.cn http://www.morning.cczrw.cn.gov.cn.cczrw.cn http://www.morning.stmkm.cn.gov.cn.stmkm.cn http://www.morning.yprnp.cn.gov.cn.yprnp.cn http://www.morning.mhlsx.cn.gov.cn.mhlsx.cn http://www.morning.supera.com.cn.gov.cn.supera.com.cn http://www.morning.ddxjr.cn.gov.cn.ddxjr.cn http://www.morning.wwxg.cn.gov.cn.wwxg.cn