ii2-elasticsearch(3) ii2 elasticsearch의 초보적인 시도

프로비저닝
return [
    //....
    'components' => [
        'elasticsearch' => [
            'class' => 'yii\elasticsearch\Connection',
            'nodes' => [
                ['http_address' => '127.0.0.1:9200'],
                // configure more hosts if you have a cluster
            ],
        ],
    ]
];


모델 생성하기
namespace api\models;

class CcIndex extends \yii\elasticsearch\ActiveRecord
{
    public static function index()
    {
        return 'shiliucrm';
    }
    public static function primaryKey()
    {
        return ['t_id'];
    }
    public static function type()
    {
        return 'user';
    }
    public function attributes()
    {
        return ['t_id', 't_nickname', 't_add_time', 'compnay_id'];
    }
    public static function mapping()
    {
      return [
            static::type() => [
                "properties" => [
                    "t_id"        =>   ["type" => "long"],
                    "t_nickname" =>  ["type" => "text","index" => "analyzed",],
                    "t_add_time" =>  ["type" => "long","index" => "not_analyzed"],
                    "compnay_id" =>  ["type" => "long"],
                ]
            ]
      ];
    }
    public static function updateMapping()
    {
        $db = static::getDb();
        $command = $db->createCommand();
        $command->setMapping(static::index(), static::type(), static::mapping());
    }
    public static function createIndex()
    {
        $db = static::getDb();
        $command = $db->createCommand();
        $command->createIndex(static::index(), [
            'settings' => [ 'index' => ['refresh_interval' => '1s'] ],
            'mappings' => static::mapping(),
            //'warmers' => [ /* ... */ ],
            //'aliases' => [ /* ... */ ],
            //'creation_date' => '...'
        ]);
    }
    public static function deleteIndex()
    {
        $db = static::getDb();
        $command = $db->createCommand();
        $command->deleteIndex(static::index(), static::type());
    }

}


조작 모형
테스트 데이터를 몇 개 삽입해 주세요.
$model = new CcIndex();
$model->t_id=6;
$model->setAttributes(['t_nickname' => '[email protected]', 't_add_time' => 0, 'company_id' => 2,], false);
$model->save(false);

$model = new CcIndex();
$model->t_id=7;
$model->setAttributes(['t_nickname' => '[email protected]', 't_add_time' => 0, 'company_id' => 2,], false);
$model->save(false);

$model = new CcIndex();
$model->t_id=8;
$model->setAttributes(['t_nickname' => '[email protected]', 't_add_time' => 0, 'company_id' => 3,], false);
$model->save(false);

$model = new CcIndex();
$model->t_id=9;
$model->setAttributes(['t_nickname' => '[email protected]', 't_add_time' => 0, 'company_id' => 3,], false);
$model->save(false);
      

오보
 Cluster autodetection did not find any active nodes.
 //                。 
 

설정이 아직 안 된 것 같습니다. 연결을 찾으십시오.php에서 $autodetectCluster라는 변수를 보았습니다. 기본값은true입니다. 즉, 기본 자동 모니터링 그룹입니다. 우리는false로 바꿔야 합니다.
 'elasticsearch' => [
        'class' => 'yii\elasticsearch\Connection',
        'autodetectCluster' => false,
        'nodes' => [
            ['http_address' => '127.0.0.1:9200'],
            //   ['http_address' => 'inet[/127.0.0.1:9200]'],
            // configure more hosts if you have a cluster
        ],
    ],

이번에는 잘못 보고하지 않았으니, 우리 한번 조회해 봅시다
$data = CcIndex::find()
->query(["match" => ["t_nickname" => "example.com"]])
->all();

결과적으로 여러분은 스스로 인쇄할 수 있습니다. 여기는 붙이지 않겠습니다
클러스터 구성
$autodetectCluster=true를 기본으로 설정하려면 그룹을 어떻게 설정합니다. 만약 우리가 두 개의 서버를 가지고 있다면, 네트워크 IP는 각각 10.170.224.67,10.170.224.6810.170.224.67의 예로 구성
 vim /usr/local/elasticsearch/config/elasticsearch.yml

덧붙이다
cluster.name: young-application  
node.name: node-2 
network.host: 10.170.224.67
discovery.zen.ping.unicast.hosts: ["10.170.224.68"]

여기서 cluster.그룹 이름입니다. 이것은 기본값을 사용하지 마십시오. 주석을 수정하고 삭제하십시오. 만약 여러 개의 기계가 같은 그룹에 가입한다면 이 값은 반드시 같아야 합니다.
noide.그룹 안의 모든 노드의 값, 즉 현재 기계의 노드의 값입니다. 이 값은 노드마다 다르지 않습니다.
network host 현재 네트워크 IP로 변경
discovery.zen.ping.unicast.hosts의 ip는 다른 노드의 ip입니다. 만약에 제가 5대의 기계를 가지고 있다면 여기에 다른 4대의 기계의 ip를 써야 합니다.
같은 이치로 다른 노드에 대해서는 다른 노드를 협상하여 쉼표로 구분해야 한다
elasticSearch는 대응하는 노드를 찾아서 자동으로 조각을 나누고 복사 집합을 만들 것입니다.
elasticsearch 시작 오류
ERROR: bootstrap checks failed
max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

첫번째 문제
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

지금은 루트가 아니기 때문에 루트 사용자 이름으로 전환하여 다음 작업을 진행하십시오
vi /etc/sysctl.conf 

다음 구성 추가:
vm.max_map_count=655360

저장하고 종료, 실행 sysctl -p 명령
두 번째 문제.
 max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]

루트에서 조작해야 돼요.
 vi /etc/security/limits.conf 

구성 추가
 elasticsearch soft nofile 65536
 elasticsearch hard nofile 65536
 

계정 탈퇴, 계정 다시 로그인elasticsearch 실행ulimit -Hn 효력 발생 여부 확인
elasticsearch 다시 시작
다른 서버도 위의 조작에 따라 설정하면 된다
yii2의 httpaddress 설정도 바꿔야 돼요.
 ['http_address' => '10.170.224.67:9200']

클러스터 여기에서 저는 테스트에 성공하지 못했습니다. 왜냐하면 저는 서버 한 대만 사용할 수 있기 때문입니다. 비록 시작은 성공했지만 ii2가 클러스터를 방문했을 때 잘못 보고했습니다. 직접적으로killed를 했습니다. 저는 다른 글을 참고했습니다. 제가 클러스터를 부추기는 것은 닥친 문제와 결합하여 쓴 것입니다. 오류가 있으면 바로잡고 다른 사람을 데리고 갈수록 헷갈리지 않도록 하세요.
참고 사항: http://blog.csdn.net/xiegh201...http://www.fancyecommerce.com...http://blog.csdn.net/xxxxxx91...http://blog.csdn.net/u0123714...

좋은 웹페이지 즐겨찾기