中标麒麟-部署

1. docker

由于项目采用容器部署,因此,需要先安装docker,但是在内网中,需要采用离线安装。
下载地址:https://download.docker.com/linux/static/stable
将相关部署包放到服务器上,执行如下命令即可完成docker安装

# 解压
# 注意必须重新解压,否则会【Failed to start Docker Application Container Engine】的报错
cd /opt/docker/
tar -zxvf docker-20.10.9.tgz
# 移动到指定目录
cp -p docker/* /usr/bin
# 将预先准备的配置文件复制到指定目录
cp docker.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start docker
systemctl status docker.service

2. 图数据库部署

将预先准备的数据库安装包、控制台、测试数据复制到集群的master服务器的指定的目录,并复制到其他所有节点

scp -r /opt/nebula ip2:/opt

关闭集群各节点间的防火墙

systemctl stop firewalld

2.1 图数据库

在集群所有节点上执行如下操作

cd /opt/nebula
rpm -ivh nebula-graph-3.2.0.el7.x86_64.rpm
cd /usr/local/nebula/etc
vi nebula-graphd.conf
vi nebula-metad.conf
vi nebula-storaged.conf

在集群的所有节点上,对上述3个配置文件中的如下两个参数进行修改,不同的服务器上ip根据实际ip进行修改

--meta_server_addrs=ip1:9559,ip2:9559,ip3:9559
--local_ip=ip1

在集群的所有节点上,启动数据库

/usr/local/nebula/scripts/nebula.service start all
# 查看服务状态
/usr/local/nebula/scripts/nebula.service status all

登录客户端,添加hosts

chmod -R 777 /opt/nebula
/opt/nebula/nebula-console -addr ip1 -port 9669 -u root -p nebula
ADD HOSTS ip1:9779, ip2:9779, ip3:9779

2.2 建图与建节点、边

由于nebula是强schema数据库,需要预先定义图、点、边的名称和属性字段,才能继续入库,并且定义好之后,还需要建立点、边的索引才能进行查询。将相关脚本整理存入txt中,采用nebula-console客户端进行图数据库后,依次执行即可。

2.3 入库

预先准备相关测试的csv文件,以及config文件,采用nebula-import进行入库,分别执行如下命令,完成节点、边的入库

/opt/nebula/nebula-importer --config /opt/nebula/edi/node_config.yaml
/opt/nebula/nebula-importer --config /opt/nebula/edi/edge_config.yaml

2.4 备份与恢复

将nebula-br和agent部署文件复制到服务器上,启动agent

/opt/nebula/agent --agent="ip1:8888" --meta="ip1:9559" --ratelimit=1048576 > nebula_agent.log 2>&1 &
# 登录图数据库,查看agent是否为online状态
SHOW HOSTS AGENT;

备份命令

# 备份到本地
/opt/nebula/nebula-br/bin/br backup full --meta "ip1:9559" --storage "local:///opt/nebula/backup/"
# 备份到s3

恢复命令

# 查看备份信息
/opt/nebula/nebula-br/br show --storage "local:///opt/nebula/backup"
# 恢复
/opt/nebula/nebula-br/br restore full --meta "ip1:9559" --storage "local:///opt/nebula/backup/" --name BACKUP_2022_12_08_18_38_08

3. kerberos安全策略下的组件访问

3.1 ntp离线部署

由于kerberos通过TGT票据授信的方式进行安全控制,客户端与服务器的时钟需要同步,因此,需要安装ntp服务。
请添加图片描述

将ntp的3个安装包复制到/opt目录下,并执行安装

cd  /opt/ntp
rpm -ivh --force autogen-libopts-5.18-5.el7.x86_64.rpm
rpm -ivh --force ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm
rpm -ivh --force ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm

若报错,则执行
在这里插入图片描述

rpm -ivh libedit-3.0-12.20121213cvs.el7.x86_64.rpm

配置ntp,将ntp.conf文件复制到/etc目录

mv  /etc/ntp.conf  /etc/ntp.conf.bak

在/etc/ntp.conf文件中添加如下配置

# ip为需要同步的服务器的ip
server <ip>

启动ntp服务

systemctl start ntpd
systemctl status ntpd

如果在容器中,这一命令会启动失败,因为容器中没有systemctl的执行权限,需要以特权模式运行容器才可以

docker run -tid --name base --privileged=true -t xx:1.0 /usr/sbin/init

3.2 kinit

由于服务器内网通过kerberos进行访问控制,因此需要安装kinit客户端。

# 获取安装包,进行install
cd /opt/client/FusionInsight_Cluster_1_Services_ClientConfig
./install.sh /opt/hadoopclient

安装完毕后,使用kinit命令获取票据

cd /opt/hadoopclient
source bigdata_env
kinit <username>
# 上述步骤可以通过此命令一次完成
# 每次打开xshell窗口时,需要进行一次source
source /opt/hadoopclient/bigdata_env <username> <user.keytab>
# 之后每24小时执行如下命令属性票据
kinit -kt <user.keytab> <username> 
# 查看票据的状态
klist

之后,通过curl命令可以访问es

curl -XGET --negotiate -k -u : -H "Content-Type: application/json" '10.30.239.211:9200/'

在容器中安装时,需要注释./install.sh中448行mv dest_temp_hosts /etc/hosts的命令,这同样是因为容器内没有执行权限。需要将数据云平台的服务器ip和域名手动追加到/etc/hosts中。

3.3 Python访问

尽管可以通过curl在shell客户端进行访问,但开发过程中需要通过python客户端访问es,即python需要获取kerberos的授权,安装如下两个依赖包

gssapi==1.7.3
requests-kerberos==0.14.0

使用requests-kerberos前,需要在客户端上对组件的业务用户user进行kinit授权

如果采用url的方式访问es,并且执行的是比较简单的查询,可以采用requests的方法。

import requests
from requests_kerberos import HTTPKerberosAuth
url = 'https://10.30.239.211:9200'
r = requests.get(url, auth=HTTPSKerberosAuth(), verify=False)
print(r.text)

由于项目的es查询比较复杂,因此,仍然使用python的es客户端进行访问,此时,需要给Elasticsearch套一层HTTPKerberosAuth,具体参数配置如下。

from requests_kerberos import HTTPKerberosAuth
from elasticsearch import Elasticsearch, RequestsHttpConnection
url = 'https://10.30.239.211:9200'
es = Elasticsearch(hosts=[url], verify_certs=False, connection_class=RequestsHttpConnection, http_auth=HTTPKerberosAuth(mutual_authentication=3)
dsl = {'size': 1, 'query': {'match_all': {}}}
es_result = es.search(index="company_graph", body=body)
print(es_result)

由于kafka-python集成了kerberos的认证支持,因此,python访问kafka较为简单,kinit之后才有如下代码即可访问。

from kafka import KafkaProducer
producer = KafkaProducer(
                bootstrap_servers=['%s:%s' % (config_map["kafka"]["ip"], config_map["kafka"]["port"])],
                security_protocol='SASL_PLAINTEXT',
                sasl_mechanism='GSSAPI',
                sasl_kerberos_domain_name='hadoop.hadoop.com',
                api_version=(0, 10)
            )
producer.send(topic_name,value=json.dumps(log_data, ensure_ascii=False).encode('utf-8'))

在shell上验证kafka能否正常发送接收消息的命令如下

/opt/hadoopclient/Kafka/kafka/bin/

4. 部署的一些问题

  1. 页面嵌入时报错:X_FRAME_OPTIONS
    注释掉setting.py中的此行
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # 跨站请求伪造缺陷
    'django.middleware.csrf.CsrfViewMiddleware',
    # 注释此行
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'src.action.log_middleware.LogMiddleware',
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值